AI Agents – Phần 4 – Orchestration

Orchestration là quá trình giúp AI agent lựa chọn, kết hợp và thực thi các kỹ năng (skills) để xử lý các tác vụ phức tạp. Nếu chương trước nói về cách xây dựng skill, thì chương này trả lời câu hỏi: “Làm sao để agent sử dụng đúng skill, theo đúng thứ tự, để hoàn thành công việc?”

⚙️ 1. Skill Selection (Chọn kỹ năng phù hợp)

🧠 1.1 Generative Skill Selection

  • Foundation model (như GPT-4) được đưa mô tả các kỹ năng → chọn kỹ năng phù hợp với ngữ cảnh.
  • Ưu điểm: Dễ triển khai, không cần huấn luyện thêm.
  • Nhược điểm: Chậm (vì gọi thêm LLM), chi phí cao.
  • Có thể cải thiện bằng few-shot examples.

Ví dụ code (sử dụng LangChain):

@tool
def query_wolfram_alpha(expression: str) -> str: ...
@tool
def trigger_zapier_webhook(zap_id: str, payload: dict) -> str: ...
@tool
def send_slack_message(channel: str, message: str) -> str: ...

llm_with_tools = llm.bind_tools([...])
ai_msg = llm_with_tools.invoke([HumanMessage("Get stock price")])

🧭 1.2 Semantic Skill Selection

  • Tạo vector embedding từ mô tả kỹ năng → lưu vào FAISS vector DB.
  • Khi cần dùng, cũng embedding câu hỏi → tìm kỹ năng gần nhất.
  • Ưu điểm: Nhanh hơn, tốt với tập kỹ năng lớn, scalable.
  • Gợi ý dùng: OpenAI ada, Titan, Cohere, BERT…

Ví dụ chi tiết:

  • Tạo FAISS index từ mô tả kỹ năng
  • Embed truy vấn → tìm skill phù hợp
  • Gọi LLM để sinh tham số đầu vào
  • Gọi hàm .invoke() để chạy skill

🧠 FAISS là gì và FAISS dùng để làm gì?

FAISS (Facebook AI Similarity Search) là một thư viện mã nguồn mở được phát triển bởi Facebook AI Research (FAIR), dùng để tìm kiếm gần đúng (Approximate Nearest Neighbor – ANN) trong không gian vector hiệu quả, đặc biệt khi bạn làm việc với dữ liệu có số lượng lớn và chiều cao (high-dimensional vectors).

FAISS thường được dùng trong các ứng dụng như:

  • 🔎 Tìm kiếm kỹ năng phù hợp trong AI Agent thông qua Semantic Skill Selection
  • ✅ Tìm kiếm văn bản gần giống (semantic search)
  • 🎯 Nhận diện ảnh hoặc khuôn mặt (face/image similarity)
  • 🤖 Tăng tốc hệ thống recommendation bằng embedding

🗂️ 1.3 Hierarchical Skill Selection

  • Với tập kỹ năng lớn và nhiều kỹ năng tương đồng → nhóm kỹ năng thành nhóm (group).
  • Dùng semantic search 2 lần:
    1. Tìm group
    2. Tìm skill trong group đó
  • Độ chính xác cao hơn, nhưng chậm hơn và phức tạp hơn.

Code pattern:

  • Embed mô tả group → FAISS group index
  • Embed kỹ năng từng group → FAISS tool index
  • Tìm group → tìm skill → gọi .invoke()

🧪 1.4 Machine Learned Skill Selection

  • Dùng ML model được huấn luyện trên task-skill pairs để chọn kỹ năng.
  • Có thể fine-tune mô hình nhỏ (khác với LLM lớn), giảm chi phí và thời gian.
  • Thách thức: cần dataset chất lượng, bảo trì model riêng.

📌 Ghi chú:

  • Với các use case mới → bắt đầu từ Semantic Selection.
  • Sau khi ổn định → cân nhắc hierarchy hoặc ML nếu cần.

🚀 2. Skill Execution (Thực thi kỹ năng)

  • Sau khi chọn skill, cần sinh tham số đầu vào từ prompt.
  • Agent có thể inject context như thời gian hiện tại, vị trí…
  • Phải kiểm tra kiểu dữ liệu input bằng parser đơn giản.
  • Các skill có thể thực thi local hoặc thông qua API.
  • Cần timeout và retry hợp lý tùy latency use case.

🧬 3. Skill Topologies (Kiến trúc thực thi kỹ năng)

🔹 3.1 Single Skill Execution

  • Một kỹ năng duy nhất → tham số hoá → thực thi → kết quả.
  • Đơn giản, hiệu quả cho các tác vụ rõ ràng.

🔸 3.2 Parallel Skill Execution

  • Dùng khi cần truy vấn nhiều nguồn (ví dụ tra cứu hồ sơ bệnh án từ nhiều DB).
  • Dùng semantic skill selection lấy top N kỹ năng → chọn subset phù hợp → thực thi song song.

🔗 3.3 Chains

  • Các kỹ năng được thực hiện tuần tự → kết quả skill A là input skill B.
  • Đề xuất giới hạn độ dài để tránh lỗi cộng dồn.

🌲 3.4 Trees

  • Các bước có thể rẽ nhánh → xử lý song song hoặc lựa chọn giữa nhiều bước.
  • Có thể quay lại nhánh khác nếu nhánh hiện tại không đạt kết quả.
  • Agent cần khả năng lưu trạng thái và quyết định nhánh.

🔁 3.5 Graphs

  • Mở rộng từ cây → các kỹ năng có thể hợp nhất (consolidate) kết quả.
  • Dùng khi cần reasoning phức tạp, kết hợp dữ liệu từ nhiều kỹ năng.

📌 Gợi ý chọn topology:

TopologyKhi nào dùng
SingleTác vụ đơn lẻ
ParallelTruy vấn nhiều nguồn
ChainQuy trình có thứ tự
TreeCó nhánh phụ, lựa chọn
GraphPhân tích phức tạp, nhiều nguồn dữ liệu

🧠 4. Planning (Lập kế hoạch)

🔁 4.1 Iterative Planning

  • Lựa chọn từng bước → thực thi ngay → chọn bước tiếp theo
  • Đơn giản, thấp độ trễ, phù hợp các task nhỏ

🚫 4.2 Zero-Shot Planning

  • Agent tự tạo kế hoạch không cần ví dụ → phù hợp tác vụ chưa từng gặp

✍️ 4.3 In-Context Learning w/ Hand-Crafted Examples

  • Thêm kế hoạch mẫu trong prompt → giúp model học cách lên kế hoạch

🔄 4.4 Plan Adaptation (ReAct & PlanReAct)

  • Agent có khả năng điều chỉnh kế hoạch nếu đầu ra không như kỳ vọng
  • ReAct: Luân phiên Reason → Act
  • PlanReAct: Thêm bước “Think” (Chain-of-Thought)

📌 Best practices khi chọn Planning Strategy:

  • Đánh giá độ trễ vs độ chính xác
  • Số lượng action trung bình → chọn topology phù hợp
  • Độ biến động kế hoạch → cân nhắc Plan Adaptation
  • Bắt đầu từ đơn giản → mở rộng theo nhu cầu

📍 Tóm tắt nhanh

Thành phầnVai trò chính
Skill SelectionChọn kỹ năng phù hợp với tác vụ
Skill ExecutionSinh tham số và thực thi kỹ năng
TopologyCách tổ chức kỹ năng: đơn, chuỗi, song song, cây, đồ thị
PlanningChiến lược lập kế hoạch: iterative, zero-shot, hand-crafted, ReAct

✍️ Gợi ý ứng dụng thực tế:

  • Khi xây dựng hệ thống agent tự động cho customer support, có thể áp dụng:
    • Semantic Skill Selection
    • Tree topology (chia theo dạng câu hỏi: billing, tech, account)
    • PlanReAct để xử lý các luồng hội thoại kéo dài và thay đổi liên tục

📝 Nguồn tham khảo:

Để lại một bình luận