Chuyển tới nội dung chính

Phân công & Làm việc song song

Hermes có thể sinh ra các đặc vụ con bị cô lập để thực hiện các nhiệm vụ song song. Mỗi tác nhân phụ có cuộc trò chuyện, phiên cuối và bộ công cụ riêng. Chỉ bản tóm tắt cuối cùng mới quay lại - lệnh gọi công cụ trung gian không bao giờ vào cửa sổ ngữ cảnh của bạn.

Để biết thông tin tham khảo đầy đủ về tính năng, hãy xem Ủy quyền đại lý phụ.


Khi nào nên ủy quyền

Ứng cử viên sáng giá cho đoàn:

  • Nhiệm vụ nặng về lý luận (gỡ lỗi, xem xét mã, tổng hợp nghiên cứu)
  • Các nhiệm vụ sẽ làm tràn ngập ngữ cảnh của bạn với dữ liệu trung gian
  • Luồng công việc độc lập song song (nghiên cứu A và B đồng thời)
  • Nhiệm vụ có bối cảnh mới mà bạn muốn nhân viên hỗ trợ tiếp cận mà không thiên vị

Sử dụng cái gì khác:

  • Gọi một công cụ → chỉ cần sử dụng công cụ trực tiếp
  • Làm việc cơ học nhiều bước với tính logic giữa các bước → execute_code
  • Nhiệm vụ cần sự tương tác của người dùng → tác nhân phụ không thể sử dụng clarify
  • Chỉnh sửa tập tin nhanh → thực hiện trực tiếp

Mẫu: Nghiên cứu song song

Nghiên cứu đồng thời ba chủ đề và nhận lại các bản tóm tắt có cấu trúc:

Research these three topics in parallel:
1. Current state of WebAssembly outside the browser
2. RISC-V server chip adoption in 2025
3. Practical quantum computing applications

Focus on recent developments and key players.

Đằng sau hậu trường, Hermes sử dụng:

delegate_task(tasks=[
{
"goal": "Research WebAssembly outside the browser in 2025",
"context": "Focus on: runtimes (Wasmtime, Wasmer), cloud/edge use cases, WASI progress",
"toolsets": ["web"]
},
{
"goal": "Research RISC-V server chip adoption",
"context": "Focus on: server chips shipping, cloud providers adopting, software ecosystem",
"toolsets": ["web"]
},
{
"goal": "Research practical quantum computing applications",
"context": "Focus on: error correction breakthroughs, real-world use cases, key companies",
"toolsets": ["web"]
}
])

Cả ba đều chạy đồng thời. Mỗi tác nhân phụ tìm kiếm trên web một cách độc lập và trả về một bản tóm tắt. Sau đó, đại lý gốc sẽ tổng hợp chúng thành một bản tóm tắt mạch lạc.


Mẫu: Đánh giá mã

Ủy quyền đánh giá bảo mật cho tác nhân phụ có bối cảnh mới tiếp cận mã mà không có định kiến:

Review the authentication module at src/auth/ for security issues.
Check for SQL injection, JWT validation problems, password handling,
and session management. Fix anything you find and run the tests.

Khóa là trường bối cảnh — nó phải bao gồm mọi thứ mà tác nhân phụ cần:

delegate_task(
goal="Review src/auth/ for security issues and fix any found",
context="""Project at /home/user/webapp. Python 3.11, Flask, PyJWT, bcrypt.
Auth files: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py
Test command: pytest tests/auth/ -v
Focus on: SQL injection, JWT validation, password hashing, session management.
Fix issues found and verify tests pass.""",
toolsets=["terminal", "file"]
)
The Context Problem

Các đại lý cấp dưới hoàn toàn không biết gì về cuộc trò chuyện của bạn. Họ bắt đầu hoàn toàn mới mẻ. Nếu bạn ủy quyền "sửa lỗi mà chúng ta đang thảo luận", tác nhân phụ sẽ không biết bạn muốn nói đến lỗi gì. Luôn truyền rõ ràng đường dẫn tệp, thông báo lỗi, cấu trúc dự án và các ràng buộc.


Mẫu: So sánh các lựa chọn thay thế

Đánh giá song song nhiều cách tiếp cận cho cùng một vấn đề, sau đó chọn cách tốt nhất:

I need to add full-text search to our Django app. Evaluate three approaches
in parallel:
1. PostgreSQL tsvector (built-in)
2. Elasticsearch via django-elasticsearch-dsl
3. Meilisearch via meilisearch-python

For each: setup complexity, query capabilities, resource requirements,
and maintenance overhead. Compare them and recommend one.

Mỗi đại lý phụ nghiên cứu một lựa chọn một cách độc lập. Bởi vì chúng được cách ly nên không có sự lây nhiễm chéo - mỗi đánh giá đều dựa trên giá trị riêng của nó. Tác nhân mẹ nhận được cả ba bản tóm tắt và so sánh.


Mẫu: Tái cấu trúc nhiều tệp

Chia một nhiệm vụ tái cấu trúc lớn thành các tác nhân phụ song song, mỗi tác vụ xử lý một phần khác nhau của cơ sở mã:

delegate_task(tasks=[
{
"goal": "Refactor all API endpoint handlers to use the new response format",
"context": """Project at /home/user/api-server.
Files: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py
Old format: return {"data": result, "status": "ok"}
New format: return APIResponse(data=result, status=200).to_dict()
Import: from src.responses import APIResponse
Run tests after: pytest tests/handlers/ -v""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Update all client SDK methods to handle the new response format",
"context": """Project at /home/user/api-server.
Files: sdk/python/client.py, sdk/python/models.py
Old parsing: result = response.json()["data"]
New parsing: result = response.json()["data"] (same key, but add status code checking)
Also update sdk/python/tests/test_client.py""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Update API documentation to reflect the new response format",
"context": """Project at /home/user/api-server.
Docs at: docs/api/. Format: Markdown with code examples.
Update all response examples from old format to new format.
Add a 'Response Format' section to docs/api/overview.md explaining the schema.""",
"toolsets": ["terminal", "file"]
}
])
mẹo

Mỗi đại lý con có phiên cuối cùng của riêng mình. Họ có thể làm việc trên cùng một thư mục dự án mà không cần dẫm lên nhau — miễn là họ đang chỉnh sửa các tệp khác nhau. Nếu hai tác nhân phụ có thể chạm vào cùng một tệp, hãy tự xử lý tệp đó sau khi công việc song song hoàn tất.


Mẫu: Tập hợp rồi phân tích

Sử dụng execute_code để thu thập dữ liệu cơ học, sau đó ủy quyền phân tích nặng về lý luận:

# Step 1: Mechanical gathering (execute_code is better here — no reasoning needed)
execute_code("""
from hermes_tools import web_search, web_extract

results = []
for query in ["AI funding Q1 2026", "AI startup acquisitions 2026", "AI IPOs 2026"]:
r = web_search(query, limit=5)
for item in r["data"]["web"]:
results.append({"title": item["title"], "url": item["url"], "desc": item["description"]})

# Extract full content from top 5 most relevant
urls = [r["url"] for r in results[:5]]
content = web_extract(urls)

# Save for the analysis step
import json
with open("/tmp/ai-funding-data.json", "w") as f:
json.dump({"search_results": results, "extracted": content["results"]}, f)
print(f"Collected {len(results)} results, extracted {len(content['results'])} pages")
""")

# Step 2: Reasoning-heavy analysis (delegation is better here)
delegate_task(
goal="Analyze AI funding data and write a market report",
context="""Raw data at /tmp/ai-funding-data.json contains search results and
extracted web pages about AI funding, acquisitions, and IPOs in Q1 2026.
Write a structured market report: key deals, trends, notable players,
and outlook. Focus on deals over $100M.""",
toolsets=["terminal", "file"]
)

Đây thường là mẫu hiệu quả nhất: execute_code xử lý hơn 10 lệnh gọi công cụ tuần tự với chi phí thấp, sau đó tác nhân phụ sẽ thực hiện nhiệm vụ lập luận tốn kém duy nhất với bối cảnh rõ ràng.


Lựa chọn bộ công cụ

Chọn bộ công cụ dựa trên những gì đại lý phụ cần:

Loại nhiệm vụBộ công cụTại sao
Nghiên cứu web["web"]chỉ web_search + web_extract
Công việc mã["thiết bị đầu cuối", "tập tin"]Truy cập Shell + thao tác tập tin
Toàn ngăn xếp["thiết bị đầu cuối", "tập tin", "web"]Mọi thứ ngoại trừ nhắn tin
Phân tích chỉ đọc["tập tin"]Chỉ có thể đọc tập tin, không có shell

Việc hạn chế các bộ công cụ giúp tác nhân phụ tập trung và ngăn ngừa các tác dụng phụ ngẫu nhiên (như tác nhân phụ nghiên cứu chạy các lệnh shell).


Hạn chế

  • Tối đa 3 nhiệm vụ song song — các đợt được giới hạn ở 3 tác nhân phụ đồng thời
  • Không lồng nhau — tác nhân phụ không thể gọi delegate_task, clarify, memory, send_message hoặc execute_code
  • Thiết bị đầu cuối riêng biệt — mỗi tác nhân phụ có phiên thiết bị đầu cuối riêng với thư mục và trạng thái làm việc riêng
  • Không có lịch sử hội thoại — các đại lý phụ chỉ nhìn thấy những gì bạn đưa vào mục tiêubối cảnh
  • 50 lần lặp mặc định — đặt max_iterations thấp hơn cho các tác vụ đơn giản để tiết kiệm chi phí

Mẹo

Hãy cụ thể hóa mục tiêu. "Sửa lỗi" quá mơ hồ. "Sửa lỗi TypeError trong dòng api/handlers.py 47 trong đó process_request() nhận Không có từ Parse_body()" cung cấp đủ cho tác nhân phụ để hoạt động.

Bao gồm các đường dẫn tệp. Các tác nhân phụ không biết cấu trúc dự án của bạn. Luôn bao gồm các đường dẫn tuyệt đối đến các tệp có liên quan, thư mục gốc của dự án và lệnh kiểm tra.

Sử dụng tính năng ủy quyền để tách biệt ngữ cảnh. Đôi khi bạn muốn có một góc nhìn mới. Việc ủy ​​quyền buộc bạn phải trình bày rõ ràng vấn đề và người đại diện phụ sẽ tiếp cận vấn đề đó mà không cần những giả định đã hình thành trong cuộc trò chuyện của bạn.

Kiểm tra kết quả. Tóm tắt phần phụ chỉ là — tóm tắt. Nếu tác nhân phụ cho biết "đã sửa lỗi và vượt qua thử nghiệm", hãy xác minh bằng cách tự chạy thử nghiệm hoặc đọc phần khác biệt.


Để có tài liệu tham khảo ủy quyền đầy đủ — tất cả các tham số, tích hợp ACP và cấu hình nâng cao — hãy xem Ủy quyền đại lý phụ.