GO中使用谷歌GEMINI模型任務代碼實例
Go SDK 快速入門
Google 最近通過 API 免費提供了其最新的多模態(tài) LLMs 家族,同時還發(fā)布了慷慨的免費套餐。Google 還在多種流行的編程語言中發(fā)布了 SDK,包括 Go 語言。這篇文章是如何使用 Go SDK 快速入門,以向模型提出混合文本和圖像的問題的概述。
譯自Using Gemini models from Go。作者 Eli Bendersky 。
任務
我們將要求模型解釋兩張龜的圖像之間的區(qū)別,這張:
和這張:
使用 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 是多模態(tài)的,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"
然后更改創(chuàng)建客戶端的方式,因為身份驗證是不同的。對于 Vertex,應該像這樣創(chuàng)建客戶端:
client, err := genai.NewClient(ctx, os.Getenv("GCP_PROJECT_ID"), "us-central1")
其中GCP_PROJECT_ID
是具有您的 GCP 項目的 env 變量,位置/區(qū)域可以根據您的偏好進行設置。其余代碼保持完全相同!
有兩個 SDK 是因為兩個產品提供的功能在某些情況下可能有所不同。例如,GCP 的 SDK 可能允許您直接從存儲桶或數據庫表中讀取數據。
tips:本文所有示例的完整代碼 - 包括示例圖像 - 可在 GitHub 上找到,相應鏈接已在文中相應位置~
以上就是GO中使用谷歌GEMINI模型任務代碼實例的詳細內容,更多關于GO使用谷歌GEMINI模型的資料請關注腳本之家其它相關文章!
相關文章
Golang中基礎的命令行模塊urfave/cli的用法說明
這篇文章主要介紹了Golang中基礎的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Linux中Go環(huán)境配置和GoModule常用操作
這篇文章主要介紹了Linux中Go環(huán)境配置和GoModule,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01goland Duration 和time的區(qū)別說明
這篇文章主要介紹了goland Duration 和time的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12GoLang的sync.WaitGroup與sync.Once簡單使用講解
sync.WaitGroup類型,它比通道更加適合實現這種一對多的goroutine協作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時,與之前提到的同步工具一樣,它一旦被真正的使用就不能被復制了2023-01-01