GO中使用谷歌GEMINI模型

Google 最近通过 API 免费提供了其最新的多模态 LLMs 家族,同时还发布了慷慨的免费套餐。Google 还在多种流行的编程语言中发布了 SDK,包括 Go 语言。 这篇文章是如何使用 Go SDK 快速入门,以向模型提出混合文本和图像的问题的概述。

译自Using Gemini models from Go。作者 Eli Bendersky 。

任务

我们将要求模型解释两张龟的图像之间的区别,这张:

和这张:

使用 Google AI SDK

使用 Google AI SDK,您只需生成一个 API 密钥(与 OpenAI 的 API 类似)即可访问模型。Go SDK 位于github.com/google/gene...pkg.go.dev/github.com/...

以下是我们任务的代码:

go 复制代码
package main

import (
  "context"
  "encoding/json"
  "fmt"
  "log"
  "os"

  "github.com/google/generative-ai-go/genai"
  "google.golang.org/api/option"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
  if err != nil {
    log.Fatal(err)
  }
  defer client.Close()

  model := client.GenerativeModel("gemini-pro-vision")

  imgData1, err := os.ReadFile("../images/turtle1.png")
  if err != nil {
    log.Fatal(err)
  }

  imgData2, err := os.ReadFile("../images/turtle2.png")
  if err != nil {
    log.Fatal(err)
  }

  prompt := []genai.Part{
    genai.ImageData("png", imgData1),
    genai.ImageData("png", imgData2),
    genai.Text("Describe the difference between these two pictures, with scientific detail"),
  }
  resp, err := model.GenerateContent(ctx, prompt...)

  if err != nil {
    log.Fatal(err)
  }

  bs, _ := json.MarshalIndent(resp, "", "    ")
  fmt.Println(string(bs))
}

由于 LLM API 是多模态的,SDK 提供了像 genai.ImageData 和 genai.Text 这样的辅助类型,以一种类型安全的方式包装输入。当我们运行此示例时,模型的响应会以 JSON 对象的形式输出。其中重要的部分是:

css 复制代码
"Content": {
  "Parts": [
    "The first picture is of a tortoise, which is a reptile characterized by
    its hard shell. The second picture is of a sea turtle, which is a reptile
    characterized by its flippers and streamlined shell. Tortoises are
    terrestrial animals, while sea turtles are marine animals. Tortoises have
    a domed shell, while sea turtles have a flattened shell. Tortoises have
    thick, scaly skin, while sea turtles have smooth, leathery skin. Tortoises
    have short legs with claws, while sea turtles have long flippers.
    Tortoises have a slow metabolism and can live for over 100 years, while
    sea turtles have a faster metabolism and typically live for around 50
    years."
  ],
  "Role": "model"
},

好的,现在我们知道了!

使用 GCP Vertex SDK

如果您是 GCP 的客户,并且已经设置了 GCP 项目的计费等其他事项,您可能想使用 Vertex Go SDK。 Go SDK 的一个很棒之处在于您几乎不需要更改代码!唯一的更改是导入行,从:

arduino 复制代码
"github.com/google/generative-ai-go/genai"

修改为:

arduino 复制代码
"cloud.google.com/go/vertexai/genai"

然后更改创建客户端的方式,因为身份验证是不同的。对于 Vertex,应该像这样创建客户端:

css 复制代码
client, err := genai.NewClient(ctx, os.Getenv("GCP_PROJECT_ID"), "us-central1")

其中GCP_PROJECT_ID是具有您的 GCP 项目的 env 变量,位置/区域可以根据您的偏好进行设置。其余代码保持完全相同!

有两个 SDK 是因为两个产品提供的功能在某些情况下可能有所不同。例如,GCP 的 SDK 可能允许您直接从存储桶或数据库表中读取数据。

代码

本文所有示例的完整代码 - 包括示例图像 - 可在 GitHub 上找到

本文在云云众生yylives.cc/)首发,欢迎大家访问。

相关推荐
阿拉斯攀登几秒前
20 个 Android JNI + CMake 生产级示例
android·java·开发语言·人工智能·机器学习·无人售货柜
xixixi77777几秒前
AI驱动安全变革:Axios零交互劫持云元数据+CVE-2026-40175,Claude Mythos加速至小时级,攻防不对称重构安全架构
人工智能·5g·ai·claude·攻击·多模态·安全架构
MRDONG11 分钟前
从 Prompt 到智能体系统:Function Calling、Memory 与 Synthetic RAG 的全栈解析
人工智能·深度学习·神经网络·语言模型·自然语言处理·prompt
Deepoch2 分钟前
基于 VLA 边缘计算的除草机器人自主作业技术研究
人工智能·开发板·具身模型·deepoc·除草机器人
ws2019075 分钟前
智行未来,驱动变革:AUTO TECH China 2026 广州汽车技术展蓄势待发
人工智能·科技·汽车
小超同学你好6 分钟前
OpenClaw 深度解析与源代码导读 · 第2篇:Skills——能力扩展平面与源码中的「目录即技能」
人工智能·语言模型
空中湖6 分钟前
光计算:用“光“代替“电“,AI算力的下一场革命
人工智能
小江的记录本6 分钟前
【 AI工程化】AI工程化:MLOps、大模型全生命周期管理、大模型安全(幻觉、Prompt注入、数据泄露、合规)
java·人工智能·后端·python·机器学习·ai·架构
quetalangtaosha7 分钟前
Anomaly Detection系列(CVPR2025 TailedCore论文解读)
人工智能·计算机视觉
Flying pigs~~7 分钟前
企业级模块化RAG项目(mysql➕redis➕milvus➕模型微调➕bm25➕fastapi➕ollama➕Prompt➕多策略选择)
人工智能·redis·mysql·docker·prompt·milvus·rag