1. 概述
1.1 Gen AI SDK
Google Gen AI Go SDK 是一个专为 Go 语言设计的开发工具包,它允许开发者将 Google 的生成式模型(如 Gemini)集成到他们的应用程序中。该 SDK 支持以下功能:
- 文本生成:从纯文本输入生成文本。
- 多模态生成:从文本和图像输入生成文本。
- 实时交互:支持实时对话和视频流。
1.2 支持的 API
- Gemini Developer API:用于访问 Google 的 Gemini 模型。
- Vertex AI API:用于在 Google Cloud 的 Vertex AI 平台上使用生成式模型。
2. 安装和配置
2.1 安装 SDK
要开始使用 Google Gen AI Go SDK,首先需要将其添加到你的 Go 项目中。可以通过以下命令安装:
go get google.golang.org/genai
2.2 创建客户端
2.2.1 Gemini API 客户端
要使用 Gemini API,需要一个 API 密钥。可以通过以下代码创建客户端:
import "google.golang.org/genai"
client, err := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: apiKey,
Backend: genai.BackendGeminiAPI,
})
2.2.2 Vertex AI 客户端
要使用 Vertex AI,需要配置项目和位置。可以通过以下代码创建客户端:
client, err := genai.NewClient(ctx, &genai.ClientConfig{
Project: project,
Location: location,
Backend: genai.BackendVertexAI,
})
2.2.3 使用环境变量
你也可以通过设置环境变量来简化配置过程。例如:
- Gemini Developer API:
export GOOGLE_GENAI_USE_VERTEXAI=false
export GOOGLE_API_KEY={YOUR_API_KEY}
- Gemini API on Vertex AI:
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT={YOUR_PROJECT_ID}
export GOOGLE_CLOUD_LOCATION={YOUR_LOCATION}
然后,可以通过以下代码创建客户端:
client, err := genai.NewClient(ctx, &genai.ClientConfig{})
3. 使用
通过上述下载了go-genai后,在实际使用的话可能会遇到网络问题,可以通过我下面用到的方法来解决。
在下载了go-genai后 cd 到 go-genai\examples\chat_stream有两个对话示例,配置好apikey后运行go run chat_stream.go你会发现控制台输出如下报错:
error sending request: Post "https://generativelanguage.googleapis.com//v1beta/models/gemini-2.0-flash:generateContent": dial tcp 64.233.187.95:443: i/o timeout
这大概是由于网络防火墙导致连接失败,可以通过配置代理来解决。
3.1. 使用代理:
我用的vpn工具的端口是7890,所以配置如下:
proxyUrl, _ := url.Parse("http://127.0.0.1:7890") // 换成你的代理地址
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
}
// resp, err := client.Post(...)
具体到go-genai,可以参考下面的代码:
在NewClient方法中新建一个http.Client对象,并设置代理。其余代码保持不变
proxyURL, err := url.Parse("http://127.0.0.1:7890") // 确保这是你正确的代理地址
if err != nil {
log.Fatalf("Error parsing proxy URL: %v", err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
httpClientWithProxy := &http.Client{
Transport: transport,
Timeout: 60 * time.Second, // 建议给流式传输设置稍长一些的超时
}
client, err := genai.NewClient(ctx, &genai.ClientConfig{
HTTPClient: httpClientWithProxy,
})
...[官方示例代码]..
重新运行go run chat_stream.go,结果如下:
Calling GeminiAPI Backend...
Result text: 1
Result text: + 2
Result text: = 3
Result text: The
Result text: previous result was 3. Adding 1 to that gives you 4.
3.2 配置变量优化
在官方示例中,如果不做代码变动的话只能通过 go run 命令来启动,但是一般情况下,我是想通过debug来了解每一步做了啥,所以对官方的示例做了如下修改:
- 首先就是删掉
//go:build ignore_vet注释,确保vscode上可以正常启动; - 其次就是配置变量的读取,这里我添加了如下代码,确保可以读取
.env文件中的变量,这样就不需要设置系统变量了;
// 加载 .env 文件
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
4.小结
以上就是我本地运行go-genai中的一些实践体验,希望这篇文章能帮助你了解 Google Gen AI Go SDK 的使用方法,上面涉及到的代码可以到 demo_for_AI 仓库查看。