File size: 6,514 Bytes
9853396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# Gemini API 参考

## 概述

AxonHub 原生支持 Gemini API,可访问 Gemini 强大的多模态功能。您可以使用 Gemini SDK 访问 Gemini 模型,也可以访问 OpenAI、Anthropic 和其他支持的模型。

## 核心优势

- **API 互操作性**:使用 Gemini API 调用 OpenAI、Anthropic 和其他支持的模型
- **零代码变更**:继续使用现有的 Gemini 客户端 SDK,无需修改
- **自动转换**:AxonHub 在需要时自动在 API 格式之间进行转换
- **多模态支持**:通过 Gemini API 格式访问文本和图像功能

## 支持的端点

**端点:**
- `POST /gemini/v1beta/models/{model}:generateContent` - 文本和多模态内容生成
- `POST /v1beta/models/{model}:generateContent` - 文本和多模态内容生成 (可选)
- `GET /gemini/v1beta/models` - 列出可用模型
- `GET /v1beta/models` - 列出可用模型 (可选)

**示例请求:**
```go

import (

    "context"

    "google.golang.org/genai"

)



// 使用 AxonHub 配置创建 Gemini 客户端

ctx := context.Background()

client, err := genai.NewClient(ctx, &genai.ClientConfig{

    APIKey:  "your-axonhub-api-key",

    Backend: genai.Backend(genai.APIBackendUnspecified), // 使用默认后端

    HTTPOptions: genai.HTTPOptions{

			BaseURL: "http://localhost:8090/gemini",

	},

})

if err != nil {

    // 适当处理错误

    panic(err)

}



// 使用 Gemini API 格式调用 OpenAI 模型

modelName := "gpt-4o"  // 通过 Gemini API 格式访问 OpenAI 模型

content := &genai.Content{

    Parts: []*genai.Part{

        {Text: genai.Ptr("Hello, GPT!")},

    },

}



// 可选:配置生成参数

config := &genai.GenerateContentConfig{

    Temperature: genai.Ptr(float32(0.7)),

    MaxOutputTokens: genai.Ptr(int32(1024)),

}



response, err := client.Models.GenerateContent(ctx, modelName, []*genai.Content{content}, config)

if err != nil {

    // 适当处理错误

    panic(err)

}



// 从响应中提取文本

if len(response.Candidates) > 0 &&

   len(response.Candidates[0].Content.Parts) > 0 {

    responseText := response.Candidates[0].Content.Parts[0].Text

    fmt.Println(*responseText)

}

```

**示例:多轮对话**
```go

// 创建带有对话历史的聊天会话

modelName := "claude-3-5-sonnet"

config := &genai.GenerateContentConfig{

    Temperature: genai.Ptr(float32(0.5)),

}



chat, err := client.Chats.Create(ctx, modelName, config, nil)

if err != nil {

    panic(err)

}



// 第一条消息

response1, err := chat.SendMessage(ctx, genai.Part{Text: genai.Ptr("My name is Alice")})

if err != nil {

    panic(err)

}



// 后续消息(模型记住上下文)

response2, err := chat.SendMessage(ctx, genai.Part{Text: genai.Ptr("What is my name?")})

if err != nil {

    panic(err)

}



// 提取响应

if len(response2.Candidates) > 0 {

    text := response2.Candidates[0].Content.Parts[0].Text

    fmt.Println(*text)  // 应该包含 "Alice"

}

```

## API 转换能力

AxonHub 自动在 API 格式之间进行转换,实现以下强大场景:

### 使用 Gemini SDK 调用 OpenAI 模型
```go

// Gemini SDK 调用 OpenAI 模型

content := &genai.Content{

    Parts: []*genai.Part{

        {Text: genai.Ptr("什么是人工智能?")},

    },

}



response, err := client.Models.GenerateContent(

    ctx,

    "gpt-4o",  // OpenAI 模型

    []*genai.Content{content},

    nil,

)



// 访问响应

if len(response.Candidates) > 0 &&

   len(response.Candidates[0].Content.Parts) > 0 {

    text := response.Candidates[0].Content.Parts[0].Text

    fmt.Println(*text)

}

// AxonHub 自动转换 Gemini 格式 → OpenAI 格式

```

### 使用 Gemini SDK 调用 Anthropic 模型
```go

// Gemini SDK 调用 Anthropic 模型

content := &genai.Content{

    Parts: []*genai.Part{

        {Text: genai.Ptr("解释神经网络")},

    },

}



response, err := client.Models.GenerateContent(

    ctx,

    "claude-3-5-sonnet",  // Anthropic 模型

    []*genai.Content{content},

    nil,

)



// 访问响应

if len(response.Candidates) > 0 &&

   len(response.Candidates[0].Content.Parts) > 0 {

    text := response.Candidates[0].Content.Parts[0].Text

    fmt.Println(*text)

}

// AxonHub 自动转换 Gemini 格式 → Anthropic 格式

```

## 认证

Gemini API 格式使用以下认证方式:

- **头部**`X-Goog-API-Key: <your-api-key>`

API 密钥通过 AxonHub 的 API 密钥管理系统进行管理,无论使用哪种 API 格式,都提供相同的权限。

## 流式支持

Gemini API 格式支持流式响应以进行实时内容生成。

## 错误处理

Gemini 格式错误响应遵循标准 Gemini API 错误格式。

## 工具支持

AxonHub 通过 Gemini API 格式支持**函数工具**(自定义函数调用)。但是,**不支持**各提供商特有的工具:

| 工具类型 | 支持状态 | 说明 |
| -------- | -------- | ---- |
| **函数工具(Function Tools)** | ✅ 支持 | 自定义函数定义可跨所有提供商使用 |
| **网页搜索(Web Search)** | ❌ 不支持 | 提供商特有功能 |
| **代码解释器(Code Interpreter)** | ❌ 不支持 | 提供商特有功能 |
| **文件搜索(File Search)** | ❌ 不支持 | 提供商特有功能 |
| **计算机使用(Computer Use)** | ❌ 不支持 | Anthropic 特有功能 |

> **注意**:仅支持可跨提供商转换的通用函数工具。提供商特有工具需要直接访问提供商的基础设施,无法通过 AxonHub 代理。

## 最佳实践

1. **使用追踪头部**:包含 `AH-Trace-Id``AH-Thread-Id` 头部以获得更好的可观测性
2. **模型选择**:在请求中明确指定目标模型
3. **错误处理**:为 API 响应实现适当的错误处理
4. **流式处理**:对于长响应使用流式处理以获得更好的用户体验
5. **多模态内容**:在处理图像时利用 Gemini API 的多模态功能

## 迁移指南

### 从 Gemini 迁移到 AxonHub
```go

// 之前:直接 Gemini

ctx := context.Background()

client, err := genai.NewClient(ctx, &genai.ClientConfig{

    APIKey: "gemini-api-key",

})



// 之后:使用 Gemini API 的 AxonHub

ctx := context.Background()

client, err := genai.NewClient(ctx, &genai.ClientConfig{

    APIKey: "your-axonhub-api-key",

    HTTPOptions: genai.HTTPOptions{

        BaseURL: "http://localhost:8090/gemini",

    },

})

// 您的现有代码继续工作!

```