Bỏ qua

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