llzai's picture
Upload 1793 files
9853396 verified
package main
import (
"context"
"fmt"
"net/http"
"os"
openapigraphql "examples/graphql"
"github.com/Khan/genqlient/graphql"
)
func main() {
// AxonHub 的 OpenAPI GraphQL 地址
// 注意: 这是一个专用的管理端点,需要 Service Account 类型的 API Key
endpoint := "http://localhost:8090/openapi/v1/graphql"
if envEndpoint := os.Getenv("AXONHUB_ENDPOINT"); envEndpoint != "" {
endpoint = envEndpoint
}
// 你的 API Key
// 注意: 必须是 Service Account 类型,并且拥有 write_api_keys 权限
apiKey := os.Getenv("AXONHUB_API_KEY")
if apiKey == "" {
fmt.Println("请设置 AXONHUB_API_KEY 环境变量 (需要 Service Account Key)")
os.Exit(1)
}
// 创建带有认证头的 HTTP 客户端
httpClient := &http.Client{
Transport: &headerTransport{
apiKey: apiKey,
base: http.DefaultTransport,
},
}
// 初始化 genqlient 客户端
client := graphql.NewClient(endpoint, httpClient)
// 调用生成的 CreateAPIKey 方法
// 该操作会为当前 Service Account 所属的项目创建一个新的 User 类型 Key
name := "example-key-from-sdk"
fmt.Printf("正在创建 API Key: %s...\n", name)
resp, err := openapigraphql.CreateAPIKey(context.Background(), client, name)
if err != nil {
fmt.Fprintf(os.Stderr, "调用失败: %v\n", err)
fmt.Println("\n可能的原因:")
fmt.Println("1. 服务器未启动 (默认 8090 端口)")
fmt.Println("2. API Key 不是 Service Account 类型")
fmt.Println("3. API Key 缺少 write_api_keys 权限")
os.Exit(1)
}
if resp.CreateLLMAPIKey != nil {
fmt.Printf("成功创建 API Key!\n")
fmt.Printf("名称: %s\n", resp.CreateLLMAPIKey.Name)
fmt.Printf("密钥: %s\n", resp.CreateLLMAPIKey.Key)
fmt.Printf("权限: %v\n", resp.CreateLLMAPIKey.Scopes)
fmt.Println("\n现在你可以使用这个新生成的 Key 来进行常规的 LLM 调用了。")
} else {
fmt.Println("创建成功但返回数据为空")
}
}
// headerTransport 用于在每个请求中自动注入 Authorization 头
type headerTransport struct {
apiKey string
base http.RoundTripper
}
func (t *headerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Set("Authorization", "Bearer "+t.apiKey)
return t.base.RoundTrip(req)
}