技術ノートへ戻る
ai
MistralOpen WebUIPython

OpenWebUIでのMistralエージェント(API経由でパイプ)

OpenWebUIにパイプ(関数)をインポートし、API経由でMistralエージェントを使用するための詳細なスニペット。

このpipeは、Mistral APIを呼び出すことで、OpenWebUI内でネイティブのMistral AIエージェントをサポートします。

Mistralコンソールで作成されたエージェントを選択し、OpenWebUIインスタンスから直接チャットできるようになります。

機能

  • MistralエージェントAPI (/v1/agents/completions) との直接統合。
  • ストリーミング応答のサポート。
  • バルブを通じた簡単な設定(インポート後にコードを編集する必要はありません)。
  • Mistralコンソールで作成されたすべてのエージェント(ツール、指示、ナレッジベースなど)で動作します。

前提条件

  • Mistral APIにアクセスできるアカウント。
  • 有効なMISTRAL_API_KEYhttps://console.mistral.ai/で取得できます)。
  • 既存のエージェント(AGENT_IDバルブに入力するためのエージェントIDが必要です。通常、ag_で始まります)。
  • OpenWebUIインスタンスで関数をインポート/編集する権限。

エージェントIDの取得方法

  1. https://console.mistral.ai/build/agentsにアクセスします。
  2. エージェントを作成(または開く)します。
  3. エージェントIDをコピーします。

注:一部の場所ではag:と表示される場合がありますが、このパイプは文字列値を期待しており、最も一般的な形式はag_...です。

OpenWebUIへのインポート方法

通常、2つのオプションがあります:

オプションA:OpenWebUIページからインポート

公式の関数投稿(ワンクリックインポート)を使用します:

https://openwebui.com/posts/mistral_agents_integration_pipe_42bce620

OpenWebUIで:

  1. 上記のページを開きます。
  2. インポートをクリックします。
  3. インポートを確認します。

オプションB:手動インポート(コピー&ペースト)

  1. OpenWebUIで、管理パネルに移動します。
  2. 関数を開きます。
  3. +(または新規)をクリックして、新しい関数/パイプを作成します。
  4. 以下のコードを貼り付けて保存します。

設定(バルブ)

インポート後、バルブを設定します(通常、歯車アイコン⚙️から):

  • MISTRAL_API_KEY:Mistral APIキー。
  • AGENT_ID:エージェントID(例:ag_...)。

コード(パイプ)

重要:

  • 実際のAPIキーをファイルにハードコードしないでください。
  • インポート後、OpenWebUIの設定でMISTRAL_API_KEYAGENT_IDをバルブに設定してください。
# title: Mistral Agents
# author: Yuri Cunha
# version: 1.0.0
# license: MIT

import requests
import json
from typing import List, Dict, Generator
from pydantic import BaseModel, Field


class Pipe:
    class Valves(BaseModel):
        MISTRAL_API_KEY: str = Field(default="")
        AGENT_ID: str = Field(
            default="ag_"
        )  # Your Agent ID aqui or put in var, please, use VAR!

    def __init__(self):
        self.type = "manifold"
        self.id = "mistral-agent"
        self.name = "mistral-agent/"
        self.valves = self.Valves()
        self.agents_endpoint = "https://api.mistral.ai/v1/agents/completions"

    def pipes(self) -> List[Dict[str, str]]:
        return [{"id": "agent", "name": f"Mistral Agent ({self.valves.AGENT_ID[:10]})"}]

    def pipe(self, body: dict) -> Generator:
        headers = {
            "Authorization": f"Bearer {self.valves.MISTRAL_API_KEY}",
            "Content-Type": "application/json",
        }

        payload = {
            "agent_id": self.valves.AGENT_ID,
            "messages": body["messages"],
            "stream": body.get("stream", False),
        }

        response = requests.post(
            self.agents_endpoint, headers=headers, json=payload, stream=True
        )

        for line in response.iter_lines():
            if line:
                yield line.decode("utf-8")

実際のAPIキーをパブリックリポジトリにコミットしないでください。本番環境では、環境変数とデプロイメントシークレットマネージャーを優先してください。

チャットでの使用方法

  1. OpenWebUIでチャットを開きます。
  2. モデル/プロバイダーのリストからmistral agent (...)パイプを選択します。
  3. 通常通りメッセージを送信します。

OpenWebUIは、body["messages"]をMistralに転送し、ロール(userassistantなど)を保持します。

重要な注意事項

  • エージェントIDとモデル:このパイプはエージェントルート(/v1/agents/completions)を使用します。これは標準のチャット完了とは異なります。
  • ツール:Mistralコンソールでエージェントにツールが設定されている場合、それらはエージェントによって自動的に適用されます。

ストリーミングに関する注意事項

  • OpenWebUIでstreamが有効になっている場合、ペイロードは"stream": trueを送信します。
  • pipeはストリーミング要求からの生の応答行(iter_lines)を生成します。

生の出力(JSON行)がレンダリングされたテキストの代わりに表示される場合は、OpenWebUIがこのパイプに対して特定のSSE/チャンク形式を期待しているかどうかを確認してください。

クイックトラブルシューティング

  • 401未認証/403禁止MISTRAL_API_KEYが空、無効、または権限が不足しています。
  • 404/無効なエージェントAGENT_IDが間違っているか、エージェントが削除されました。
  • 応答なし/タイムアウト:OpenWebUIサーバーがhttps://api.mistral.aiにアクセスできることを確認してください。
  • ストリーミングなし:OpenWebUIがリクエストボディにstream: trueを送信していることを確認してください。

参考資料