ホーム > AI > ローカルのOpen WebUI APIをコマンドラインから使う方法
AI

ローカルのOpen WebUI APIをコマンドラインから使う方法

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

Open WebUI は、Web ブラウザからの利用だけでなく、コマンドラインから API を使って直接やり取りすることも可能です。この記事では、実際に Docker で起動した Open WebUI の API を使って、ターミナルから質問を投げて回答を得る方法を詳しく解説します。

前提条件

  • Docker を使って環境構築が完了し、ローカルの URL にアクセスすると表示ができる
  • localhost:3000を使用
  • ollamaでモデルを PULL している

Open WebUI の起動確認

docker ps

実行結果の例:

CONTAINER ID   IMAGE                                COMMAND           CREATED       STATUS                 PORTS                    NAMES
67426e250958   ghcr.io/open-webui/open-webui:main   "bash start.sh"   2 hours ago   Up 2 hours (healthy)   0.0.0.0:3000->8080/tcp   open-webui

自分は、http://localhost:3000にアクセスすると接続ができる状態で、エンドポイントのベース URL がこれになります。

API トークンの取得方法

  1. 右上のアイコン
  2. 設定
  3. アカウント
  4. API キー、表示
  5. JWT トークンをコピー

この JWT トークンを使います。

利用可能なモデルの確認方法

API を使う前に、どのようなモデルが利用可能かを確認しましょう。

GUI で確認する場合

チャット画面を開いて、チャットの左上にモデルが表示されており、そこをクリックするとモデル選択ができるので、そこで一覧を見ることができます。

コマンドで確認する場合

curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:3000/api/models

YOUT_TOKENの部分に、先ほどコピーした JWT トークンを貼り付けてください。ローカルホストの URL が違う場合、任意のポートに変更してください。

API を使った基本的な質問

ここまでで事前準備は完了です。

実際に API を使って質問してみましょう。

基本的なリクエスト

curl -X POST http://localhost:3000/api/chat/completions \
-H "Content-Type: application/json" \
-H "Cookie: token=YOUR_JWT_TOKEN" \
-d '{
  "model": "your_model_name",
  "messages": [
    {
      "role": "user",
      "content": "こんにちは"
    }
  ]
}'

YOUR_JWT_TOKENには、JWT トークンをペーストしてください。

your_model_nameには、あなたが使いたいモデルを指定してください。

ナレッジベースで作成した、カスタムモデルも使用可能です。

適当に作った「テスト」という名前のモデル名でも動きました。

レスポンスの例

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "こんにちは!何かお手伝いできることはありますか?"
      }
    }
  ]
}

ダメだった例

ドキュメントには以下のようにやれば動きそうな感じがしたのですが、

curl -X POST http://localhost:3000/api/chat/completions -H "Authorization: Bearer my-jwt-token" -H "Content-Type: application/json" -d '{"model": "テスト", "messages": [{"role": "user", "content": "こんにちは"}]}'
{"detail":"401 Unauthorized"}

うまくいきませんでした。なんでやねん。

上手くいかなかったのは仕方ないので、ブラウザで Network タブを調べた結果、Cookie を利用して POST してそうな感じだったので、Cookie ベースでトークンを送信したらうまくいったという流れです。

僕だけでしょうか。誰かの参考になれば幸いです。

参考リンク

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。