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) }