在Go中使用谷歌Gemini AI模型


Google 最近通过 API提供了最新的多模式法学硕士系列, 并提供慷慨的免费套餐。谷歌还发布了多种流行编程语言的 SDK,其中包括 Go。

这篇文章简要概述了如何开始使用 Go SDK 来询问混合文本与图像的模型问题。

问题:解释两张海龟图像之间的差异


使用谷歌AI SDK

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 对象。重要的部分是:

"Content": { 
 
"Parts": [ 
   
"第一张图片是乌龟,是一种爬行动物,其特征是
    坚硬的外壳。第二张图片是海龟,是一种爬行动物,其
    特征是有鳍状肢和流线型的外壳。乌龟是
    陆生动物,而海龟是海洋动物。乌龟的
    外壳是圆顶的,而海龟的外壳
    是扁平的。乌龟的皮肤很厚,有鳞片,而海龟的皮肤光滑,有皮革。乌龟的
    腿短,有爪子,海龟的鳍状肢很长。
    乌龟的新陈代谢很慢,可以活100多年,而
    海龟的新陈代谢更快,通常可以活50
    年左右。” 
  ],
   
"Role": "model"
},

本文中所有示例的完整代码以及示例图像均可在 GitHub 上找到