Đại lý AI là gì? Cách chúng hoạt động, bạn có thể chạy với vòng lặp tác nhân đơn giản
Một tác nhân AI làm được nhiều việc hơn là chỉ trả lời. Nó xác định mục tiêu, lựa chọn hành động, kiểm tra kết quả và tiếp tục. Tìm hiểu những gì bên trong nó, chạy một vòng lặp nhỏ trong Python và hiểu những rủi ro trước khi bạn tin tưởng vào nó.
- Tác nhân AI thường là một mô hình ngôn ngữ chạy theo vòng lặp, có các công cụ và mục tiêu.
- Vòng lặp rất đơn giản: quyết định, hành động, quan sát kết quả và lặp lại cho đến khi hoàn thành.
- Mô hình chỉ đề xuất hành động. Mã của bạn chạy chúng, đó là nơi bạn thực thi các quy tắc.
- Đại lý có thể lặp lại hoặc lạm dụng các công cụ, vì vậy hãy đặt giới hạn bước và yêu cầu phê duyệt đối với các hành động rủi ro.
Hãy hỏi chatbot về đơn hàng trễ và nó sẽ cho bạn một số lời khuyên. Hãy hỏi đại lý AI và họ có thể tra cứu đơn hàng, kiểm tra độ trễ, áp dụng phiếu thưởng và báo cáo lại. Sự khác biệt là tác nhân có thể thực hiện hành động và phản ứng với những gì xảy ra, thay vì chỉ đưa ra một phản hồi.
Thuật ngữ này được sử dụng rộng rãi trong tiếp thị, vì vậy hướng dẫn này tập trung vào cách các hệ thống này thực sự hoạt động. Để làm cho nó cụ thể, chúng tôi đã xây dựng một vòng lặp tác nhân nhỏ trong Python 3.13 và chạy nó, và kết quả đầu ra bên dưới là từ những lần chạy đó. “Mô hình” của chúng tôi là một chức năng theo kịch bản, không phải là mô hình AI thực sự, do đó bất kỳ ai cũng có thể chạy và kiểm tra vòng lặp. Nó cho thấy cấu trúc kiểm soát, không phải trí thông minh. Mới làm quen với những điều cơ bản? Trước tiên hãy đọc mô hình ngôn ngữ lớn là gì.
Đặc vụ AI là gì?
Không có định nghĩa thống nhất duy nhất. Trong thực tế hiện nay, tác nhân AI là phần mềm theo đuổi mục tiêu bằng cách liên tục quyết định việc cần làm tiếp theo, sử dụng các công cụ để hành động trên thế giới và điều chỉnh dựa trên kết quả. Thông thường, việc ra quyết định xuất phát từ một mô hình ngôn ngữ lớn.
Hãy nghĩ về sự khác biệt giữa người đưa ra chỉ dẫn và người chạy việc vặt. Những câu trả lời đầu tiên một lần. Người thứ hai đi ra ngoài, thấy cửa hàng đã đóng cửa, thử một cửa hàng khác và chỉ quay lại khi công việc hoàn thành.
Chatbot, quy trình làm việc hay đại lý?
| Loại | Ai quyết định các bước? | Nó có thể hành động được không? | Ví dụ |
|---|---|---|---|
| Chatbot | Người dùng lái xe mỗi lượt | Thường thì không | Trả lời câu hỏi từ văn bản |
| Quy trình làm việc cố định | Nhà phát triển trước | Có, trên đường dẫn đã đặt | Tóm tắt từng vé, sau đó định tuyến nó |
| đặc vụ AI | Mô hình tại thời điểm chạy | Có, trong giới hạn | Điều tra và giải quyết một vé |
Chúng tồn tại trên một quang phổ và nhiều hệ thống hữu ích là sự kết hợp. Câu hỏi quan trọng là có bao nhiêu đường dẫn được quyết định trong thời gian chạy.
Bên trong một đại lý có gì
| phần | Vai trò |
|---|---|
| người mẫu | Quyết định bước tiếp theo, dựa trên mục tiêu và những gì đã xảy ra cho đến nay |
| Hướng dẫn | Mục tiêu, quy tắc và giới hạn cần tuân theo |
| Công cụ | Các chức năng mà nó có thể yêu cầu, như tìm kiếm hoặc gọi API |
| Bộ nhớ | Những gì nó biết từ các bước trước đó hoặc các phiên trước đó |
| Vòng điều khiển | Mã thông thường chạy các công cụ và thực thi các giới hạn |
Vòng lặp đại lý
- Quyết định. Mô hình xem xét mục tiêu và lịch sử rồi chọn một hành động hoặc quyết định hành động đó đã kết thúc.
- Hành động. Mã của bạn chạy công cụ được yêu cầu.
- Quan sát. Kết quả được thêm vào lịch sử.
- Lặp lại, cho đến khi đạt được mục tiêu hoặc đạt đến giới hạn.
Đó là cốt lõi của hầu hết các đại lý. Sự tinh vi chủ yếu nằm ở mô hình, công cụ và các biện pháp bảo vệ xung quanh vòng lặp này.
Một vòng lặp bạn có thể chạy
Đại lý nhỏ của chúng tôi xử lý các đơn đặt hàng bị trì hoãn. Nó có hai công cụ và một trong số chúng cần có sự chấp thuận của con người vì nó tốn tiền:
ORDERS = {
"A100": {"status": "delayed", "days_late": 6},
"B200": {"status": "shipped", "days_late": 0},
}
def get_order(order_id):
return ORDERS.get(order_id, {"error": "order not found"})
def issue_voucher(order_id, amount):
return {"voucher": f"V-{order_id}", "amount": amount}
TOOLS = {"get_order": get_order, "issue_voucher": issue_voucher}
NEEDS_APPROVAL = {"issue_voucher"}
Và đây chính là vòng lặp. Đó là mã thông thường và mọi quy tắc an toàn đều tồn tại ở đây chứ không phải trong mô hình:
def run_agent(goal, model, approve, max_steps=5):
history = []
for step in range(1, max_steps + 1):
decision = model(goal, history)
if "finish" in decision:
return decision["finish"]
name, args = decision["tool"], decision["args"]
if name in NEEDS_APPROVAL and not approve(name, args):
result = {"denied": True}
else:
result = TOOLS[name](**args)
history.append({"tool": name, "result": result})
return None # stopped: step limit reached
Để sử dụng mô hình thực, bạn sẽ thay thế hàm model bằng lệnh gọi tới API LLM, chuyển cho nó mục tiêu, lịch sử và mô tả về các công cụ của bạn. Vòng lặp gần như giữ nguyên.
Điều gì đã xảy ra trong cuộc chạy của chúng tôi
Chúng tôi đã thử năm tình huống với chức năng quyết định theo kịch bản và ghi lại từng bước.
Một đơn hàng bị trì hoãn, với chứng từ đã được phê duyệt
step 1: get_order({'order_id': 'A100'}) -> {'status': 'delayed', 'days_late': 6}
step 2: issue_voucher({'order_id': 'A100', 'amount': 200}) -> {'voucher': 'V-A100', 'amount': 200}
step 3: finish -> Sorry for the delay. Voucher V-A100 issued.
Mỗi bước sử dụng kết quả của bước trước đó. Chứng từ chỉ được xem xét khi sự chậm trễ đã được xác nhận.
Lệnh tương tự nhưng bị từ chối phê duyệt
step 2: issue_voucher({'order_id': 'A100', 'amount': 200}) -> {'denied': True}
step 3: finish -> Your order is late. A person will review compensation.
Con người nói không, công cụ không bao giờ chạy và nhân viên hỗ trợ đã điều chỉnh câu trả lời của mình.
Lệnh không xác định
step 1: get_order({'order_id': 'Z999'}) -> {'error': 'order not found'}
step 2: finish -> I could not find that order.
Việc cung cấp cho các công cụ thông báo lỗi rõ ràng sẽ giúp ích. Một người mẫu thực sự có thể đọc chúng và phản hồi một cách hợp lý thay vì đoán mò.
Một mô hình bị mắc kẹt
Chúng tôi cũng đã hoán đổi một chức năng quyết định bị lỗi lặp lại cùng một hành động mãi mãi:
step 1: get_order({'order_id': 'B200'}) -> {'status': 'shipped', 'days_late': 0}
step 2: get_order({'order_id': 'B200'}) -> {'status': 'shipped', 'days_late': 0}
step 3: get_order({'order_id': 'B200'}) -> {'status': 'shipped', 'days_late': 0}
stopped: step limit reached
Các đại lý thực sự có thể rơi vào những vòng lặp như thế này và mỗi bước với một mô hình thực đều tốn tiền. Nếu không có max_steps, điều này sẽ không bao giờ kết thúc.
Cách thức hoạt động của các công cụ
Đây là phần bị hiểu lầm nhiều nhất. Một mô hình ngôn ngữ không thể tự chạy bất cứ thứ gì. Nó tạo ra văn bản có cấu trúc cho biết nó muốn sử dụng công cụ nào, với những đối số nào. Mã của bạn quyết định có chạy mã đó hay không. Đó là lý do tại sao vòng lặp là nơi thích hợp cho các quyền, xác thực và ghi nhật ký.
Các nhà cung cấp mô hình cung cấp công cụ hoặc chức năng yêu cầu điều này. Giao thức bối cảnh mô hình (MCP) là một tiêu chuẩn mở để kết nối các mô hình với các công cụ và dữ liệu và bài viết của chúng tôi về Playwright MCP cho thấy một cách sử dụng. Viết tên và mô tả công cụ rõ ràng, vì mô hình dựa vào đó để lựa chọn chính xác.
Mẹo: Bắt đầu với các công cụ chỉ đọc. Một đại lý chỉ có thể tra cứu mọi thứ sẽ ít nguy hiểm hơn nhiều so với một đại lý có thể gửi, xóa hoặc thanh toán. Thêm quyền ghi vào từng công cụ một khi bạn đã thấy nó hoạt động như thế nào.
Bộ nhớ
| Loại | Giữ | Ví dụ |
|---|---|---|
| Ngắn hạn | Lịch sử của nhiệm vụ hiện tại | Danh sách history trong vòng lặp của chúng tôi |
| Dài hạn | Sự thật được lưu giữ giữa các phiên | Tùy chọn người dùng trong cơ sở dữ liệu |
| Kiến thức | Tài liệu được lấy ra khi cần thiết | RAG sử dụng phần nhúng |
Các tác vụ dài có thể vượt quá cửa sổ ngữ cảnh của mô hình, vì vậy hệ thống thường tóm tắt các bước cũ hơn. Các bản tóm tắt có thể mất thông tin chi tiết, đó là một lý do khiến các tác nhân hoạt động lâu dài có thể đi chệch hướng.
Hệ thống đa tác nhân
Một số hệ thống phân chia công việc giữa một số tác nhân chuyên biệt, chẳng hạn như người lập kế hoạch, nhà nghiên cứu và người đánh giá. Điều này có thể giúp thực hiện các nhiệm vụ lớn được phân chia gọn gàng. Nó cũng làm tăng thêm chi phí, nhiều cách dẫn đến lỗi hơn và khó gỡ lỗi hơn. Trước tiên hãy thử một tác nhân duy nhất với các công cụ tốt và chỉ chia tách nó khi có lý do rõ ràng.
Rủi ro và hạn chế
- Hành động sai. Lỗi của chatbot là một câu nói tồi. Lỗi của nhân viên có thể là email đã gửi hoặc bản ghi bị xóa.
- Chèn nhanh. Một trang web hoặc email mà nhân viên hỗ trợ đọc có thể chứa các hướng dẫn ẩn. Hãy coi tất cả đầu ra của công cụ là dữ liệu không đáng tin cậy, không phải là lệnh.
- Lỗi gộp. Một lỗi nhỏ ban đầu có thể khiến mọi bước sau đó đi sai hướng.
- Chi phí và độ trễ. Mỗi bước có thể là một lệnh gọi mô hình khác, do đó, một tác vụ có thể chậm hơn và tốn kém hơn nhiều so với một lời nhắc duy nhất.
- Sự không nhất quán. Cùng một mục tiêu có thể đi theo một con đường khác nhau trong mỗi lần chạy, điều này khiến việc kiểm tra trở nên khó khăn hơn.
- Trách nhiệm giải trình. Mọi người vẫn chịu trách nhiệm về những gì hệ thống thực hiện, vì vậy hãy lưu giữ hồ sơ.
Lan can quan trọng
- Đặc quyền tối thiểu. Chỉ cung cấp cho mỗi nhân viên những công cụ và quyền truy cập mà họ cần.
- Sự chấp thuận của con người đối với mọi thứ tốn kém, không thể thay đổi hoặc tác động bên ngoài, giống như bản demo của chúng tôi.
- Giới hạn cứng về số bước, thời gian và mức chi tiêu.
- Xác thực đầu vào của công cụ trong mã và không dựa vào hướng dẫn của mô hình.
- Ghi lại từng bước, để bạn có thể biết lý do xảy ra sự cố. Xem giám sát và khả năng quan sát.
- Thử nghiệm bằng các tình huống thực tế, bao gồm cả lỗi. Kiểm tra kết quả cuối cùng cũng như các câu trả lời riêng lẻ. Hướng dẫn của chúng tôi về các phương pháp hay nhất về tác nhân AI sẽ đi sâu hơn vào quá trình triển khai.
Khi nào nên sử dụng đại lý
| Sử dụng đại lý khi | Sử dụng một cái gì đó đơn giản hơn khi |
|---|---|
| Các bước không thể biết trước | Các bước luôn giống nhau |
| Nhiệm vụ cần một số công cụ | Một lời nhắc có thể thực hiện công việc |
| Kết quả thay đổi những gì xảy ra tiếp theo | Một quy trình làm việc cố định sẽ hoạt động |
| Sai lầm là rẻ tiền, hoặc có thể xem xét lại | Lỗi gây tốn kém và khó khắc phục |
Trợ lý mã hóa là một trong những ví dụ hoàn thiện nhất hiện nay, vì họ có thể đọc tệp, chạy thử nghiệm, xem lỗi và thử lại với sự xem xét kết quả của con người. Một bộ thử nghiệm mang lại cho họ một tín hiệu rõ ràng về sự thành công. Hướng dẫn của chúng tôi về kỹ thuật nhanh chóng cũng áp dụng cho việc viết hướng dẫn tốt cho đại lý. Hãy bắt đầu với điều đơn giản nhất có thể thực hiện được, bởi vì một cuộc gọi đơn lẻ được nhắc nhở tốt thường đánh bại được một nhân viên phức tạp.
Lời kết
Tác nhân AI ít bí ẩn hơn ta tưởng: một mô hình, một số công cụ và một vòng lặp có giới hạn. Phần khó khăn là sự tin tưởng, không phải mã. Để tìm hiểu cách chúng hoạt động, hãy lấy vòng lặp nhỏ của chúng tôi, kết nối nó với một mô hình thực bằng các công cụ chỉ đọc và xem nhật ký khi nó hoạt động. Bạn sẽ sớm thấy nó tỏa sáng ở đâu và nó cần con người ở đâu.
Câu hỏi thường gặp
Nói một cách đơn giản, tác nhân AI là gì?
Đây là phần mềm hoạt động hướng tới mục tiêu bằng cách chọn hành động, sử dụng công cụ và kiểm tra kết quả theo vòng lặp, thay vì chỉ đưa ra một câu trả lời duy nhất.
Sự khác biệt giữa chatbot và tác nhân AI là gì?
Một chatbot chủ yếu trả lời từng tin nhắn. Một đại lý có thể lập kế hoạch cho một số bước, gọi công cụ và thay đổi hướng đi dựa trên những gì xảy ra trong quá trình thực hiện.
Các tác nhân AI có cần một mô hình ngôn ngữ lớn không?
Hầu hết những hệ thống hiện đại đều sử dụng LLM để đưa ra quyết định, mặc dù ý tưởng rộng hơn về các tác nhân phần mềm đã cũ hơn và có thể sử dụng các quy tắc hoặc các phương pháp AI khác.
Tác nhân AI có an toàn không?
Chúng ẩn chứa những rủi ro thực sự, bao gồm cả những hành động sai trái và tiêm chích kịp thời. Giới hạn quyền của họ, yêu cầu phê duyệt các bước rủi ro, đặt giới hạn cứng và ghi lại mọi thứ.
Tác nhân AI có thể thay thế nhà phát triển hoặc người thử nghiệm không?
Nói chung là không phải hôm nay. Họ có thể xử lý nhiều nhiệm vụ được xác định rõ ràng nhưng mọi người vẫn cần đặt ra mục tiêu, xem xét kết quả đầu ra và chịu trách nhiệm về kết quả.
Tiếp tục học hỏi
Cần trợ giúp về kiểm tra, WordPress hoặc SEO?
Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.
Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại
Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.
Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó
Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …
Đọc bài viết →DevOpsGiải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng
Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…
Đọc bài viết →Phát triển phần mềmGiải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429
Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …
Đọc bài viết →Tự động hóa kiểm thửChế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối
Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…
Đọc bài viết →Kiểm thử phần mềmGiải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%
Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…
Đọc bài viết →Cơ sở dữ liệu & SQLDELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại
DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ
Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…
Đọc bài viết →Phát triển phần mềmGiao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch
Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …
Đọc bài viết →Phát triển phần mềmGiải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng
Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…
Đọc bài viết →Phát triển phần mềmHàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng
Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …
Đọc bài viết →Trí tuệ nhân tạoĐại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy
Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …
Đọc bài viết →DevOpsGiám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết
Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…
Đọc bài viết →DevOpsDocker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách
Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …
Đọc bài viết →Tự động hóa kiểm thửTDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each
TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…
Đọc bài viết →Phát triển phần mềmGit merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào
Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.
Đọc bài viết →Phát triển phần mềmList comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh
List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)
Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.
Đọc bài viết →