GO中使用谷歌GEMINI模型任务代码实例

 更新时间:2024年01月11日 15:42:10   作者:岱军 云云众生s  
这篇文章主要为大家介绍了GO中使用谷歌GEMINI模型任务代码实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Go SDK 快速入门

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

https://github.com/google/generative-ai-go

其包文档在

https://pkg.go.dev/github.com/google/generative-ai-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 对象的形式输出。其中重要的部分是:

"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 的一个很棒之处在于您几乎不需要更改代码!唯一的更改是导入行,从:

"github.com/google/generative-ai-go/genai"

修改为:

"cloud.google.com/go/vertexai/genai"

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

client, err := genai.NewClient(ctx, os.Getenv("GCP_PROJECT_ID"), "us-central1")

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

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

tips:本文所有示例的完整代码 - 包括示例图像 - 可在 GitHub 上找到,相应链接已在文中相应位置~

以上就是GO中使用谷歌GEMINI模型任务代码实例的详细内容,更多关于GO使用谷歌GEMINI模型的资料请关注脚本之家其它相关文章!

相关文章

  • golang 对象深拷贝的常见方式及性能

    golang 对象深拷贝的常见方式及性能

    这篇文章主要介绍了golang 对象深拷贝的常见方式及性能,Go语言中所有赋值操作都是值传递,如果结构中不含指针,则直接赋值就是深度拷贝,文章围绕主题展开更多相关资料,需要的小伙伴可以参考一下
    2022-06-06
  • Golang 实现Socket服务端和客户端使用TCP协议通讯

    Golang 实现Socket服务端和客户端使用TCP协议通讯

    这篇文章主要介绍了Golang 实现Socket服务端和客户端使用TCP协议通讯,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang学习之反射机制的用法详解

    Golang学习之反射机制的用法详解

    反射的本质就是在程序运行的时候,获取对象的类型信息和内存结语构,反射是把双刃剑,功能强大但可读性差。本文将详细讲讲Golang中的反射机制,感兴趣的可以了解一下
    2022-06-06
  • Golang常用环境变量说明与设置详解

    Golang常用环境变量说明与设置详解

    这篇文章主要介绍了Golang常用环境变量说明与设置,需要的朋友可以参考下
    2020-02-02
  • 一文详解go mod依赖管理详情

    一文详解go mod依赖管理详情

    这篇文章主要介绍了一文详解go mod依赖管理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • go格式“占位符”输入输出 类似python的input

    go格式“占位符”输入输出 类似python的input

    这篇文章主要介绍了go格式“占位符”, 输入输出,类似python的input,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • goland -sync/atomic原子操作小结

    goland -sync/atomic原子操作小结

    这篇文章主要介绍了goland -sync/atomic原子操作,原子操作能够保证执行期间是连续且不会被中断(变量不会被其他修改,mutex可能存在被其他修改的情况),本文给大家介绍的非常详细,需要的朋友参考下
    2022-08-08
  • Go 常量基础概念(声明更改只读)

    Go 常量基础概念(声明更改只读)

    这篇文章主要为大家介绍了Go常量基础概念包括常量的声明更改只读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 一文带你深入理解Golang中的泛型

    一文带你深入理解Golang中的泛型

    Go 在泛型方面一直被诟病,因为它在这方面相对比较落后。但是,在 Go 1.18 版本中,泛型已经被正式引入,成为了 Go 语言中一个重要的特性。本文将会详细介绍 Go 泛型的相关概念,语法和用法,希望能够帮助大家更好地理解和应用这一特性
    2023-05-05
  • Golang 中 omitempty的作用

    Golang 中 omitempty的作用

    这篇文章主要介绍了Golang 中 omitempty的作用,文章围绕主题展开详细的内容介绍,具有一定的参考一下,需要的小伙伴可以参考一下
    2022-07-07

最新评论