快速開始
安裝 go-llm-router,並以統一的 Agent 介面送出第一個請求。
環境需求
- Go 1.25 或更新版本
- 對應供應商的憑證:API key,或 Copilot / Codex / Grok 的 OAuth token
- 使用
core/oauth儲存 token 時,需要作業系統 keychain 的存取權限
安裝
go get github.com/pardnchiu/go-llm-router
從原始碼建置:
git clone https://github.com/pardnchiu/go-llm-router.git
cd go-llm-router
go build ./...
送出第一個請求
Send 需要五個參數:context、訊息、工具定義(可為 nil)、推理強度 Reasoning、執行模式 Mode。所有供應商共用同一組參數,切換模型不必改寫請求迴圈。
package main
import (
"context"
"fmt"
"log"
"github.com/pardnchiu/go-llm-router/core"
"github.com/pardnchiu/go-llm-router/core/router"
)
func main() {
agent, err := router.New(router.Config{
Name: "openai@gpt-5.4",
APIKey: "your-api-key",
})
if err != nil {
log.Fatal(err)
}
messages := []core.Message{
{Role: "user", Content: "用一句話解釋 Go interface。"},
}
out, status, err := agent.Send(
context.Background(),
messages,
nil,
core.ReasoningMedium,
core.ModeDefault,
)
if err != nil {
log.Fatalf("request failed (HTTP %d): %v", status, err)
}
if len(out.Choices) == 0 {
log.Fatal("provider returned no choices")
}
fmt.Println(out.Choices[0].Message.Content)
}
Name 使用 <provider>@<model> 格式。未知的 provider 前綴會讓 router.New 回傳錯誤。
請求加速層
ModeFast 是能力請求而非保證。先用 core.SupportFast 檢查 provider/model 組合;不支援的組合靜默維持標準層,不會因此失敗。
mode := core.ModeDefault
if core.SupportFast("openai", "gpt-5.4") {
mode = core.ModeFast
}
out, status, err := agent.Send(ctx, messages, nil, core.ReasoningHigh, mode)
串流輸出
實作 core.StreamAgent 的供應商可透過 channel 取得文字、推理、工具呼叫、用量、完成與錯誤事件。
streamer, ok := agent.(core.StreamAgent)
if !ok {
return fmt.Errorf("%s does not support streaming", agent.Name())
}
events, err := streamer.SendStream(ctx, messages, nil, core.ReasoningMedium, core.ModeDefault)
if err != nil {
return err
}
for event := range events {
switch event.Type {
case core.StreamEventText:
fmt.Print(event.TextDelta)
case core.StreamEventReasoning:
fmt.Print(event.ReasoningDelta)
case core.StreamEventError:
return event.Err
}
}
本機測試伺服器
make test 執行 go run ./cmd/test,啟動 OpenAI 相容的 HTTP 伺服器,預設監聽 8787,以 PORT 覆寫。憑證由環境變數提供。
export OPENAI_API_KEY="your-api-key"
make test
curl http://127.0.0.1:8787/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "openai@gpt-5.4",
"messages": [{"role": "user", "content": "Hello"}],
"reasoning": "medium",
"mode": "default"
}'
加上 "stream": true 會改以 OpenAI 風格的 chat.completion.chunk SSE 回傳,並以 data: [DONE] 結尾。