설치
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 오류")
}
}
}