Tugas 3: Routing + Bahasa¶
Target: memilih agent yang tepat (dan bahasa) sebelum LLM berjalan.
Step 0: Tentukan Mode Routing¶
Set router.mode di config:
off: single-agent.bootstrap: route hanya N turn pertama.full: route setiap STT final.
Kenapa: routing awal menjaga prompt tetap fokus dan mengurangi overhead LLM.
Peta Sistem¶
flowchart LR
Caller((Caller))
Transport[Transport]
STT[STT]
Detector[Detektor Bahasa]
Router[Router]
LLM[LLM: Prompt Agent]
TTS[TTS]
Caller --> Transport --> STT --> Detector --> Router --> LLM --> TTS --> Transport --> Caller
Step 1: Definisikan Agent¶
agents := map[string]processors.AgentConfig{
"triage": {Name: "triage", System: "You are the triage agent."},
"technical": {Name: "technical", System: "You handle technical issues."},
"billing": {Name: "billing", System: "You handle billing and payments."},
}
Step 2: Pilih Router Strategy¶
Contoh HVAC memakai LLM router:
llmAdapter, _ := providers.BuildLLM(cfg.Vendors.LLM.Provider, cfg)
router := NewLLMRouterStrategy(llmAdapter, nil, LLMRouterConfig{})
Kamu bisa membuat processors.RouterStrategy sendiri jika ingin aturan berbasis rule.
Step 3: Pasang Router + Agent ke Engine¶
engine := ranya.NewEngine(ranya.EngineOptions{
Config: cfg,
Agents: agents,
Router: router,
})
Step 4: Tambahkan Deteksi Bahasa (Opsional)¶
Contoh HVAC memakai detektor berbasis LLM:
langDetector := NewLLMLanguageDetector(llmAdapter)
engine := ranya.NewEngine(ranya.EngineOptions{
Config: cfg,
Agents: agents,
Router: router,
LanguageDetector: langDetector,
LanguagePrompts: map[string]string{"id": "...", "en": "..."},
LanguageMinConf: 0.55,
DefaultLanguage: cfg.Languages.Default,
})
Hook config:
router:
mode: "bootstrap"
max_turns: 2
languages:
default: "id"
code_switching: true
prompts:
id: "Gunakan Bahasa Indonesia."
en: "Use English."
Step 5: Verifikasi Routing¶
Pastikan terlihat:
global_updatesystem frame saat routing memilih agent atau bahasa.- Metadata
agentmuncul pada text frame berikutnya.
Perbaikan Umum¶
- Router tidak jalan: pastikan STT final (
source=stt,is_final=true). - Agent tidak menempel:
router.modeoff ataumax_turns0. - Bahasa tidak terdeteksi:
LanguageDetectorbelum terpasang atau confidence terlalu rendah.