
Cách (và lý do) xây dựng một tác nhân AI (AI Agent) từ đầu bằng Python
Trong bài viết này, độc giả sẽ tìm hiểu về tác nhân AI (AI agent) là gì và cách xây dựng một tác nhân AI từ đầu bằng ngôn ngữ Python thuần túy, sử dụng API của Anthropic,...
Cách (và Lý do) Xây dựng một tác nhân AI từ đầu bằng Python
Bởi Bala Priya C vào ngày 5/10/2026 trong Trí tuệ Nhân tạo 0
Chia sẻ
Đăng bài
Chia sẻ
Trong bài viết này, bạn sẽ tìm hiểu tác nhân AI là gì và cách xây dựng một tác nhân từ đầu bằng Python thuần túy, sử dụng API của Anthropic, mà không cần dựa vào bất kỳ khung điều phối nào.
Các chủ đề chúng ta sẽ đề cập bao gồm:
Tại sao việc gọi công cụ là cần thiết và cách định nghĩa một công cụ mà mô hình có thể sử dụng.
Cách triển khai vòng lặp yêu cầu-thực thi-phản hồi điều khiển hành vi của tác nhân.
Cách thêm bộ nhớ bền vững để tác nhân duy trì ngữ cảnh qua nhiều lượt tương tác.
Giới thiệu
Một lệnh gọi đơn giản đến mô hình ngôn ngữ lớn là đủ khi câu trả lời có thể được tạo ra từ những gì mô hình đã biết: giải thích một chính sách, soạn thảo một phản hồi, tóm tắt văn bản. Nó không đủ khi câu trả lời phụ thuộc vào dữ liệu bên ngoài tập huấn luyện đó, chẳng hạn như trạng thái đơn hàng trực tiếp hoặc một hàng trong cơ sở dữ liệu của bạn; khoảng trống này là điều mà một tác nhân được xây dựng để lấp đầy.
Một tác nhân AI là kết quả khi mô hình có thể gọi đến một thứ khác — một hàm, một truy vấn cơ sở dữ liệu, một API — và sử dụng kết quả trước khi nó trả lời. Việc tìm đến một khung điều phối tác nhân để làm cho điều này hoạt động là một động thái hợp lý, cuối cùng.
Viết một cái từ đầu bằng Python thuần túy, sử dụng một lệnh gọi API thô, làm cho kiến trúc cơ bản trở nên rõ ràng. Về cốt lõi, chỉ có một mô hình, một vòng lặp quản lý tương tác và một tập hợp nhỏ các hàm được định nghĩa rõ ràng cung cấp cho mô hình các khả năng cần thiết. Loại bỏ các khung và trừu tượng hóa giúp dễ dàng nhìn thấy cách các phần này khớp với nhau và điều gì thực sự đang xảy ra bên dưới.
Bài viết này bao gồm:
Tại sao việc gọi công cụ là cần thiết và những gì bạn cần cài đặt để thử nghiệm
Cách mô tả một công cụ để mô hình biết khi nào và cách gọi nó
Vòng lặp yêu cầu-thực thi-phản hồi trông như thế nào trong mã
Cách thêm bộ nhớ để tác nhân duy trì ngữ cảnh qua các lượt
Bạn có thể tìm thấy mã đi kèm cho bài viết này trong kho lưu trữ GitHub này.
Điều kiện tiên quyết
Bạn cần Python 3.10 trở lên, một khóa API của Anthropic và SDK Python của Anthropic:
```
pip install anthropic
```
Đặt khóa của bạn làm biến môi trường để máy khách nhận nó mà không cần mã hóa cứng ở bất cứ đâu:
```
export ANTHROPIC_API_KEY="your-key-here"
```
Đây là tất cả những gì bạn cần để bắt đầu. Bạn có thể tìm thấy tất cả mã trong tập lệnh agent.py.
⚠️ Lưu ý dành cho độc giả: Anthropic sẽ chính thức ngừng hỗ trợ Claude Sonnet 4.5 vào ngày 30/11/2026. Nếu bạn đang làm theo hướng dẫn này sau ngày đó, mã mô hình cụ thể được sử dụng trong các ví dụ này sẽ không còn hoạt động. Để đảm bảo dự án của bạn chạy trơn tru, hãy thay thế chuỗi mô hình trong các lệnh gọi API bằng phiên bản mới hơn hoặc mô hình mới nhất hiện có.
Thiết lập lệnh gọi mô hình
Một trình bao bọc tối thiểu xung quanh API là một hàm gửi lời nhắc và trả về văn bản:
```python
import anthropic
client = anthropic.Anthropic()
def ask(prompt):
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=512,
system="You are a helpful support assistant. Be direct and factual.",
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
```
```python
import anthropic
client = anthropic.Anthropic()
def ask(prompt):
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=512,
system="You are a helpful support assistant. Be direct and factual.",
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
```
Điều này xử lý tốt phần lớn các câu hỏi – giải thích một chính sách, soạn thảo một thư trả lời, tóm tắt một đoạn văn. Tuy nhiên, nó thất bại ngay khi câu trả lời phụ thuộc vào dữ liệu mà mô hình chưa từng được cung cấp. Khi hỏi `ask("What is the status of order #4471?")`, mô hình không có cơ chế để kiểm tra: thông tin đó nằm trong cơ sở dữ liệu của bạn, không phải trong dữ liệu huấn luyện của nó. Mô hình hoặc sẽ nói rằng nó không biết, hoặc đưa ra một câu trả lời có vẻ hợp lý, và không có lời nhắc nào có thể thay đổi điều đó, vì không có lời nhắc nào cấp cho mô hình quyền truy cập vào dữ liệu mà nó chưa từng được cung cấp. Gọi công cụ (Tool calling) cung cấp cho mô hình một cách thức xác định để yêu cầu dữ liệu đó thay vì suy luận.
Đọc bài viết "The Roadmap to Mastering Tool Calling in AI Agents" để tìm hiểu thêm.
**Định nghĩa một công cụ mà mô hình có thể yêu cầu**
Cấp cho mô hình quyền truy cập vào một hàm (function) có nghĩa là viết hàm đó, và viết một mô tả về nó để mô hình có thể đọc. Mô tả này quan trọng vì nó cho mô hình biết chức năng của hàm và khi nào nên sử dụng nó.
```python
orders_db = {
"4471": {"status": "shipped", "carrier": "UPS", "eta": "2 days"},
"4472": {"status": "processing", "carrier": None, "eta": None},
}
def get_order_status(order_id):
return orders_db.get(order_id, {"error": "No order found with that ID"})
get_order_status_schema = {
"name": "get_order_status",
"description": (
"Looks up the current status of a customer order by its ID. "
"Use this any time a question depends on current order data "
"rather than general policy information."
),
"input_schema": {
"type": "object",
"properties": {
"order_id": {"type": "string", "description": "The order ID to look up, e.g. '4471'"},
},
"required": ["order_id"],
},
}
```
```python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
```
```python
orders_db = {
"4471": {"status": "shipped", "carrier": "UPS", "eta": "2 days"},
"4472": {"status": "processing", "carrier": None, "eta": None},
}
def get_order_status(order_id):
return orders_db.get(order_id, {"error": "No order found with that ID"})
get_order_status_schema = {
"name": "get_order_status",
"description": (
"Looks up the current status of a customer order by its ID. "
"Use this any time a question depends on current order data "
"rather than general policy information."
),
"input_schema": {
"type": "object",
"properties": {
"order_id": {"type": "string"
```




Nguồn tin: Machine Learning Mastery — Tác giả: Bala Priya C. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.