Hướng dẫn kết hợp nhiều nguồn context trong một truy vấn cho AI

Đỗ Minh Đức Đỗ Minh Đức
Chia sẻ bài viết

Trong các hệ thống AI hiện đại, việc chỉ dựa vào một nguồn dữ liệu duy nhất thường không đủ. Người dùng có thể đặt ra những truy vấn cần đồng thời tham chiếu từ nhiều kho tri thức khác nhau. Lúc này, một Router thông minh sẽ đóng vai trò người điều phối giúp AI tự chọn nguồn context phù hợp để đưa ra câu trả lời chính xác, thay vì trộn lẫn mọi dữ liệu.

Bài toán thực tế khi xử lý multi-context query

Trong hệ thống AI production, dữ liệu của doanh nghiệp hiếm khi nằm trong một chỗ. Bạn có thể có: 

  • CRM để lưu khách hàng.
  • CDP để lưu lịch sử hành vi.
  • Product DB để quản lý sản phẩm.
  • Knowledge base (Notion, Confluence, Google Drive). 
  • Vector DB chứa tài liệu đã embedding.

Nếu user đặt câu hỏi: “Cho tôi báo giá sản phẩm X, và kiểm tra xem tài khoản của tôi có ưu đãi không?” → ta cần 2 nguồn context khác nhau: Product DB (lấy giá) + CRM/CDP (lấy thông tin ưu đãi). Nếu không có Router, bạn chỉ biết ném hết mọi context vào LLM → token bloat, tốc độ chậm, đôi khi model nhiễu và trả lời sai. 

Kiến trúc Router – vai trò Dispatcher trong pipeline

Router đóng vai trò dispatcher trong pipeline. Luồng cơ bản sẽ gồm 6 bước sau:

1. Nhận input query: Người dùng gõ câu hỏi → API backend nhận → gửi sang Router.
2. Phân tích intent: Gọi NLU/LLM classifier. Ví dụ: Query = “Báo giá sản phẩm A cho 100 users” → intent: request_quote, entity: product=A, quantity=100.
3. Định tuyến nguồn tri thức

  • Rule-based: YAML/JSON config map intent → nguồn dữ liệu.
  • AI-based: LLM chọn nguồn dựa trên mô tả schema (vd: OpenAI function calling). 

4. Query nguồn dữ liệu

  • Nếu CRM → gọi REST API/GraphQL. 
  • Nếu vector DB → chạy similarity search.
  • Nếu product DB → query SQL.

5. Hợp nhất context

  • Normalize dữ liệu về chung 1 JSON.
  • Áp dụng strategy (merge priority, weighting, top-k chunk).

6. Build prompt

  • Chèn context vào template prompt.
  • Pass sang LLM để sinh câu trả lời.

Triển khai Router theo hướng Rule-based (YAML/JSON config)

Một file cấu hình mẫu có thể như sau:

routes:
  - intent: request_quote
    sources:
      - product_db
      - crm
  - intent: check_feature
    sources:
      - knowledge_base
  - intent: customer_profile
    sources:
      - crm
      - cdp

Router chỉ cần load config này → map intent sang list sources → query tương ứng.
Ưu điểm: dễ kiểm soát, debug. Nhược điểm: thiếu linh hoạt khi intent mơ hồ.

Triển khai Router theo hướng AI-based (function calling/tool selection)

Bạn có thể mô tả danh sách nguồn tri thức như một set functions:

[
  {
    "name": "search_product_db",
    "description": "Truy vấn thông tin sản phẩm theo tên hoặc ID",
    "parameters": { "product_name": "string" }
  },
  {
    "name": "get_customer_profile",
    "description": "Lấy dữ liệu hồ sơ khách hàng từ CRM",
    "parameters": { "customer_email": "string" }
  }
]

Sau đó để LLM quyết định gọi function nào → Router parse function_call → trigger nguồn dữ liệu.

Ưu điểm: linh hoạt, dễ mở rộng thêm source. Nhược điểm: cần kiểm soát lỗi khi LLM gọi sai.

Chiến lược hợp nhất context (Context Merging)

Khi query nhiều nguồn, vấn đề là hợp nhất dữ liệu. Một số pattern:

  • Concat raw text: đơn giản nối tất cả context lại → dễ token overload.
  • Structured JSON merge: normalize về JSON schema, sau đó render prompt.
  • Weighted ranking: nếu query từ vector DB nhiều chunk, có thể dùng score để chọn top-k.
  • Hierarchical merge: Router xác định thứ tự ưu tiên, ví dụ: CRM > DB > KB.

Ví dụ payload hợp nhất:

{
  "product_info": {
    "name": "Product A",
    "price": 1000
  },
  "customer_profile": {
    "email": "user@example.com",
    "discount": "10%"
  }
}

Xử lý bất đồng bộ (Async Handling)

Một số nguồn context sẽ trả lời chậm (vd: CRM API, search trên KB). Router cần chạy async/fan-out:

  • Trigger song song nhiều nguồn.
  • Chờ promise.all (JS) hoặc asyncio.gather (Python).
  • Timeout fallback nếu source nào đó chết.

Điều này đảm bảo response time của AI không bị treo vì 1 API chậm.

Công cụ cần có cho dev triển khai

  • LangChain RouterChain: có sẵn để routing queries.
  • LlamaIndex Multi-Retriever: hỗ trợ nhiều retriever song song.
  • Redis/ElasticSearch: làm fast lookup.
  • n8n: orchestrate API calls khi Router cần gọi nhiều service.
  • Grafana/Prometheus: log & monitor latency từng source để tối ưu.

Kết luận

Việc kết hợp nhiều nguồn context trong một truy vấn không chỉ giúp AI trả lời chính xác hơn mà còn phản ánh đúng ngữ cảnh kinh doanh. Xây dựng Router là bước quan trọng để hệ thống AI không tràn trong dữ liệu, mà thực sự biết tự quyết định tìm kiếm ở nguồn tri thức nào. Với cách tiếp cận module hóa và có thể mở rộng, developer hoàn toàn có thể triển khai Router thông minh để tối ưu pipeline, giảm chi phí và tăng độ chính xác trong mọi tương tác.
 

Đỗ Minh Đức
Tác giả
Đỗ Minh Đức
Giám đốc sản phẩm BizChat AI

Với gần 20 năm kinh nghiệm trong ngành công nghệ, Đỗ Minh Đức hiện là Giám đốc Sản phẩm Bizfly Martech tại VCCorp. Anh được biết đến là một trong bốn người đặt nền móng cho BizChatAI, giải pháp ứng dụng trí tuệ nhân tạo để chăm sóc khách hàng tự động đa kênh.

Anh tập trung phát triển BizChatAI như một "trợ lý ảo" cho doanh nghiệp, giúp tự động hóa việc tương tác và CSKH. Công nghệ này đang thay đổi mạnh mẽ cách doanh nghiệp tiếp cận khách hàng, từ việc gửi tin nhắn, quà tri ân tự động đến ứng dụng hiệu quả cho các chuỗi bán lẻ và nhà hàng... Qua các bài viết của mình, anh chia sẻ sâu hơn về những lợi ích và cách thức hoạt động của chatbot trong kinh doanh.

Bài viết nổi bật

Mời bạn trải nghiệm AI Chat Agent - Trợ lý ảo tư vấn khách hàng của Bizfly

Trong thời đại mà khách hàng mong muốn được phản hồi ngay lập tức, việc để họ phải chờ vài phút cũng có thể khiến doanh nghiệp đánh mất cơ hội. Đó là lý do Bizfly phát triển AI Chat Agent - trợ lý ảo có khả năng tư vấn, giải đáp.....