Google Gen AI Go SDK 接入指南

684 阅读3分钟

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-genaicdgo-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 仓库查看。