AI Personal Learning
und praktische Anleitung
TRAE

Verwendung der Ollama API in Golang

Dieser Artikel beschreibt, wie man die Ollama Dieses Dokument soll Entwicklern helfen, sich einzuarbeiten und die Möglichkeiten von Ollama voll auszuschöpfen. Ollama selbst wird in der Sprache Golang entwickelt, und der Schnittstellencode für die Golang-Sprachversion ist im offiziellen Repository-Verzeichnis unter https://github.com/ollama/ollama/tree/main/api verfügbar, und die offizielle Dokumentation ist unter Die offizielle Dokumentation finden Sie unter https://pkg.go.dev/github.com/ollama/ollama/api. Wenn Sie dieses Dokument studieren, können Sie Ollama leicht in Ihre Projekte integrieren.

Das offizielle Repository https://github.com/ollama/ollama/tree/main/api/examples提供了一些示例代 Code, und der unten stehende Code verweist auf diese Beispiele und ändert sie. Alle Beispiele sind verfügbar in dernotebook/C4/Golang_API_exampleMitte

 

Vorbereitung der Umwelt

Bevor Sie beginnen, stellen Sie sicher, dass Ihre Entwicklungsumgebung die folgenden Bedingungen erfüllt:

  1. Golang-Entwicklungsumgebung, über diego versionÜberprüfen Sie die Golang-Version, die in diesem Artikel verwendete Version istgo1.23.6

    Referenz https://golang.google.cn/doc/install进行安装

  2. Erstellen Sie ein Projektverzeichnis und initialisieren Sie es
mkdir ollama-demo && cd ollama-demo
go mod init ollama-demo
  1. Installation von Abhängigkeiten
go get github.com/ollama/ollama/api

 

Verwendung

Einen Katalog erstellenchateine Datei im Katalog anlegenmain.godie wie folgt lautet (das Beispiel verwendet das Modell deepseek-r1:7b):

package main
import (
"context"
"fmt"
"log"
"github.com/ollama/ollama/api"
)
func main() {
client, err := api.ClientFromEnvironment()
if err != nil {
log.Fatal(err)
}
messages := []api.Message{
api.Message{
Role:    "user",
Content: "为什么天空是蓝色的?",
},
}
ctx := context.Background()
req := &api.ChatRequest{
Model:    "deepseek-r1:7b",
Messages: messages,
}
respFunc := func(resp api.ChatResponse) error {
fmt.Print(resp.Message.Content)
return nil
}
err = client.Chat(ctx, req, respFunc)
if err != nil {
log.Fatal(err)
}
}

in Bewegung sein go run chat/main.go

 

Streaming-Ausgang

Einen Katalog erstellengenerate-streamingeine Datei im Katalog anlegenmain.go

package main
import (
"context"
"fmt"
"log"
"github.com/ollama/ollama/api"
)
func main() {
client, err := api.ClientFromEnvironment()
if err != nil {
log.Fatal(err)
}
// By default, GenerateRequest is streaming.
req := &api.GenerateRequest{
Model:  "deepseek-r1:7b",
Prompt: "为什么天空是蓝色的?",
}
ctx := context.Background()
respFunc := func(resp api.GenerateResponse) error {
// Only print the response here; GenerateResponse has a number of other
// interesting fields you want to examine.
// In streaming mode, responses are partial so we call fmt.Print (and not
// Println) in order to avoid spurious newlines being introduced. The
// model will insert its own newlines if it wants.
fmt.Print(resp.Response)
return nil
}
err = client.Generate(ctx, req, respFunc)
if err != nil {
log.Fatal(err)
}
fmt.Println()
}

in Bewegung sein go run generate-streaming/main.go


 

Strukturierte Ausgabe

Einen Katalog erstellenstructured_outputeine Datei im Katalog anlegenmain.goDie folgenden

package main
import (
"context"
"encoding/json"
"fmt"
"log"
"strings"
"github.com/ollama/ollama/api"
)
type CountryInfo struct {
Capital    string  `json:"capital"`
Population float64 `json:"population"`
Area       float64 `json:"area"`
}
func main() {
client, err := api.ClientFromEnvironment()
if err != nil {
log.Fatal(err)
}
messages := []api.Message{
api.Message{
Role:    "user",
Content: "请介绍美国的首都、人口、占地面积信息,并以 JSON 格式返回。",
},
}
ctx := context.Background()
req := &api.ChatRequest{
Model:    "deepseek-r1:7b",
Messages: messages,
Stream:   new(bool), // false
Format:   []byte(`"json"`),
Options: map[string]interface{}{
"temperature": 0.0,
},
}
respFunc := func(resp api.ChatResponse) error {
fmt.Printf("%s\n", strings.TrimSpace(resp.Message.Content))
var info CountryInfo
err := json.Unmarshal([]byte(resp.Message.Content), &info)
if err != nil {
log.Fatal(err)
}
fmt.Printf("首都: %s,人口: %f,面积: %f", info.Capital, info.Population, info.Area)
return nil
}
err = client.Chat(ctx, req, respFunc)
if err != nil {
log.Fatal(err)
}
}

Durch die Angabe vonChatRequestangefordertFormat: []byte("json"), Parameter, der es dem Modell ermöglicht, strukturierte Daten zurückzugeben, die dann durch denjson.UnmarshalAnalysiert die zurückgegebenen Daten.

in Bewegung sein go run structured_output/main.go Die folgende Ausgabe kann erhalten werden:

{"capital": "Washington, D.C.", "population": 3.672e6, "area": 7.058e6}
首都: Washington, D.C.,人口: 3672000.000000,面积: 7058000.000000
Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " Verwendung der Ollama API in Golang
de_DEDeutsch