Một trong những chủ đề nóng nhất về AI trong năm qua là việc sử dụng Mô hình ngôn ngữ lớn (LLM) làm công cụ suy luận thông qua các các Tác nhân tự trị.
Khả năng suy luận nâng cao của các mô hình như GPT-4, Claude 3, Llama 3 và Gemini Ultra đã tạo tiền đề cho việc tạo ra các tác nhân ngày càng tinh vi và mạnh mẽ.
Chúng ta sẽ xem xét các khái niệm cốt lõi về tác nhân tự trị thông qua ba mẫu thiết kế khác nhau dưới đây:
- Đại lý phản ứng (ReAct Agent)
- Tác nhân lên nhiệm vụ (Task-Planner Agent)
- Tác nhân điều phối (Multi-Agent Orchestration)
Các mẫu sẽ tập trung vào giải quyết các công việc khác nhau một cách độc lập và không phụ thuộc vào ngôn ngữ cùng với các framework cụ thể.
Khái niệm
Trước khi đi vào từng mẫu, trước tiên chúng ta hãy hiểu các yếu tố chính được sử dụng trong các thiết kế này.
Lời nhắc (prompting)
Một thành phần cơ bản trong việc xây dựng các tác nhân là các kỹ thuật prompt được áp dụng cho mô hình ngôn ngữ.
Phương pháp điển hình để tạo lời nhắc bao gồm việc kết hợp các bước suy luận trung gian với mô hình, phương pháp này thường được gọi là lời nhắc Chuỗi suy nghĩ (CoT). Kỹ thuật này cho phép mô hình giải quyết các vấn đề phức tạp theo từng bước.
Lời nhắc tiêu chuẩn đầu vào
Q. Roger có 5 quả bóng. Anh ấy mua thêm 2 thùng bóng, mỗi thùng có 3 bóng. Hỏi anh ấy có bao nhiêu quả bóng.
A. Anh ấy có 11 quả
Q. Quán cafe có 23 quả táo. Nếu họ sử dụng 20 quả sau đó mua thêm 6 quả nữa. Hỏi họ còn bao nhiêu quả.
Mô hình trả lời (sai)
A. Họ có 27 quả
Lời nhắc theo chuỗi suy nghĩ
Q. Roger có 5 quả bóng. Anh ấy mua thêm 2 thùng bóng, mỗi thùng có 3 bóng. Hỏi anh ấy có bao nhiêu quả bóng.
A. Ban đầu Roger có 5 quả. 2 thùng với mỗi thùng 3 quả như vậy có 6 quả. 5+6=11. Kết quả là 11
Q. Quán cafe có 23 quả táo. Nếu họ sử dụng 20 quả sau đó mua thêm 6 quả nữa. Hỏi họ còn bao nhiêu quả.
Mô hình trả lời (chính xác)
A. Quán cafe có 23 quả táo. Họ đã sử dụng 20 quả. Như vậy họ còn 3 quả. Họ mua thêm 6 quả. Vậy họ có 3 + 6 = 9 quả. Trả lời là 9 quả.
Các bạn thấy đấy, bằng cách đưa vào lời nhắc các bước suy luận trung gian theo trình tự suy nghĩ, mô hình có thể tạo ra các câu trả lời chính xác hơn so với các phương pháp khác.
Một kỹ thuật khác, được gọi là nhắc nhở Lý luận và Hành động (ReAct), là một phần mở rộng của CoT nhưng bao gồm các bước có thể thực hiện được trong một môi trường.
Suy nghĩ 1: Tôi cần tìm điều khiển Apple Remote và tìm phần mềm để tương tác với nó.
Hành động: Tìm kiếm [Apple Remote]
Suy luận: Apple Remote được hãng Apple giới thiệu vào tháng 11 năm 2005 … nó được thiết kế để điều khiển Front Row media center
bằng chương trình …
Suy nghĩ 2: Apple Remote được thiết kế để điều Front Row media center. Tôi cần tìm Front Row
tiếp theo và tìm xem nó có thể điều khiển thiết bị gì khác.
Hành động: Tìm kiếm [Front Row]
Suy luận: Không thể tìm thấy [Front Row]. Tìm tương tự [‘front Rơ Seat to Earth’,’Front Row Motorsports’,’Front Row (software)
‘,…]
Suy nghĩ 3: Không tìm thấy Front Row. Tôi cần tìm Front Row (software)
.
Hành động: Tìm kiếm [ Front Row (software)
]
Suy luận: Phần mềm Front Row đã không được tiếp tục duy trì…
Suy nghĩ 4: Front Row (software) được điều khiển bằng Apple Remote và bàn phím chức năng
. Vì vậy câu trả lời là bàn phím chức năng.
Hành động: Kết thúc [bàn phím chức năng
]
Trong ví dụ ở trên, mô hình xác định các hành động để thực hiện thông tin trả về nào sau đó được chuyển đến mô hình thông qua việc học trong ngữ cảnh để giúp giải quyết vấn đề.
Nếu chúng ta cố gắng giải quyết vấn đề này mà không có bối cảnh thực tế từ các hành động, mô hình có thể sẽ tạo ra một câu trả lời ảo giác.
Các kỹ thuật khác như tự phản ánh (Reflexion) là một cách đưa ra sự củng cố bằng lời nói cho mô hình để tự phản ánh các bước đã thực hiện trước đó. Tất cả các kỹ thuật này đều liên quan đến việc chia lời nhắc thành nhiều bước.
Nhập vai
Một cách để giữ mô hình nhận diện đúng chủ đề và tạo ra câu trả lời tốt nhất là sử dụng một vai trò để nhập vai vào. Điều này thường được đặt làm lời nhắc ban đầu (còn được gọi là lời nhắc hệ thống) được sử dụng với tác nhân để giới hạn và giữ cho đầu ra tập trung vào loại vấn đề mà bạn muốn mô hình giải quyết.
Ví dụ: đối với một tác nhân tập trung vào việc viết mã, việc chỉ định nhập vai của một “lập trình viên chuyên nghiệp” có thể cải thiện khả năng suy luận và giữ cho đầu ra của mô hình được giới hạn ở các chủ đề liên quan đến lập trình.
Công cụ
Tác nhân cần một cách để thực hiện hành động với môi trường của nó. Điều này có thể được thực hiện thông qua việc sử dụng các công cụ, tương tự như cách chúng ta (với tư cách là con người) sử dụng các công cụ để giúp giải quyết vấn đề của chính mình, các tác nhân cũng có thể sử dụng các công cụ mà chúng ta xác định.
Đối với các Tác nhân, công cụ là một phần trong chương trình của chúng tôi mà mô hình học cách sử dụng thông qua việc học trong ngữ cảnh. Điều này cần một lược đồ, sử dụng đầu vào và đầu ra có cấu trúc mà mô hình có thể suy luận các tham số tiềm năng. Bằng cách sử dụng mô hình như một công cụ suy luận ngôn ngữ tự nhiên, chúng tôi cố gắng tạo ra các hành động từ ngữ nghĩa của yêu cầu.
Đầu vào và đầu ra có cấu trúc
Khi gửi lời nhắc đến mô hình, chúng ta thường sử dụng ngôn ngữ tự nhiên nhưng khi xây dựng tác nhân, chúng ta cần một cách để “sắp xếp” ý định đến và đi từ bộ nhớ ứng dụng của mình. Một cách phổ biến để làm điều này là sử dụng ngôn ngữ có cấu trúc mà mô hình đã được đào tạo. Đây thường là JSON, mặc dù các ngôn ngữ có cấu trúc khác cũng có thể tương thích với nhiều mô hình.
Ký ức, bộ nhớ
Tác nhân cần một cách nào đó để theo dõi những gì đã được thực hiện giữa mỗi bước. Chúng ta có thể coi điều này giống như một “bàn ghi nhớ” trong đó nhân viên sẽ ghi chú về những gì nó đã thực hiện cho đến nay. Đây có thể là bộ nhớ ngắn hạn (thường là không trạng thái) hoặc bộ nhớ dài hạn (có trạng thái).
Máy trạng thái hữu hạn (Finite State Machine)
Máy trạng thái hữu hạn (FSM) là một mô hình tính toán được sử dụng để thiết kế và phân tích hành vi của hệ thống và phần mềm. Nó bao gồm một số lượng hữu hạn các trạng thái, sự chuyển tiếp giữa các trạng thái đó và các hành động phụ thuộc vào một trạng thái nhất định và sự xuất hiện của các sự kiện cụ thể.
Điều này có thể được sử dụng khi triển khai một tác nhân để quản lý các trạng thái của tác nhân, cho phép nó chuyển từ trạng thái này sang trạng thái khác dựa trên các kết quả đầu ra trước đó hoặc các điều kiện đáp ứng trong quá trình tương tác với môi trường.
Tác nhân tự trị
Tác nhân ReAct chuyên xử lý lý luận và hành động trong môi trường của nó.
Trong mẫu này, chúng ta có thể triển khai các lời nhắc ReAct khác nhau dưới dạng trạng thái cụ thể trong FSM. Cách tiếp cận này đảm bảo rằng các phản hồi của tác nhân nhất quán và phù hợp với bối cảnh hoặc nhiệm vụ hiện tại.
Mỗi trạng thái có thể đại diện cho nhiều thuộc tính khác nhau, bao gồm:
- lời nhắc về mô hình và,
- một trình xử lý để ánh xạ logic ứng dụng đến và đi từ mô hình
Các trạng thái chính được sử dụng trong ReAct là:
- Suy nghĩ – giải quyết vấn đề dựa trên các hành động đã thực hiện trước đó và xác định bước tiếp theo cần thực hiện.
- Hành động – xác định đúng công cụ sẽ sử dụng và đầu vào chính xác cho công cụ đó.
- Quan sát – tóm tắt hành vi từ hành động đến trí nhớ.
Lợi ích của việc triển khai tác nhân theo cách này là:
- khả năng dự đoán
- nhiệm vụ được tách biệt khỏi các trạng thái khác
- dễ dàng khắc phục sự cố
- dễ dàng thêm trạng thái mới
Các vấn đề tiềm ẩn bao gồm:
- dễ bị mắc kẹt trong các vòng lặp
- có thể bị lạc hướng hoặc mất tập trung so với yêu cầu ban đầu
Một tác nhân ReAct FSM đơn giản có thể được viết bằng Python, trong ví dụ này, giả sử phần phụ trợ LLM được triển khai ở nơi khác và tác nhân có các công cụ và bộ nhớ.
Ví dụ này sử dụng công cụ giá StockTicker để lấy thông tin thực tế về giá cổ phiếu. Nhân viên có thể suy luận khi câu hỏi hỏi về một mã cổ phiếu cụ thể và sử dụng công cụ này. Có thể thêm các công cụ bổ sung để đặt những câu hỏi phức tạp hơn. Mỗi trình xử lý chứa một lời nhắc cũng như phân tích cú pháp đầu vào và đầu ra có cấu trúc chính xác bằng cách sử dụng Pydantic để tạo các lược đồ JSON.
Việc triển khai này chưa hoàn tất nhưng đề cập đến một cách đơn giản để xây dựng tác nhân này.
Những cải tiến bổ sung sẽ là:
- để thêm nhận thức về cửa sổ ngữ cảnh vào bộ nhớ. Nếu đầu ra công cụ hoặc bộ nhớ tăng quá lớn, bạn sẽ cần phải nén nó. Chúng ta có thể tính ra độ dài bộ nhớ của mình bằng cách mã hóa mọi thứ trước tiên để xem liệu bộ nhớ có quá lớn hay không. Nếu đúng như vậy thì bạn có thể thực hiện tóm tắt, cắt bớt hoặc kỹ thuật khác để giảm tổng số mã thông báo trong bộ nhớ.
- thêm luồng điều khiển để hủy ngữ cảnh hoặc thoát khỏi vòng lặp.
Một trong những lợi thế khi triển khai tác nhân bằng FSM là nó không chỉ giới hạn ở các trạng thái ReAct. Các trạng thái bổ sung có thể được xác định cho các hành vi phức tạp hơn. Mẫu này cho phép tạo ra một nền tảng vững chắc và cơ sở mở rộng cho các tác nhân xây dựng.
Tác nhân lên nhiệm vụ
Người lập kế hoạch là một tác nhân xác định một kế hoạch cụ thể về những gì cần phải làm và cố gắng thực hiện kế hoạch đó theo nhiều bước. Đây là phần mở rộng của tác nhân ReAct bằng cách giới thiệu một bước lập kế hoạch.
Kế hoạch sẽ bao gồm các nhiệm vụ trong đó mỗi nhiệm vụ là một phần công việc riêng biệt. Trong ví dụ dưới đây, trình lập kế hoạch nhiệm vụ xác định một tập hợp các nhiệm vụ và sẽ thực hiện từng nhiệm vụ một.
Chúng tôi có thể kiểm tra lời nhắc lập kế hoạch để tạo nhiệm vụ bằng cách sử dụng playground OpenAI với GPT 4 Turbo.
Mô hình này có thể tạo ra các nhiệm vụ riêng biệt về những gì có thể cần phải thực hiện.
Giống như ví dụ ReAct, thiết kế cho tác nhân này có thể sử dụng FSM làm cơ sở cho việc triển khai nó. Bước lập kế hoạch sẽ diễn ra dưới dạng một trạng thái mới và thay vào đó, trạng thái hành động sẽ xuất hiện từ chồng nhiệm vụ và quan sát kết quả đầu ra từ các công cụ.
Lợi ích của mẫu này là công việc được lên kế hoạch trước thay vì liên tục như tác nhân ReAct. Điều này xác định sớm các bước trung gian có thể giúp giảm nguy cơ bị mắc kẹt trong một vòng lặp nhưng không được đảm bảo.
Điều này cũng đi kèm với một số vấn đề trong đó ban đầu tác nhân có thể mắc lỗi trong kế hoạch, điều này có thể gây ra lỗi trong suốt các nhiệm vụ và yêu cầu quay lại và tạo các nhiệm vụ mới. Có khả năng là không thể giải quyết được các nhiệm vụ như việc sử dụng công cụ không hợp lệ, đòi hỏi phải có kế hoạch mới và bắt đầu lại. Đây có thể là một sai lầm đắt giá, do đó việc lập kế hoạch chỉ nên giới hạn ở những nhiệm vụ dễ dự đoán.
Loại lời nhắc này tương tự như một dự án ban đầu phổ biến có tên AutoGPT, sử dụng hàng đợi nhiệm vụ để chia vấn đề thành các phần công việc nhỏ. Đây là một trong những dự án đầu tiên triển khai quy trình làm việc giống như tác tử với các mô hình ngôn ngữ.
Điều phối đa tác nhân
Khi yêu cầu Tác nhân lên nhiệm vụ phức tạp, thường rất khó để mở rộng quy mô hành vi của tác nhân một cách chính xác. Đây là một yếu tố hạn chế vì một số lý do, chẳng hạn như nhập vai, quá nhiều loại công cụ hoặc quá nhiều trạng thái về những gì tác nhân nên làm.
Một cách tiếp cận để giải quyết vấn đề này là tách biệt trách nhiệm của tác nhân và đưa ra một bước lý luận khác để liên lạc với các tác tử khác.
Bằng cách cung cấp cho các tác nhân khả năng giao tiếp, nó có thể ủy thác công việc thông qua việc sắp xếp các nhiệm vụ. Cách tiếp cận này tương tự như một mô hình giống như ủy quyền.
Thay vì có một tác nhân duy nhất làm mọi việc, chúng ta có thể xác định các tác nhân chuyên giải quyết các vấn đề cụ thể cũng có cách triển khai khác nhau.
Thay vì yêu cầu tác nhân tìm ra người sẽ liên lạc với ai, chúng ta có thể giới thiệu một người điều phối có thể vừa giám sát vừa định tuyến giữa các tác nhân để có được đầu ra mong muốn tốt nhất dựa trên nhiệm vụ.
Bằng cách tách biệt và trừu tượng hóa giao tiếp, các tác nhân không cần biết nhiệm vụ được giải quyết như thế nào.
Giống như các ví dụ trước, bước điều phối có thể được xác định bằng FSM và các kỹ thuật nhắc trước đó.
Ví dụ về triển khai đa tác nhân
Việc triển khai đa tác nhân ngày càng phổ biến trong cộng đồng để mở rộng quy mô nhiệm vụ tốt hơn.
Một dự án như vậy là CrewAI, nơi bạn có thể xác định tính cách của các đặc vụ, khả năng của họ và sau đó tạo ra một “đội” trong đó các đặc vụ làm việc cùng nhau để giải quyết các nhiệm vụ.
Mã ví dụ từ CrewAI:
import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
os.environ["SERPER_API_KEY"] = "Your Key"
search_tool = SerperDevTool()
# Define your agents with roles and goals
researcher = Agent(
role='Senior Research Analyst',
goal='Uncover cutting-edge developments in AI and data science',
backstory="""You work at a leading tech think tank.
Your expertise lies in identifying emerging trends.
You have a knack for dissecting complex data and presenting actionable insights.""",
verbose=True,
allow_delegation=False,
tools=[search_tool]
)
writer = Agent(
role='Tech Content Strategist',
goal='Craft compelling content on tech advancements',
backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
You transform complex concepts into compelling narratives.""",
verbose=True,
allow_delegation=True
)
# Create tasks for your agents
task1 = Task(
description="""Conduct a comprehensive analysis of the latest advancements in AI in 2024.
Identify key trends, breakthrough technologies, and potential industry impacts.""",
expected_output="Full analysis report in bullet points",
agent=researcher
)
task2 = Task(
description="""Using the insights provided, develop an engaging blog
post that highlights the most significant AI advancements.
Your post should be informative yet accessible, catering to a tech-savvy audience.
Make it sound cool, avoid complex words so it doesn't sound like AI.""",
expected_output="Full blog post of at least 4 paragraphs",
agent=writer
)
# Instantiate your crew with a sequential process
crew = Crew(
agents=[researcher, writer],
tasks=[task1, task2],
verbose=2, # You can set it to 1 or 2 to different logging levels
)
# Get your crew to work!
result = crew.kickoff()
print("######################")
print(result)
OpenAI cũng giới thiệu một tính năng tương tự trong ChatGPT bằng cách cho phép người dùng nhắn tin cho nhiều GPT trong một cuộc trò chuyện. GPT là một tính năng tác nhân tự trị trong ChatGPT có khả năng suy luận và sử dụng công cụ. Điều này cho phép người dùng có khả năng sử dụng GPT có tính cách, lời nhắc và công cụ khác nhau để trả lời các câu hỏi phức tạp.
Tôi đã tạo ra một cuộc trò chuyện đơn giản để chứng minh ý tưởng này. Đầu tiên tôi sử dụng GPT để viết, sau đó là DALL-E GPT chính thức và cuối cùng là GPT tùy chỉnh mà tôi đã viết. Mỗi GPT có lời nhắc hệ thống và công cụ khác nhau nhưng có thể được sử dụng để giải quyết các vấn đề khác nhau cùng nhau.
Kiến trúc phân tán cho tác nhân?
Việc tách biệt trách nhiệm của tác nhân cũng cho phép khả năng tạo ra một kiến trúc phức tạp hơn cho mạng tác nhân phân tán. Giao tiếp từ xa của các đại lý sẽ mang lại một số lợi ích thú vị:
- khả năng cho các tác nhân chạy trên các phần cứng và mạng khác nhau
- được viết bằng các ngôn ngữ hoặc khung khác nhau, không phụ thuộc vào chi tiết triển khai cơ bản
- mở rộng quy mô cho khối lượng công việc khác nhau
- phát sóng công việc trên một nhóm đại lý để phân phát công việc
- khả năng khám phá để tìm kiếm các tác nhân để thực hiện nhiệm vụ
Có thể có nhiều cách tiếp cận khác nhau để thực hiện điều này, nhưng có một phương pháp là sử dụng mô hình Actor phân tán. Mô hình Actor thường là một phương pháp truyền thông điệp đồng thời nhưng một số khung hỗ trợ giao tiếp từ xa.
Tác nhân có thể: đưa ra quyết định cục bộ, tạo thêm tác nhân, gửi tin nhắn và xác định cách phản hồi tin nhắn tiếp theo nhận được. Trong trường hợp này, một tác nhân sẽ là diễn một vai trò. Một số framework hỗ trợ cả tác nhân cục bộ và từ xa, được gọi là tính minh bạch của vị trí. Mạng cơ bản để truyền tin nhắn đã bị loại bỏ. Tôi đã thử nghiệm một dự án ban đầu thực hiện chính xác điều này vào năm 2023, để thử nghiệm hệ thống tự trị alexsniffin/go-auto-gpt .
Tuy nhiên, sự phức tạp tăng thêm của một hệ thống như vậy không phải lúc nào cũng hợp lý. Bản chất không xác định của cách thức hoạt động của các tác nhân khiến cho việc tạo ra loại hệ thống này trở nên đặc biệt khó khăn do có nhiều điểm tiềm ẩn gây ra lỗi. Việc thiết kế một tác nhân điều phối cục bộ đơn giản hơn để các đại biểu làm việc với một số lượng tác nhân giới hạn sẽ dễ khắc phục sự cố và bảo trì hơn nhiều. Cách tiếp cận này cũng sẽ đơn giản hóa việc tích hợp với các hệ thống khác, chẳng hạn như đường dẫn đàm thoại RAG (Thế hệ tăng cường truy xuất).
Nghiên cứu liên quan
Rất nhiều nội dung đã được xem xét cho đến nay trùng lặp với lĩnh vực nghiên cứu đã được thiết lập với việc lập kế hoạch và lập kế hoạch tự động. Đó là một nhánh của AI tập trung vào việc tạo ra các kế hoạch hoặc chiến lược để đạt được các mục tiêu cụ thể hoặc hoàn thành nhiệm vụ. Nó tối ưu hóa việc ra quyết định tự động và phân bổ nguồn lực, thích ứng linh hoạt để đảm bảo đạt được mục tiêu hiệu quả.
Kết luận
Tác nhân tự trị là một chủ đề rất thú vị trong việc nghiên cứu về AI.
Việc xây dựng các hệ thống này sẽ còn nhiều rào cản phía trước nhưng khi mà các LLM tiếp tục được cải thiện, thì khả năng xây dựng các hệ thống tự trị hữu ích hơn bằng cách sử dụng ngôn ngữ tự nhiên với các mẫu này cũng sẽ tăng lên! Cảm ơn vì đã đọc!