Thiết kế truy vấn AI sử dụng đồng thời nhiều nguồn context trong một pipeline
Trong các hệ thống AI Agent ở mức production, việc dựa vào một kho dữ liệu duy nhất gần như không còn đáp ứng đủ yêu cầu nghiệp vụ. Truy vấn từ người dùng ngày càng phức tạp, đòi hỏi AI phải tổng hợp thông tin từ nhiều hệ thống khác nhau như dữ liệu giao dịch, hồ sơ khách hàng, tài liệu nội bộ hay vector database.
Thay vì đưa toàn bộ dữ liệu vào một prompt duy nhất, cách tiếp cận hiệu quả hơn là xây dựng một cơ chế định tuyến (Router) để AI chủ động chọn đúng nguồn context cần dùng cho từng truy vấn. Bài viết này tập trung vào cách thiết kế và triển khai kiến trúc multi-context query cho AI theo góc nhìn của developer.
Bài toán multi-context trong môi trường AI thực tế
Trong hệ thống doanh nghiệp, dữ liệu thường bị phân mảnh theo chức năng:
- CRM: thông tin khách hàng, hợp đồng, ưu đãi
- CDP: lịch sử hành vi, tracking đa kênh
- Product Database: giá, tồn kho, cấu hình sản phẩm
- Knowledge Base: tài liệu nội bộ (Notion, Confluence, Drive…)
- Vector Database: dữ liệu đã embedding phục vụ semantic search
Giả sử người dùng hỏi:
“Báo giá sản phẩm X và cho biết tôi có đang được áp dụng ưu đãi nào không?”
Truy vấn này bắt buộc phải kết hợp:
- Product DB → lấy giá sản phẩm
- CRM/CDP → kiểm tra trạng thái khách hàng & ưu đãi
Nếu không có cơ chế phân luồng, developer thường chọn cách nhồi toàn bộ context vào LLM, dẫn đến:
- Token tăng đột biến
- Thời gian phản hồi chậm
- Model bị nhiễu và suy luận sai
Router trong pipeline AI – vai trò điều phối trung tâm
Router có thể xem như dispatcher trong kiến trúc AI. Một pipeline phổ biến thường gồm các bước:
1. Tiếp nhận truy vấn
Request từ client → backend API → Router.
2. Phân tích intent & entity
Sử dụng rule-based parser hoặc LLM classifier để tách:
- Intent (ví dụ:
request_quote) - Entity (product, user, quantity…)
3. Xác định nguồn context phù hợp
Có hai hướng chính:
- Rule-based: ánh xạ intent → nguồn dữ liệu
- AI-based: LLM tự chọn nguồn dựa trên mô tả schema
4. Truy vấn dữ liệu
- CRM/CDP → REST API / GraphQL
- Product DB → SQL
- Vector DB → similarity search
5. Chuẩn hóa & hợp nhất context
Chuyển dữ liệu về cấu trúc thống nhất, áp dụng chiến lược ưu tiên.
6. Xây prompt & gọi LLM
Inject context vào prompt template → sinh câu trả lời.
Định tuyến context bằng cấu hình (Rule-based Router)
Cách đơn giản nhất là dùng file cấu hình YAML/JSON để map intent với nguồn dữ liệu:
routes:
- intent: request_quote
sources:
- product_db
- crm
- intent: customer_profile
sources:
- crm
- cdp
- intent: check_feature
sources:
- knowledge_base
Router chỉ cần:
- Load config
- Nhận intent
- Kích hoạt danh sách source tương ứng
Ưu điểm
- Dễ debug
- Kiểm soát luồng dữ liệu rõ ràng
Hạn chế
- Kém linh hoạt với truy vấn mơ hồ
- Cần update config khi nghiệp vụ thay đổi
Định tuyến context bằng LLM (AI-based Router)
Với các hệ thống linh hoạt hơn, bạn có thể mô tả từng nguồn dữ liệu như một tool/function:
[
{
"name": "search_product_db",
"description": "Lấy thông tin sản phẩm theo tên hoặc ID",
"parameters": { "product_name": "string" }
},
{
"name": "get_customer_profile",
"description": "Truy xuất hồ sơ khách hàng từ CRM",
"parameters": { "customer_email": "string" }
}
]
LLM sẽ:
- Phân tích câu hỏi
- Chọn function phù hợp
- Router parse function_call và gọi đúng service
Ưu điểm
- Dễ mở rộng nguồn dữ liệu
- Phù hợp với truy vấn tự nhiên, không cứng intent
Lưu ý
- Cần validate output của LLM
- Phải có fallback khi gọi sai tool
Chiến lược hợp nhất context từ nhiều nguồn
Khi đã có dữ liệu từ nhiều nơi, vấn đề tiếp theo là merge context:
- Concat text thuần: nhanh nhưng dễ vượt token
- Structured merge: chuẩn hóa về JSON schema
- Weighted ranking: chọn top-k chunk theo score
- Priority-based merge: xác định độ ưu tiên (VD: CRM > Product > KB)
Ví dụ context hợp nhất:
{
"product": {
"name": "Product A",
"price": 1000
},
"customer": {
"email": "user@example.com",
"discount": "10%"
}
}
Cách này giúp prompt gọn, rõ ràng và dễ kiểm soát logic.
Xử lý bất đồng bộ khi truy vấn nhiều nguồn
Trong thực tế, không phải nguồn nào cũng phản hồi nhanh. Router nên được thiết kế theo mô hình fan-out / async:
- Gọi song song nhiều source
- Chờ
Promise.all(Node.js) hoặcasyncio.gather(Python) - Timeout và fallback khi một source lỗi
Điều này giúp hệ thống AI:
- Không bị block
- Giữ SLA ổn định
- Dễ mở rộng về sau
Công cụ hỗ trợ developer triển khai
Một số stack phổ biến:
- LangChain RouterChain: routing query theo chain
- LlamaIndex Multi-Retriever: gọi nhiều retriever song song
- Redis / Elasticsearch: cache & lookup nhanh
- n8n: orchestrate workflow API
- Grafana / Prometheus: theo dõi latency từng source
Tổng kết
Kết hợp nhiều nguồn context trong một truy vấn không đơn thuần là vấn đề prompt, mà là bài toán kiến trúc. Router giúp hệ thống AI:
- Truy vấn đúng dữ liệu
- Giảm token dư thừa
- Tăng độ chính xác và tốc độ phản hồi
Với cách tiếp cận module hóa và có thể mở rộng, developer hoàn toàn có thể xây dựng một pipeline AI đủ linh hoạt để xử lý các truy vấn phức tạp trong môi trường doanh nghiệp thực tế.
Nguồn tham khảo: https://bizfly.vn/techblog/huong-dan-ket-hop-nhieu-nguon-context-trong-mot-truy-van-cho-ai.html
All rights reserved