AIパーソナル・ラーニング
と実践的なガイダンス
ビーンバッグ・マースコード1

GolangでOllama APIを使う

この記事では オーラマ Ollama自体はGolang言語で開発されており、Golang言語版のインターフェース・コードは公式リポジトリ・ディレクトリ https://github.com/ollama/ollama/tree/main/api に、公式ドキュメントは https://github.com/ollama/ollama/tree/main/api にあります。公式ドキュメントは https://pkg.go.dev/github.com/ollama/ollama/api にあります。このドキュメントを学ぶことで、Ollama をあなたのプロジェクトに簡単に統合することができます。

公式リポジトリhttps://github.com/ollama/ollama/tree/main/api/examples提供了一些示例代、以下のコードはこれらのサンプルを参照し、修正したものです。すべてのサンプルはノートブック/C4/Golang_API_example真ん中

 

環境準備

作業を始める前に、開発環境が以下の条件を満たしていることを確認してください:

  1. Golang開発環境は碁バージョンgolangのバージョンをチェックしてください。go1.23.6

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

  2. プロジェクト・ディレクトリを作成し、初期化する
复制复制复制复制复制复制复制
复制
mkdir ollama-demo && cd ollama-demo
go mod init ollama-demo
  1. 依存関係のインストール
复制复制复制复制复制复制
复制
github.com/ollama/ollama/apiを取得する。

 

使用方法

カタログの作成おしゃべりカタログにファイルを作成するmain.goこの例ではdeepseek-r1:7bモデルを使用している):

复制复制复制复制复制
复制
パッケージ main
インポート (
"context"
"fmt"
"ログ"
"github.com/ollama/ollama/api"
)
func main() {
client, err := api.ClientFromEnvironment()
if err != nil
log.Fatal(err)
Fatal(err) } とする。
messages := []api.Message{
api.Message{
役割:"ユーザー"
Content: "なぜ空は青いの?",
},
}
ctx := context.Background()
req := &api.ChatRequest{
モデル: "ディープシークR1:7b".
メッセージ:メッセージ、
}
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)
}
}

うごきだす go run chat/main.go

 

ストリーミング出力

カタログの作成ジェネレート・ストリーミングカタログにファイルを作成するmain.go

复制复制复制复制
复制
パッケージ main
インポート (
"context"
"fmt"
"ログ"
"github.com/ollama/ollama/api"
)
func main() {
client, err := api.ClientFromEnvironment()
if err != nil
log.Fatal(err)
Fatal(err)
// デフォルトでは、GenerateRequestはストリーミングです。
req := &api.GenerateRequest{
モデル:"deepseek-r1:7b"
プロンプト:"なぜ空は青いのか?",
}
ctx := context.Background()
respFunc := func(resp api.GenerateResponse) error { // レスポンスだけを表示する。
// GenerateResponseには、調べたい他の // 興味深いフィールドが多数ある。
GenerateResponse には、調べたい他の // 興味深いフィールドが多数ある。
ストリーミング・モードでは、レスポンスは部分的であるため、 // fmt.Printを呼び出す(Printlnではなく)。
偽の改行が挿入されるのを避けるために、 // Print(Printlnではなく)を呼び出します。
// モデルは、必要であれば、それ自身の改行を挿入します。
fmt.Print(resp. レスポンス)
fmt.Print(resp. レスポンス) return nil
fmt.Print(resp. Response) return nil }.
err = client.Generate(ctx, req, respFunc)
if err != nil
log.Fatal(err)
}
fmt.Println()
}

うごきだす generate-streaming/main.goを実行する


 

構造化出力

カタログの作成構造化出力カタログにファイルを作成するmain.go以下の通りである。

复制复制复制
复制
パッケージ main
インポート (
"context"
"エンコーディング/json"
"fmt"
"ログ"
"文字列"
"github.com/ollama/ollama/api"
)
タイプ CountryInfo struct {
首都 string `json: "capital"`
人口 float64 `json: "population"`
面積 float64 `json: "area"`
}
func main() {
client, err := api.ClientFromEnvironment()
if err != nil
log.Fatal(err)
Fatal(err) } とする。
messages := []api.Message{
api.Message{
役割:"ユーザー
Content: "アメリカ合衆国の首都、人口、国土面積に関する情報を提示し、JSON形式で返してください。",
}
}
ctx := context.Background()
req := &api.ChatRequest{。
Model: "deepseek-r1:7b"、
メッセージ: messages, }
Stream: new(bool), // false
Format: []byte(`"json"`), // false, Stream: new(bool), // false
オプション: map[string]interface{}{
"temperature": 0.0, // false
}, }

respFunc := func(resp api.ChatResponse) error { {.
fmt.Printf("%sn", strings.TrimSpace(resp.Message.Content))
var info CountryInfo
err := json.Unmarshal([]byte(resp.Message.Content), &info)
if err != nil
log.Fatal(err)
}
fmt.Printf("Capital: %s, Population: %f, Area: %f", info.Capital, info.Population, info.Area)
return nil
}
err = client.Chat(ctx, req, respFunc)
if err != nil
log.Fatal(err)
}
}

を指定する。チャットリクエスト依頼済みフォーマット: []byte("json"), このパラメータは、モデルが構造化されたデータを返すことを可能にします。json.Unmarshal返されたデータを解析する。

うごきだす go run structured_output/main.go 次のような出力が得られる:

复制复制
复制
{"capital": "Washington, D.C.", "population": 3.672e6, "area": 7.058e6} {"capital": "Washington, D.C.", "population": 3.672e6, "area": 7.058e6
首都:ワシントンD.C.、人口:3672000.000000、面積:7058000.000000
シーディーエヌワン
無断転載を禁じます:チーフAIシェアリングサークル " GolangでOllama APIを使う

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語