安装
go get github.com/arouter-ai/arouter-go
快速开始
package main
import (
"context"
"fmt"
"log"
arouter "github.com/arouter-ai/arouter-go"
)
func main() {
client := arouter.NewClient(
"https://api.arouter.ai",
"lr_live_xxxx",
)
resp, err := client.ChatCompletion(context.Background(), arouter.ChatCompletionRequest{
Model: "openai/gpt-5.4",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}
多 Provider
// 通过 ARouter 使用 Anthropic
resp, _ := client.ChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "anthropic/claude-sonnet-4.6",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
// 通过 ARouter 使用 DeepSeek
resp, _ = client.ChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "deepseek/deepseek-v3.2",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
流式输出
stream, err := client.ChatCompletionStream(context.Background(), arouter.ChatCompletionRequest{
Model: "openai/gpt-5.4",
Messages: []arouter.Message{
{Role: "user", Content: "写一首关于 Go 的俳句。"},
},
})
if err != nil {
log.Fatal(err)
}
defer stream.Close()
for {
chunk, err := stream.Recv()
if err == arouter.ErrStreamDone {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Print(chunk.Choices[0].Delta.Content)
}
Key 管理
使用管理密钥(lr_mgmt_)以编程方式创建和管理 API key。
创建 API Key
mgmtClient := arouter.NewClient("https://api.arouter.ai", "lr_mgmt_xxxx")
key, err := mgmtClient.CreateKey(ctx, &arouter.CreateKeyRequest{
Name: "production-backend",
AllowedProviders: []string{"openai", "anthropic"},
AllowedModels: []string{"gpt-5.4", "claude-sonnet-4.6"},
Limit: float64Ptr(150),
LimitReset: "monthly",
})
if err != nil {
log.Fatal(err)
}
fmt.Println("API Key:", key.Key)
列出 API Key
keys, err := mgmtClient.ListKeys(ctx, &arouter.ListKeysOptions{
PageSize: 20,
})
if err != nil {
log.Fatal(err)
}
for _, k := range keys.Data {
fmt.Printf("- %s (%s) disabled=%t\n", k.Name, k.Hash, k.Disabled)
}
更新 API Key
_, err := mgmtClient.UpdateKey(ctx, "KEY_HASH", &arouter.UpdateKeyRequest{
Disabled: boolPtr(true),
})
删除 API Key
err := mgmtClient.DeleteKey(ctx, "KEY_HASH")
Provider 代理
直接访问上游,无需通过模型字段路由:resp, err := client.ProxyRequest(ctx, "openai", "v1/chat/completions", map[string]any{
"model": "gpt-5.4",
"messages": []map[string]string{{"role": "user", "content": "Hello!"}},
})
客户端选项
client := arouter.NewClient(
"https://api.arouter.ai",
"lr_live_xxxx",
arouter.WithTimeout(30 * time.Second),
arouter.WithHTTPClient(customHTTPClient),
)
钱包 JWT + x402 支付
拥有加密钱包的 AI 代理可通过 SIWx 验证身份,并通过 x402 支付积分。 SDK 会缓存钱包 JWT,并将其作为后续请求的 Bearer token。EVM(Base)
import (
"github.com/ethereum/go-ethereum/crypto"
arouter "github.com/arouter-ai/arouter-go"
)
key, _ := crypto.HexToECDSA("your-private-key-hex")
// 一次调用即可设置钱包 JWT 刷新 + 自动 x402 支付
client := arouter.NewClient(
"https://api.arouter.ai",
"", // 无需 API key
arouter.WithX402CoinbasePayment(key),
)
resp, err := client.ChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "openai/gpt-5.4",
Messages: []arouter.Message{{Role: "user", Content: "Hello"}},
})
Solana
solanaKey := ed25519.PrivateKey(yourKeyBytes)
client := arouter.NewClient(
"https://api.arouter.ai",
"",
arouter.WithX402SolanaPayment(solanaKey),
)
仅 SIWx(不自动支付)
signer := arouter.NewEvmWalletSigner(privateKey)
result, err := arouter.AuthenticateWithSIWx(ctx, "https://api.arouter.ai", signer, nil)
client := arouter.NewClient("https://api.arouter.ai", result.JWT)
错误处理
resp, err := client.ChatCompletion(ctx, req)
if err != nil {
var apiErr *arouter.APIError
if errors.As(err, &apiErr) {
switch apiErr.StatusCode {
case 401:
log.Fatal("API key 无效")
case 429:
log.Println("触发限流,正在重试...")
case 502:
log.Println("上游 provider 错误")
}
}
}