Bài viết này khám phá cách cập nhật và tạo các lệnh Stata để tích hợp với những mô hình AI phổ biến như ChatGPT, Claude, Gemini và Grok. Sau khi bài đăng trước về lệnh Stata để chạy ChatGPT trở nên phổ biến, những thay đổi trong mã API của OpenAI đã khiến lệnh đó không còn hoạt động. Mục tiêu của chúng tôi là hướng dẫn bạn cách điều chỉnh mã API và viết các lệnh Stata tương tự để tận dụng sức mạnh của các công cụ AI khác nhau trực tiếp từ môi trường Stata.
Trọng tâm của bài viết này, cũng như bài trước, là minh họa mức độ dễ dàng để tận dụng các tính năng của PyStata nhằm kết nối với ChatGPT và các công cụ AI khác, thay vì đưa ra lời khuyên về cách sử dụng các công cụ AI để trả lời các câu hỏi cụ thể của Stata. Do đó, các ví dụ chỉ đơn giản là yêu cầu một bài haiku về Stata. Tuy nhiên, bạn có thể truyền bất kỳ yêu cầu nào mà bạn thấy hữu ích trong quy trình làm việc của mình với Stata.
Tổng Quan Về Tích Hợp Stata/Python
Chúng tôi giả định rằng bạn đã quen thuộc với tích hợp Stata/Python và cách viết lệnh chatgpt ban đầu. Nếu các chủ đề này còn lạ lẫm, bạn nên đọc các bài đăng trên blog dưới đây:
* Tích hợp Stata/Python phần 1: Thiết lập Stata để sử dụng Python
* Tích hợp Stata/Python phần 2: Ba cách sử dụng Python trong Stata
* Tích hợp Stata/Python phần 3: Cách cài đặt các gói Python
* Tích hợp Stata/Python phần 4: Cách sử dụng các gói Python
* Tích hợp Stata/Python phần 6: Làm việc với các API và dữ liệu JSON
* Tích hợp Stata/Python phần 8: Sử dụng Giao diện Hàm Stata để sao chép dữ liệu từ Stata sang Python
Cập Nhật Lệnh ChatGPT
Để sử dụng đoạn mã dưới đây, bạn sẽ cần một tài khoản người dùng OpenAI và khóa API OpenAI riêng của mình. Khóa API cũ từ năm 2023 có thể không còn dùng được, do đó bạn có thể cần tạo khóa mới.
Bạn cũng cần nhập lệnh `shell pip install openai` vào cửa sổ Lệnh của Stata để cài đặt gói Python `openai`. Nếu bạn đang sử dụng Python như một phần của nền tảng như Anaconda, bạn có thể cần một phương pháp khác để cài đặt gói `openai`. Tác giả đã phải gõ `shell pip uninstall openai` để gỡ bỏ phiên bản cũ và `shell pip install openai` để cài đặt phiên bản mới hơn.
Tiếp theo, chúng ta cần thay thế mã Python cũ bằng mã mới hơn sử dụng cú pháp API hiện đại. Tìm kiếm "python function to prompt chatgpt through api" đã dẫn đến trang hướng dẫn nhanh dành cho nhà phát triển trên trang web OpenAI. Sau một thời gian đọc và thử nghiệm, mã Python dưới đây đã được hoàn thành. Hàm Python `query_openai()` gửi lời nhắc qua API, sử dụng mô hình "gpt-4.1-mini" và nhận phản hồi. Các tùy chọn cho các mô hình khác không được đưa vào, nhưng bạn có thể thay đổi mô hình nếu muốn.
Phần còn lại của mã Python thực hiện ba việc với phản hồi. Thứ nhất, nó in phản hồi trong cửa sổ Kết quả của Stata. Thứ hai, nó ghi phản hồi vào một tệp có tên `chatgpt_output.txt`. Và thứ ba, nó sử dụng module SFI của Stata để chuyển phản hồi từ Python sang một macro cục bộ trong Stata. Bước thứ ba này hoạt động tốt đối với các phản hồi đơn giản, nhưng có thể dẫn đến lỗi đối với các phản hồi dài bao gồm các ký tự không chuẩn hoặc nhiều dấu ngoặc đơn hoặc kép. Bạn có thể đặt ký tự `#` ở đầu dòng “`Macro.setLocal(…`” để chú thích dòng đó và ngăn lỗi xảy ra.
Bạn có thể lưu mã dưới đây vào một tệp có tên `chatgpt.ado`, đặt tệp này vào thư mục ado cá nhân của bạn và sử dụng nó như bất kỳ lệnh Stata nào khác. Bạn có thể gõ `adopath` để tìm thư mục ado cá nhân của mình.
1capture program drop chatgpt
2program chatgpt, rclass
3 version 19.5 // (hoặc version 19 nếu bạn không có StataNow)
4 args InputText
5 display ""
6 python: query_openai("`InputText'", "gpt-4.1-mini")
7 return local OutputText = `"`OutputText'"'python:
import os
from openai import OpenAI
from sfi import Macro
def query_openai(prompt: str, model: str = "gpt-4.1-mini") -> str:
# Truyền chuỗi đầu vào từ một macro cục bộ của Stata sang Python
inputtext = Macro.getLocal('InputText')
# Nhập khóa API của bạn
client = OpenAI(api_key=" PASTE YOUR API KEY HERE ")
# Gửi lời nhắc qua API và nhận phản hồi
response = client.chat.completions.create(
model= model,
messages=[
{"role": "user", "content": inputtext}
]
)
# In phản hồi trong cửa sổ Kết quả
print(response.choices[0].message.content)
# Ghi phản hồi vào một tệp văn bản
f = open("chatgpt_output.txt", "w")
f.write(response.choices[0].message.content)
f.close()
# Truyền chuỗi phản hồi từ Python trở lại một macro cục bộ của Stata
Macro.setLocal("OutputText", response.choices[0].message.content)
end
end
Bây giờ chúng ta có thể chạy lệnh `chatgpt` của mình và xem phản hồi trong cửa sổ Kết quả.
1. chatgpt "Write a haiku about Stata."
2Data flows with ease,
3Stata charts the silent truths,
4Insights bloom in code.Chúng ta có thể gõ `return list` để xem phản hồi được lưu trữ trong macro cục bộ `r(OutputText)`.
1. return list
2macros:
3 r(OutputText) : "Data flows with ease, Stata charts the silent truths, Insights bloom .."Và chúng ta có thể gõ `type chatgpt_output.txt` để xem phản hồi được lưu trong tệp `chatgpt_output.txt`.
1. type chatgpt_output.txt
2Data flows with ease,
3Stata charts the silent truths,
4Insights bloom in code.Nó đã hoạt động! Hãy xem liệu chúng ta có thể sử dụng một chiến lược tương tự để tạo lệnh Stata cho một mô hình AI khác hay không.
Lệnh Stata Để Dùng Claude
Claude là một mô hình AI phổ biến được phát triển bởi Anthropic. Claude bao gồm một giao diện API, và bạn sẽ cần thiết lập một tài khoản người dùng và lấy khóa API trên trang web của nó. Sau khi có được khóa API, tìm kiếm "python function to query claude api" đã dẫn đến trang web "Get started with Claude". Một lần nữa, sau một thời gian đọc và thử nghiệm, mã Python dưới đây đã được hoàn thành. Bạn sẽ cần gõ `shell pip install anthropic` vào cửa sổ Lệnh của Stata để cài đặt gói `anthropic`.
Hãy chú ý xem mã Python dưới đây tương tự như mã Python trong lệnh `chatgpt` của chúng ta đến mức nào. Sự khác biệt lớn duy nhất là mã gửi lời nhắc qua API và nhận phản hồi. Mọi thứ khác gần như giống hệt nhau.
Bạn có thể lưu mã dưới đây vào một tệp có tên `claude.ado`, đặt tệp này vào thư mục ado cá nhân của bạn và sử dụng nó giống như bất kỳ lệnh Stata nào khác.
1capture program drop claude
2program claude, rclass
3 version 19.5 // (hoặc version 19 nếu bạn không có StataNow)
4 args InputText
5 display ""
6 python: query_claude()
7 return local OutputText = `"`OutputText'"'python:
import os
from sfi import Macro
from anthropic import Anthropic
def query_claude():
# Truyền chuỗi đầu vào từ một macro cục bộ của Stata sang Python
inputtext = Macro.getLocal('InputText')
# Nhập khóa API của bạn
client = Anthropic(
api_key=' PASTE YOUR API KEY HERE '
)
# Gửi lời nhắc qua API và nhận phản hồi
response = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=1000,
messages=[
{"role": "user", "content": inputtext}
]
)
# In phản hồi vào cửa sổ Kết quả
print(response.content[0].text)
# Ghi phản hồi vào một tệp văn bản
f = open("claude_output.txt", "w")
f.write(response.content[0].text)
f.close()
# Truyền chuỗi phản hồi từ Python trở lại một macro cục bộ của Stata
Macro.setLocal("OutputText", response.content[0].text)
end
end
Bây giờ chúng ta có thể chạy lệnh `claude` của mình và xem phản hồi.
1. claude "Write a haiku about Stata."
2Here is a haiku about Stata:
3Stata, my old friend
4Analyzing data with ease
5Insights ever foundChúng ta có thể gõ `return list` để xem phản hồi được lưu trữ trong macro cục bộ `r(OutputText)`.
1. return list
2macros:
3 r(OutputText) : "Here is a haiku about Stata: Stata, my old friend Analyzing data with ea.."Và chúng ta có thể gõ `type claude_output.txt` để xem phản hồi được lưu trong tệp `claude_output.txt`.
1. type claude_output.txt
2Here is a haiku about Stata:
3Stata, my old friend
4Analyzing data with ease
5Insights ever foundĐôi khi bạn có thể thấy một lỗi như dưới đây. Điều này không cho thấy vấn đề với mã của bạn. Nó cho biết rằng dịch vụ API hoặc mạng đã hết thời gian hoặc bị gián đoạn. Đơn giản là chờ và thử lại.
1File "C:\Users\ChuckStata\AppData\Local\Programs\Python\Python313\Lib\site-packages\anthropic\
2> _base_client.py", line 1065, in request
3 raise APITimeoutError(request=request) from err
4anthropic.APITimeoutError: Request timed out or interrupted. This could be due to a network timeout,
5> dropped connection, or request cancellation. See https://docs.anthropic.com/en/api/errors#long-requests
6> for more details.
7r(7102);Lệnh Stata Để Dùng Gemini
Gemini là một mô hình AI phổ biến được phát triển bởi Google. Gemini cũng bao gồm một giao diện API và bạn sẽ cần thiết lập một tài khoản người dùng và lấy khóa API trên trang web của nó. Sau khi có được khóa API, tìm kiếm "python function to query gemini api" đã dẫn đến trang web Gemini API quickstart. Một lần nữa, sau một thời gian đọc và thử nghiệm, mã Python dưới đây đã được hoàn thành. Bạn sẽ cần gõ `shell pip install -q -U google-genai` vào cửa sổ Lệnh của Stata để cài đặt gói `google-genai`.
Một lần nữa, bạn có thể lưu mã dưới đây vào một tệp có tên `gemini.ado`, đặt tệp này vào thư mục ado cá nhân của bạn và sử dụng nó giống như bất kỳ lệnh Stata nào khác.
1capture program drop gemini
2program gemini, rclass
3 version 19.5 // (hoặc version 19 nếu bạn không có StataNow)
4 args InputText
5 display ""
6 python: query_gemini()
7 return local OutputText = `"`OutputText'"'python:
import os
from sfi import Macro
from google import genai
def query_gemini():
# Truyền chuỗi đầu vào từ một macro cục bộ của Stata sang Python
inputtext = Macro.getLocal('InputText')
# Nhập khóa API của bạn
client = genai.Client(api_key=" PASTE YOUR API KEY HERE ")
# Gửi lời nhắc qua API của Claude và nhận phản hồi
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=inputtext
)
# In phản hồi vào cửa sổ Kết quả
print(response.text)
# Ghi phản hồi vào một tệp văn bản
f = open("gemini_output.txt", "w")
f.write(response.text)
f.close()
# Truyền chuỗi phản hồi từ Python trở lại một macro cục bộ của Stata
Macro.setLocal("OutputText", response.text)
end
end
Bây giờ chúng ta có thể chạy lệnh `gemini` của mình và xem phản hồi.
1. gemini "Write a haiku about Stata."
2Commands flow so fast,
3Data shaped, models defined,
4Insights now appear.Chúng ta có thể gõ `return list` để xem phản hồi được lưu trữ trong macro cục bộ `r(OutputText)`.
1. return list
2macros:
3 r(OutputText) : "Commands flow so fast, Data shaped, models defined, Insights now appea.."Và chúng ta có thể gõ `type gemini_output.txt` để xem phản hồi được lưu trong tệp `gemini_output.txt`.
1. type gemini_output.txt
2Commands flow so fast,
3Data shaped, models defined,
4Insights now appear.Lệnh Stata Để Dùng Grok
Thêm một lệnh nữa cho vui. Grok là một mô hình AI phổ biến khác được phát triển bởi xAI. Bạn sẽ cần thiết lập một tài khoản người dùng và lấy khóa API trên trang web của nó. Sau khi có được khóa API, tìm kiếm "python function to query grok api" đã dẫn đến trang web Hitchhiker’s Guide to Grok. Một lần nữa, sau một thời gian đọc và thử nghiệm, mã Python dưới đây đã được hoàn thành. Bạn sẽ cần gõ `shell pip install xai_sdk` vào cửa sổ Lệnh của Stata để cài đặt gói `xai_sdk`.
Một lần nữa, bạn có thể lưu mã dưới đây vào một tệp có tên `grok.ado`, đặt tệp này vào thư mục ado cá nhân của bạn và sử dụng nó giống như bất kỳ lệnh Stata nào khác.
1capture program drop grok
2program grok, rclass
3 version 19.5 // (hoặc version 19 nếu bạn không có StataNow)
4 args InputText
5 display ""
6 python: query_grok("`InputText'", "grok-4")
7 return local OutputText = `"`OutputText'"'python:
import os
from sfi import Macro
from xai_sdk import Client
from xai_sdk.chat import user, system
def query_grok(prompt: str, model: str = "grok-4") -> str:
# Truyền chuỗi đầu vào từ một macro cục bộ của Stata sang Python
inputtext = Macro.getLocal('InputText')
# Nhập khóa API của bạn
client = Client(api_key=" PASTE YOUR API KEY HERE ")
# Gửi lời nhắc qua API của Claude và nhận phản hồi
chat = client.chat.create(model=model)
chat.append(user(inputtext))
response = chat.sample()
# In phản hồi vào cửa sổ Kết quả
print(response.content)
# Ghi phản hồi vào một tệp văn bản
f = open("grok_output.txt", "w")
f.write(response.content)
f.close()
# Truyền chuỗi phản hồi từ Python trở lại một macro cục bộ của Stata
Macro.setLocal("OutputText", response.content)
end
end
Bây giờ chúng ta có thể chạy lệnh `grok` của mình và xem phản hồi trong cửa sổ Kết quả.
1. grok "Write a haiku about Stata."
2Data streams unfold,
3Stata weaves the threads of truth,
4Insights bloom in code.Chúng ta có thể gõ `return list` để xem phản hồi được lưu trữ trong macro cục bộ `r(OutputText)`.
1. return list
2macros:
3 r(OutputText) : "Data streams unfold, Stata weaves the threads of truth, Insights b.."Và chúng ta có thể gõ `type grok_output.txt` để xem kết quả trong tệp `grok_output.txt`.
1. type grok_output.txt
2Data streams unfold,
3Stata weaves the threads of truth,
4Insights bloom in code.✨ Giá Trị Đắt Giá ✨
Những ví dụ trên đã chứng minh rằng việc viết và cập nhật các lệnh Stata để chạy các mô hình AI là tương đối dễ dàng. Các ví dụ được đưa ra một cách đơn giản và chỉ mang tính chất giáo dục. Tuy nhiên, bạn có thể dễ dàng tưởng tượng ra nhiều tùy chọn khác để sử dụng các mô hình khác nhau cho các loại lời nhắc khác, chẳng hạn như âm thanh hoặc hình ảnh. Đây là một bước tiến quan trọng giúp các nhà khoa học dữ liệu và nhà nghiên cứu tận dụng tối đa sức mạnh của AI mà không cần rời khỏi môi trường Stata quen thuộc.
Có một lưu ý quan trọng dành cho những ai đọc bài này trong tương lai: cú pháp API có thể thay đổi và mã trên có thể không còn hoạt động. Đây là bản chất của việc sử dụng API; chúng thay đổi và bạn sẽ phải tự tìm hiểu để cập nhật mã của mình. Tuy nhiên, có rất nhiều tài nguyên sẵn có trên internet để giúp bạn cập nhật mã hoặc viết các lệnh mới. Chúc may mắn và hãy tận hưởng quá trình khám phá!
Câu Hỏi Tư Duy Hoặc Bài Tập Ứng Dụng
1. **Mở Rộng Chức Năng**: Hãy sửa đổi một trong các lệnh `.ado` trên để cho phép người dùng chọn mô hình AI khác nhau (ví dụ: `gpt-3.5-turbo` thay vì `gpt-4.1-mini`) thông qua một tùy chọn trong lệnh Stata.
2. **Xử Lý Phản Hồi Phức Tạp Hơn**: Thử nghiệm gửi một lời nhắc dài hơn hoặc phức tạp hơn cho một mô hình AI (ví dụ: yêu cầu tóm tắt một đoạn văn bản nghiên cứu). Quan sát cách Stata xử lý phản hồi và xem xét cách bạn có thể cải thiện việc lưu trữ hoặc hiển thị phản hồi đó, đặc biệt là khi nó chứa các ký tự đặc biệt hoặc nhiều dấu ngoặc.
3. **Tích Hợp Dữ Liệu Thực**: Hãy thử viết một lệnh Stata để gửi dữ liệu từ một biến trong Stata đến một mô hình AI, yêu cầu nó phân tích hoặc tạo ra một bản tóm tắt dựa trên dữ liệu đó, và sau đó đưa phản hồi trở lại Stata.


