0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellだけで試すOllama HTTP API入門:/apiとOpenAI互換/v1を実測で確認

0
Posted at

はじめに

OllamaはローカルLLMの実行環境として手軽だが、GUIやCLIだけでなく HTTP API も提供している。この記事では、PowerShell 5.1の Invoke-RestMethod だけを使い、追加ツールなしでOllamaのAPIを触ってみた結果をまとめる。ネイティブの /api 系と、OpenAI互換の /v1 系の両方を確認する。

環境

  • Windows 11(ビルド 10.0.26200)
  • PowerShell 5.1
  • Ollama 0.40.4(公式アプリ。サーバーは既定の http://127.0.0.1:11434)
  • モデル: qwen2.5:0.5b(検証用の小型モデル)

やったこと

1. バージョンと疎通確認

(Invoke-RestMethod http://127.0.0.1:11434/api/version).version

実行結果:

0.40.4

2. モデル一覧を取得する(/api/tags)

(Invoke-RestMethod http://127.0.0.1:11434/api/tags).models |
  Select-Object name, size

実行結果(抜粋):

name              size
----              ----
qwen2.5:0.5b  397821319
(ほか3モデル)

size はバイト単位。/api/ps ではなく /api/tags が「ディスク上にあるモデル一覧」である点に注意。

3. テキスト生成(/api/generate)

stream を false にすると、生成が終わってからJSONが一括で返る。

$body = @{
  model  = "qwen2.5:0.5b"
  prompt = "Reply with exactly: connection-ok"
  stream = $false
  options = @{ num_predict = 24 }
} | ConvertTo-Json -Depth 5

$r = Invoke-RestMethod -Uri http://127.0.0.1:11434/api/generate `
  -Method Post -Body $body -ContentType "application/json; charset=utf-8" -TimeoutSec 120

$r.response

実行結果:

connection-ok

応答には生成結果のほか、eval_count(生成トークン数)や total_duration(ナノ秒)などの統計も含まれる。実測では初回リクエストの total_duration が約30秒だった。これは小型モデルでもモデルのロード時間が含まれるためで、2回目以降は大幅に短くなる。

4. OpenAI互換エンドポイント(/v1)

OpenAI APIのクライアントでおなじみの形式も提供されている。

# モデル一覧
(Invoke-RestMethod http://127.0.0.1:11434/v1/models).data.id

# チャット補完
$body = @{
  model      = "qwen2.5:0.5b"
  messages   = @(@{ role = "user"; content = "What is 1+1? Answer with just the number." })
  max_tokens = 16
} | ConvertTo-Json -Depth 5

$r = Invoke-RestMethod -Uri http://127.0.0.1:11434/v1/chat/completions `
  -Method Post -Body $body -ContentType "application/json; charset=utf-8" -TimeoutSec 120

$r.choices[0].message.content
$r.usage.completion_tokens

実行結果:

1+1=2
6

/v1 系は max_tokens、messages[].role などOpenAI互換のフィールド名でやり取りできる。Ollama用のクライアントを書くときに、既存のOpenAIクライアントを流用したい場合はこちらが便利だ。

ハマった点

  1. JSONボディの日本語や記号は charset=utf-8 を明示する。-ContentType "application/json; charset=utf-8" を付けておくと、環境依存の文字化けトラブルを避けやすい。
  2. ConvertTo-Json の -Depth に注意。messages のようなネストした配列を含むボディは、既定の深さ(2)だと正しく変換されない。-Depth 5 を付けておくと安全。
  3. 初回リクエストは遅い。モデルのロードが発生するため、Invoke-RestMethod 側のタイムアウトを短くしすぎないこと。実測では検証用の0.5Bモデルでも初回に約30秒かかった。
  4. stream の既定値は true。/api/generate はストリーミングが既定なので、一括取得したいときは stream = $false を明示する。

まとめ

  • Ollamaは追加ライブラリなしで、PowerShellからHTTP APIを直接叩ける。
  • /api 系(ネイティブ)と /v1 系(OpenAI互換)の両方が利用可能。
  • ポイントは「charset=utf-8」「ConvertTo-Json -Depth」「初回ロード時間」の3つ。

次にAPIで遊ぶなら、stream = $true のストリーミング表示や、/api/chat での会話履歴の扱いに進むとおもしろい。

関連する本

この記事で扱ったAPIの続き(ストリーミング、VRAM、定時実行、運用)を一冊にまとめました。第1章・第2章は無料で読めます。

Windowsで動かすローカルLLM自動化:Ollama実測ガイド

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?