LangChain: Blog
85

Thủ thuật

LangChain hướng dẫn cách quản lý ngữ cảnh trong framework đa tác nhân DeepAgents

(giờ Việt Nam)

Tóm tắt AI

LangChain chia sẻ cách các chế độ ngữ cảnh (context modes) trong DeepAgents giúp tối ưu hóa hiệu suất, chi phí và sự tập trung cho các tác nhân con khi phối hợp với tác nhân giám sát.

Bản dịch AI

Organizing Context in a Multi-Agent Harness

Tóm tắt (TL;DR)

Hầu hết các harness đều hỗ trợ tính năng subagent (tác nhân phụ) để tạo ra các tác vụ mới từ một supervisor agent (tác nhân giám sát). Subagent cho phép thực hiện suy luận song song và cô lập ngữ cảnh, giúp supervisor agent ủy quyền công việc mà không làm đầy cửa sổ ngữ cảnh (context window).

Supervisor agent xác định tác vụ, và subagent thường hoàn thành tác vụ đó trong một cửa sổ ngữ cảnh mới. Điều này có thể gây lãng phí: subagent có thể phải thực hiện lại các thao tác thu thập ngữ cảnh, như đọc tệp, vốn đã được supervisor thực hiện trước đó.

Đối với các trường hợp subagent có thể tận dụng ngữ cảnh của supervisor agent, chúng tôi đã xây dựng các forked subagent (tác nhân phụ được phân nhánh). Forked subagent kế thừa toàn bộ cuộc hội thoại của supervisor thay vì bắt đầu lại từ đầu. Việc phân nhánh (forking) có thể nhanh hơn và tiết kiệm chi phí hơn so với các subagent cô lập, vì việc tái sử dụng cuộc hội thoại của supervisor giúp tận dụng tính năng prompt caching và giảm bớt các công việc lặp lại.

Các harness với subagent

Ủy quyền tác vụ cho subagent là một cách hiệu quả để một agent tự quản lý ngữ cảnh của chính nó. Subagent cung cấp khả năng cô lập ngữ cảnh, nhờ đó các chi tiết của từng tác vụ riêng lẻ có thể được ẩn khỏi cửa sổ ngữ cảnh của supervisor agent. Nếu bạn muốn tìm hiểu thêm, chúng tôi đã viết rất chi tiết về các kiến trúc đa tác nhân (multi-agent) khác nhau!

Supervisor là một trong những mô hình có khả năng khái quát hóa cao nhất và hầu hết các coding harness đều đã áp dụng nó. Ở đây, một supervisor duy trì một kế hoạch và ủy quyền công việc cho các subagent chuyên biệt. Ví dụ:

Supervisor agent thường chỉ nhận kết quả của tác vụ từ các subagent; các suy luận trung gian của chúng sẽ bị ẩn khỏi cửa sổ ngữ cảnh của supervisor. Tuy nhiên, ngữ cảnh nào mà subagent nên nhận từ supervisor còn phụ thuộc vào mục đích sử dụng của subagent đó.

Các chế độ ngữ cảnh cho subagent

Để giúp xác định điều này, chúng tôi đã giới thiệu các context mode (chế độ ngữ cảnh) trong phiên bản mới nhất của deepagents. Context mode quy định ngữ cảnh mà subagent có thể nhận từ supervisor. Các giá trị được hỗ trợ là "isolated" (cô lập) và "fork" (phân nhánh).

Isolated subagent (Subagent cô lập)

Đây là hành vi mặc định và đã có từ trước đối với các subagent trong Deep Agents. Subagent được tạo ra với một cửa sổ ngữ cảnh mới, chỉ nhận mô tả tác vụ do supervisor chỉ định.

Forked subagent (Subagent phân nhánh)

Khi đặt "mode": "fork", trạng thái hiện tại của supervisor sẽ được truyền sang subagent thay vì bắt đầu với trạng thái trống. Đây thực chất là một sự tiếp nối được phân nhánh của luồng hiện tại—với một chỉ thị bổ sung do supervisor viết—và cuối cùng được giải nén thành một kết quả công cụ duy nhất mà supervisor có thể đọc được.

Cụ thể:

Mặc dù forked subagent được cung cấp nhiều ngữ cảnh hơn so với isolated subagent, nhưng prompt caching vẫn được tôn trọng theo thiết kế. Trong các trường hợp subagent cần ngữ cảnh chi tiết để thực hiện đúng tác vụ, việc phân nhánh có thể giúp tiết kiệm các lệnh gọi công cụ và thao tác thu thập ngữ cảnh lặp lại.

Lựa chọn chế độ ngữ cảnh

Việc lựa chọn chế độ ngữ cảnh phù hợp phụ thuộc vào mối quan hệ của subagent với công việc. Một cách hữu ích để suy nghĩ về chúng là thông qua hai mô hình phổ biến: worker (người thực thi) tiếp tục công việc của supervisor, và verifier (người kiểm chứng) đánh giá công việc đó một cách độc lập.

Worker Agent: tiếp tục công việc đang dang dở

Một worker thực hiện một phần công việc sau khi supervisor đã thu thập ngữ cảnh hoặc đưa ra quyết định. Ví dụ, supervisor có thể kiểm tra một lỗi, truy vết nó đến một hàm cụ thể, sau đó ủy quyền việc triển khai và kiểm thử bản sửa lỗi.

Việc khởi chạy worker ở chế độ cô lập sẽ buộc nó phải tìm lại các bằng chứng từ đầu. Với chế độ fork, nó nhận được lịch sử của supervisor và có thể tiếp tục công việc từ nơi cuộc điều tra dừng lại. Supervisor gọi chế độ này khi cần thực hiện một công việc nào đó, nhưng không nhất thiết quan tâm đến các bước trung gian để đi đến kết luận.

Supervisor có thể gọi nó với một tác vụ như:

Verifier agent: đánh giá công việc một cách độc lập

Một verifier xem xét công việc của một agent khác dựa trên một số tiêu chí—ví dụ: kiểm tra tính đúng đắn của một bản diff, tính tương thích ngược và độ bao phủ của kiểm thử.

Trong trường hợp này, việc kế thừa suy luận của supervisor có thể phản tác dụng. Verifier nên tự đánh giá công việc thay vì bị ảnh hưởng bởi chẩn đoán hoặc kỳ vọng của supervisor. Chế độ isolated cung cấp cho nó tác vụ và các tài liệu đánh giá liên quan mà không bao gồm cuộc hội thoại trước đó.

Supervisor có thể gọi nó với:

Chúng tôi đã từng viết về RubricMiddleware, một ví dụ khác về việc sử dụng verifier độc lập!

Chuyên biệt hóa subagent

Bên cạnh các công cụ (tools) và middleware, context mode là một trong những đòn bẩy bạn có thể sử dụng để chuyên biệt hóa subagent cho một tác vụ. Dưới đây là một vài subagent mà chúng tôi coi là chuyên biệt và mối quan hệ của chúng với các context mode:

Researcher agent: điều tra một câu hỏi

Một researcher điều tra một câu hỏi và trả về câu trả lời tóm tắt cho supervisor. Ví dụ, supervisor có thể ủy quyền các câu hỏi riêng biệt về một thư viện lạ, một đối thủ cạnh tranh hoặc lịch sử của một quyết định kỹ thuật.

Khi câu hỏi có thể đứng độc lập, researcher không cần cuộc hội thoại của supervisor. Sử dụng chế độ isolated giúp giữ ngữ cảnh của nó tập trung vào câu hỏi hiện tại. Điều này đặc biệt hữu ích khi nhiều researcher chạy song song: việc phân nhánh cho từng cái sẽ làm trùng lặp lịch sử của supervisor ngay cả khi mỗi researcher chỉ cần câu hỏi được giao.

Supervisor có thể gọi nó với:

Chúng ta có thể cung cấp cho subagent các khả năng riêng (như công cụ search_engine) để giúp nó hoàn thành tác vụ.

Memory agent: lưu giữ thông tin từ cuộc hội thoại

Một memory agent xác định thông tin từ một tương tác cần được sử dụng sau này—ví dụ: tùy chọn của người dùng, quyết định về kiến trúc hoặc một ràng buộc được thiết lập trong cuộc hội thoại.

Ở đây, cuộc hội thoại chính là tài liệu mà agent cần phân tích. Với chế độ fork, memory agent nhận được toàn bộ tương tác và có thể quyết định điều gì đáng để lưu giữ mà không cần supervisor phải nhắc lại trong tác vụ.

LangChainMulti-agentDeepAgentsAI FrameworkLập trình AI
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ LangChain: Blog. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.