Uso de la API de Ollama en Golang
 Tutoriales prácticos sobre IAPublicado hace 8 meses Círculo de intercambio de inteligencia artificial 22K 00
Este artículo describe cómo utilizar la función Ollama Este documento está diseñado para ayudar a los desarrolladores a ponerse al día y aprovechar al máximo las capacidades de Ollama. Ollama en sí está desarrollado en el lenguaje Golang, y el código de interfaz para la versión en lenguaje Golang está disponible en el directorio del repositorio oficial en https://github.com/ollama/ollama/tree/main/api, y en la documentación oficial en La documentación oficial está disponible en https://pkg.go.dev/github.com/ollama/ollama/api. Estudiando este documento, podrá integrar fácilmente Ollama en sus proyectos.
El repositorio oficial https://github.com/ollama/ollama/tree/main/api/examples提供了一些示例代 código, y el código a continuación referencias y modifica estos ejemplos. Todos los ejemplos están disponibles en el
notebook/C4/Golang_API_examplemedio
Preparación medioambiental
Antes de empezar, asegúrese de que su entorno de desarrollo cumple las siguientes condiciones:
- Entorno de desarrollo Golang, a través dego versionCompruebe la versión de golang, la versión utilizada en este artículo esgo1.23.6Referencia https://golang.google.cn/doc/install进行安装 
- Crear un directorio de proyecto e inicializarlo
mkdir ollama-demo && cd ollama-demo
go mod init ollama-demo
- Instalación de dependencias
go get github.com/ollama/ollama/api
Utilización
Crear un catálogochatcrear un fichero en el catálogomain.goque dice lo siguiente (el ejemplo utiliza el modelo 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)
}
}
estar en movimiento go run chat/main.go
salida de streaming
Crear un catálogogenerate-streamingcrear un fichero en el catálogomain.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()
}
estar en movimiento go run generate-streaming/main.go
Salida estructurada
Crear un catálogostructured_outputcrear un fichero en el catálogomain.goLos siguientes
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)
}
}
EspecificandoChatRequestsolicitadoFormat: []byte("json"), que permite que el modelo devuelva datos estructurados, que luego pueden pasarse a través del parámetrojson.UnmarshalAnaliza los datos devueltos.
estar en movimiento go run structured_output/main.go Se puede obtener el siguiente resultado:
{"capital": "Washington, D.C.", "population": 3.672e6, "area": 7.058e6}
首都: Washington, D.C.,人口: 3672000.000000,面积: 7058000.000000© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial  Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...





 Español
Español  简体中文
简体中文  English
English  日本語
日本語  한국어
한국어  Русский
Русский