ADR-0004: LangFuse cho LLM observability + OmniRoute cho LLM routing
- Status: Accepted
- Date: ~2026-06-27 (backfilled 2026-07-25)
- Supersedes: —
- Superseded by: —
Bối cảnh
chatbot-service gọi Groq LLM (Llama 3.1/3.3) và cần theo dõi riêng các
khía cạnh LLM mà APM thông thường (SigNoz/OpenTelemetry cho HTTP trace)
không nắm bắt đủ: prompt/completion content, token usage/cost, latency
per-model, đánh giá chất lượng câu trả lời. Đồng thời cần khả năng đổi/thêm
LLM provider (Groq / Gemini / Anthropic) mà không sửa code chatbot mỗi lần.
Quyết định
Thêm 2 thành phần riêng cho AI stack, tách khỏi observability stack chung:
- LangFuse (+ MinIO cho blob storage) — LLM observability: trace prompt/completion, cost, latency theo model
- OmniRoute (port 20128) — LLM routing layer, cho phép chatbot gọi 1 endpoint chung mà route thật sự tới Groq/Gemini/Anthropic tuỳ cấu hình
Lựa chọn khác đã cân nhắc
- Dùng luôn SigNoz cho cả LLM tracing: SigNoz đã có sẵn cho APM chung (xem ADR-0004 của backend-k3s), nhưng không có concept prompt/completion/token-cost sẵn có như LangFuse — loại vì phải tự xây dashboard LLM-specific từ đầu.
- Gọi thẳng Groq SDK từ chatbot-service, không qua router: đơn giản hơn, nhưng đổi provider (vd: cần fallback sang Gemini khi Groq rate-limit) phải sửa code chatbot — loại, chọn OmniRoute để tách concern "chọn model nào" ra khỏi business logic chatbot.
Hệ quả
- Được: quan sát chi phí/chất lượng LLM tách biệt khỏi APM hạ tầng chung; đổi provider LLM không cần sửa code chatbot-service.
- Đánh đổi: thêm 2 thành phần hạ tầng (LangFuse + MinIO + OmniRoute) trên master node vốn đã là single point of failure (ADR-0001); thêm 1 điểm trung gian (OmniRoute) có thể là nguồn lỗi/latency mới giữa chatbot và LLM thật.
Liên kết
- Docs liên quan:
README.md(mục Tech Stack, Kiến trúc tổng quan) - ADR liên quan:
football-booking-chatbot-service-k3s/docs/adr/0001-groq-llm-smart-routing.md