Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 5 — Handoff: điều phối nhiều agent chuyên biệt

Đã đọc 0/9 mục · còn khoảng 4 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Một agent "biết tất cả" thường kém: prompt phình to, tool quá nhiều, model rối. Giải pháp là handoff — một agent điều phối (triage) chuyển quyền xử lý cho agent chuyên biệt. OpenAI Agents SDK hỗ trợ handoff như một khái niệm hạng nhất.

Ý tưởng

Handoff về bản chất là một tool đặc biệt: khi model "gọi" handoff, quyền điều khiển chuyển hẳn sang agent đích, và agent đích tiếp tục hội thoại. Khác với gọi tool thường (nhận kết quả rồi tiếp tục), handoff thay người lái.

Ví dụ: triage → hoàn tiền / kỹ thuật

from agents import Agent, Runner

agent_hoan_tien = Agent(
    name="Chuyên viên hoàn tiền",
    instructions="Xử lý yêu cầu hoàn tiền. Luôn xác minh mã đơn trước.",
    tools=[tra_cuu_don_hang, tao_yeu_cau_hoan_tien],
)

agent_ky_thuat = Agent(
    name="Chuyên viên kỹ thuật",
    instructions="Hỗ trợ lỗi kỹ thuật sản phẩm. Hỏi rõ triệu chứng.",
    tools=[tra_cuu_don_hang, tao_ticket],
)

triage = Agent(
    name="Tiếp nhận",
    instructions=(
        "Phân loại yêu cầu khách. Nếu về tiền/hoàn tiền -> chuyển cho hoàn tiền. "
        "Nếu lỗi kỹ thuật -> chuyển cho kỹ thuật. Không tự xử lý."
    ),
    handoffs=[agent_hoan_tien, agent_ky_thuat],
)

result = Runner.run_sync(triage, "Tôi muốn hoàn tiền đơn ORD-1234")
print(result.final_output)  # do agent_hoan_tien trả lời

Các bước thiết kế hệ handoff

  • Vẽ cây phân loại: mỗi nhánh là một agent chuyên biệt với phạm vi hẹp, rõ.
  • Agent triage chỉ phân loại, không ôm việc — instruction phải cấm nó tự xử lý.
  • Mỗi agent con có tool riêng đúng phạm vi — hoàn tiền không cần tool kỹ thuật.
  • Đặt tên agent con mô tả rõ vai trò — model dùng tên/mô tả để quyết định chuyển.
  • Quyết định giữ hay reset ngữ cảnh khi handoff — thường giữ lịch sử để agent con hiểu bối cảnh.
  • Thêm handoff "quay lại triage" nếu agent con phát hiện phân loại sai.

Khi nào KHÔNG cần handoff

Nếu chỉ 2-3 tool và một luồng, một agent là đủ. Handoff thêm độ phức tạp; chỉ dùng khi (a) prompt một agent quá tải, (b) các miền nghiệp vụ khác nhau rõ rệt, hoặc (c) muốn giới hạn tool theo vai trò vì lý do an toàn.

Handoff khác gọi tool thường thế nào

Dễ nhầm handoff với việc gọi tool. Khác biệt cốt lõi: khi gọi tool thường, agent hiện tại nhận kết quả rồi tiếp tục lái; khi handoff, agent hiện tại giao hẳn quyền lái cho agent đích, và agent đích là bên trả lời người dùng từ đó. Ví dụ: triage gọi tool phan_loai thì triage vẫn là người trả lời; nhưng triage handoff cho agent_hoan_tien thì chính agent hoàn tiền tiếp quản hội thoại. Hiểu điều này giúp bạn quyết định đúng: nếu chỉ cần một mẩu dữ liệu để tự trả lời, dùng tool; nếu cần một chuyên gia khác tiếp quản cả luồng, dùng handoff.

Giữ hay reset ngữ cảnh khi handoff

Mặc định, agent đích thường được thấy lịch sử hội thoại để hiểu bối cảnh (khách đã nói gì, đã cung cấp mã đơn chưa). Nhưng trong vài trường hợp nhạy cảm, bạn có thể lọc bớt để agent đích không thấy thông tin không liên quan đến vai trò của nó (nguyên tắc tối thiểu quyền). Hãy quyết định có chủ đích thay vì để mặc định trôi.

Khung tư duy: một agent hay nhiều agent?

  • Số miền nghiệp vụ khác biệt > 1? → cân nhắc tách.
  • Danh sách tool > ~7 và chia được theo vai trò? → cân nhắc tách.
  • Cần phân quyền tool (agent A không được đụng tool nguy hiểm)? → nên tách.
  • Ngược lại, càng ít agent càng dễ debug — mặc định ưu tiên đơn giản.

Sai lầm thường gặp

  • Triage tự xử lý thay vì chuyển → mất mục đích tách; instruction phải cấm rõ.
  • Agent con nhận đủ mọi tool → hết ý nghĩa phân quyền, model lại rối.
  • Không có đường quay lại → phân loại sai là kẹt luôn ở nhánh sai.
  • Handoff lồng quá sâu → khó truy vết; giữ cây nông (1-2 tầng).
  • Tên/mô tả agent con mơ hồ → triage chuyển sai địa chỉ.
  • Lạm dụng handoff cho việc đơn giản → tăng chi phí và độ trễ vô ích.
Bài 6: guardrails — chặn input độc và output sai trước khi chúng gây hại.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi