axonhub / docs /zh /api-reference /anthropic-api.md
llzai's picture
Upload 1793 files
9853396 verified
# Anthropic API 参考
## 概述
AxonHub 支持原生 Anthropic Messages API,适用于偏好 Anthropic 特定功能和响应格式的应用程序。您可以使用 Anthropic SDK 访问 Claude 模型,也可以访问 OpenAI、Gemini 和其他支持的模型。
## 核心优势
- **API 互操作性**:使用 Anthropic Messages API 调用 OpenAI、Gemini 和其他支持的模型
- **零代码变更**:继续使用现有的 Anthropic 客户端 SDK,无需修改
- **自动转换**:AxonHub 在需要时自动在 API 格式之间进行转换
- **提供商灵活性**:使用 Anthropic API 格式访问任何支持的 AI 提供商
## 支持的端点
**端点:**
- `POST /anthropic/v1/messages` - 文本生成
- `POST /v1/messages` - 文本生成 (可选)
- `GET /anthropic/v1/models` - 列出可用模型
**示例请求:**
```go
import (
"github.com/anthropics/anthropic-sdk-go"
"github.com/anthropics/anthropic-sdk-go/option"
)
// 使用 AxonHub 配置创建 Anthropic 客户端
client := anthropic.NewClient(
option.WithAPIKey("your-axonhub-api-key"),
option.WithBaseURL("http://localhost:8090/anthropic"),
)
// 使用 Anthropic API 格式调用 OpenAI 模型
messages := []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("Hello, GPT!")),
}
response, err := client.Messages.New(ctx, anthropic.MessageNewParams{
Model: anthropic.Model("gpt-4o"),
Messages: messages,
MaxTokens: 1024,
})
if err != nil {
// 适当处理错误
panic(err)
}
// 从响应中提取文本内容
responseText := ""
for _, block := range response.Content {
if textBlock := block.AsText(); textBlock != nil {
responseText += textBlock.Text
}
}
fmt.Println(responseText)
```
## API 转换能力
AxonHub 自动在 API 格式之间进行转换,实现以下强大场景:
### 使用 Anthropic SDK 调用 OpenAI 模型
```go
// Anthropic SDK 调用 OpenAI 模型
messages := []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("你好,世界!")),
}
response, err := client.Messages.New(ctx, anthropic.MessageNewParams{
Model: anthropic.Model("gpt-4o"), // OpenAI 模型
Messages: messages,
MaxTokens: 1024,
})
// 访问响应
for _, block := range response.Content {
if textBlock := block.AsText(); textBlock != nil {
fmt.Println(textBlock.Text)
}
}
// AxonHub 自动转换 Anthropic 格式 → OpenAI 格式
```
### 使用 Anthropic SDK 调用 Gemini 模型
```go
// Anthropic SDK 调用 Gemini 模型
messages := []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("解释量子计算")),
}
response, err := client.Messages.New(ctx, anthropic.MessageNewParams{
Model: anthropic.Model("gemini-2.5"), // Gemini 模型
Messages: messages,
MaxTokens: 1024,
})
// 访问响应
for _, block := range response.Content {
if textBlock := block.AsText(); textBlock != nil {
fmt.Println(textBlock.Text)
}
}
// AxonHub 自动转换 Anthropic 格式 → Gemini 格式
```
## 认证
Anthropic API 格式使用以下认证方式:
- **头部**`X-API-Key: <your-api-key>`
API 密钥通过 AxonHub 的 API 密钥管理系统进行管理,无论使用哪种 API 格式,都提供相同的权限。
## 流式支持
Anthropic API 格式支持流式响应:
```go
// Anthropic SDK 流式传输
messages := []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("从一数到五")),
}
stream := client.Messages.NewStreaming(ctx, anthropic.MessageNewParams{
Model: anthropic.Model("gpt-4o"),
Messages: messages,
MaxTokens: 1024,
})
// 收集流式内容
var content string
for stream.Next() {
event := stream.Current()
switch event := event.(type) {
case anthropic.ContentBlockDeltaEvent:
if event.Type == "content_block_delta" {
content += event.Delta.Text
fmt.Print(event.Delta.Text) // 边传输边打印
}
}
}
if err := stream.Err(); err != nil {
panic(err)
}
fmt.Println("\n完整响应:", content)
```
## 错误处理
Anthropic 格式错误响应:
```json
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Invalid API key"
}
}
```
## 工具支持
AxonHub 通过 Anthropic API 格式支持**函数工具**(自定义函数调用)。但是,**不支持**各提供商特有的工具:
| 工具类型 | 支持状态 | 说明 |
| -------- | -------- | ---- |
| **函数工具(Function Tools)** | ✅ 支持 | 自定义函数定义可跨所有提供商使用 |
| **网页搜索(Web Search)** | ❌ 不支持 | 提供商特有功能(OpenAI、Anthropic 等) |
| **代码解释器(Code Interpreter)** | ❌ 不支持 | 提供商特有功能(OpenAI、Anthropic 等) |
| **文件搜索(File Search)** | ❌ 不支持 | 提供商特有功能 |
| **计算机使用(Computer Use)** | ❌ 不支持 | Anthropic 特有功能 |
> **注意**:仅支持可跨提供商转换的通用函数工具。网页搜索、代码解释器、计算机使用等提供商特有工具需要直接访问提供商的基础设施,无法通过 AxonHub 代理。
## 最佳实践
1. **使用追踪头部**:包含 `AH-Trace-Id``AH-Thread-Id` 头部以获得更好的可观测性
2. **模型选择**:在请求中明确指定目标模型
3. **错误处理**:为 API 响应实现适当的错误处理
4. **流式处理**:对于长响应使用流式处理以获得更好的用户体验
5. **使用函数工具**:进行工具调用时,请使用通用函数工具而非提供商特有工具
## 迁移指南
### 从 Anthropic 迁移到 AxonHub
```go
// 之前:直接 Anthropic
client := anthropic.NewClient(
option.WithAPIKey("anthropic-key"),
)
// 之后:使用 Anthropic API 的 AxonHub
client := anthropic.NewClient(
option.WithAPIKey("axonhub-api-key"),
option.WithBaseURL("http://localhost:8090/anthropic"),
)
// 您的现有代码继续工作!
```