要连接并使用 Google 的 LLM Gemini 和 Go,可以使用他们的官方Go SDK来实现。在这篇文章中,我们将展示一个简单的聊天示例,以演示如何使其与 Go 一起工作。
此示例只是要求模型将一些英文翻译成中文并获取其输出。代码实际上如下所示:
var client *genai.Client
// geminiOnce.Do(func() {
client, err = genai.NewClient(ctx, option.WithAPIKey(string(apiKey)))
if err != nil {
log.Fatal(err)
}
model := client.GenerativeModel("gemini-1.5-flash-latest")
model.SetTemperature(0.1)
resp, err := model.GenerateContent(ctx, genai.Text("Translate 'Hello world' to Chinese"))
if err != nil {
log.Printf("Error generating content: %v", err)
return "", err
}
for _, candidate := range resp.Candidates {
if candidate != nil {
if candidate.Content.Parts != nil {
log.Printf("Output: %s", string(candidate.Content.Parts[0].(genai.Text)))
}
}
}
以下是提供的代码片段的分步解释:
1. 声明一个客户端变量
var client *genai.Client
- 声明了一个类型为
*genai.Client
的指针变量 client。 - 此变量将保存用于与
genai
服务交互的已初始化客户端实例。
2. 初始化客户端
client, err = genai.NewClient(ctx, option.WithAPIKey(string(apiKey)))
if err != nil {
log.Fatal(err)
}
- genai.NewClient(ctx, option.WithAPIKey(string(apiKey))):
- 使用 genai 库创建一个新的客户端实例。
- ctx: 传递一个 context.Context,启用请求取消或超时控制。
- option.WithAPIKey(string(apiKey)): 指定用于对客户端进行身份验证的 API 密钥。可以在Google AI Studio上创建一个新项目来生成 API 密钥。
- 错误处理:
- 如果 err 不为 nil,程序将记录错误并使用 log.Fatal(err) 退出。
3. 选择一个生成模型
model := client.GenerativeModel("gemini-1.5-flash-latest")
- 客户端的 GenerativeModel 方法选择一个特定的模型版本来使用。
- 这里,模型是“gemini-1.5-flash-latest”,它大概是一个生成式 AI 模型。有其他可用的模型,其中 2.0 是实验阶段的最新模型。
4. 设置模型参数
model.SetTemperature(0.1)
- 将模型的温度设置为 0.1。
- 温度控制输出的随机性。
- 较低的温度(例如,0.1)会产生更确定的结果,而较高的温度会引入更多变化。
通过调用 model.SetXXX() 也可以设置其他参数,例如输出标记长度,
5. 生成内容
resp, err := model.GenerateContent(ctx, genai.Text("Translate 'Hello world' to Chinese"))
if err != nil {
log.Printf("Error generating content: %v", err)
return "", err
}
- GenerateContent(ctx, genai.Text(...)):
- 使用输入“Translate 'Hello world' to Chinese”向模型发送生成请求。
- 输入包含在
genai.Text
中。一种通用的文本处理方式,它也支持其他类型,如 Blob(图像)、FunctionCall。
6. 处理响应
for _, candidate := range resp.Candidates {
if candidate != nil {
if candidate.Content.Parts != nil {
log.Printf("Output: %s", string(candidate.Content.Parts[0].(genai.Text)))
}
}
}
- 迭代候选者:
resp.Candidates
包含模型可能的输出。候选者的数量可以在步骤 4 中使用model.SetCandidateCount()
设置。默认值为 1,目前也只支持 1。- 循环处理响应中的每个候选者。
- 由于上下文是文本聊天,因此这里的输出也是
genai.Text
类型。我们需要将Part
转换为genai.Text
类型,因为它最初是一个接口。
有了以上内容,您应该能够深入研究 SDK 和 Gemini 模型提供的其他大量功能。