Skip to main content
CowAgent は OpenAI Chat Completions プロトコル互換のチャットエンドポイントを、Web コンソールと同じポートで提供します。OpenAI プロトコルに対応したアプリ、SDK、ワークフローからそのまま接続できます。
モデルを直接呼び出すのとは異なり、エンドポイントの背後では完全な Agent が動作します。ツール、スキル、メモリ、ナレッジベースを使ってタスクを完了し、思考過程、ツール呼び出し、トークン使用量も回答と一緒に返します。

API を有効にする

API は初期状態では無効です。有効にした後は、リクエストに API キーが必要です。

コンソールから有効にする

「設定 → 基本設定 → チャット API」でスイッチをオンにし、確認すると API キーが生成されます。エンドポイントのアドレスとコピーしてすぐ使える呼び出し例(cURL / Python / Node.js)も表示されます。
  • 再生成:新しい API キーを発行します。古いキーはすぐに無効になります
  • スイッチをオフ:API の提供を停止します。API キーは保持され、再度オンにするとそのまま使えます

設定ファイルから有効にする

config.json に次の 2 項目を設定し、サービスを再起動します:
API は Web コンソールと同じアドレスとポートを使います。デフォルトでは 127.0.0.1 のみで待ち受けるため、このマシンからしかアクセスできません。他のマシンから呼び出す場合は、Web コンソール を参照して web_host を 0.0.0.0 に設定し、ポートを開放してください。API キーはコンソールのパスワード web_password とは独立しています。

クイックスタート

以下の例はサービスがこのマシンの 9899 ポートで動作していることを前提とします。モデルも Agent も指定しないため、デフォルト Agent が自身のデフォルトモデルで回答します。

エンドポイント

認証

すべてのリクエストのヘッダーに API キーを含めます:

チャット

POST /v1/chat/completions Agent は自身のツールとシステムプロンプトを使うため、temperature、max_tokens、tools などのパラメータは無視されます。

Agent の指定

マルチエージェント を設定している場合、agent_id でどの Agent に回答させるかを指定できます。Agent ID は「エージェント」ページの名前の下に表示され、横のアイコンでコピーできます。default は常にデフォルト Agent を表します。存在しない、またはアーカイブ済みの Agent を指定すると 404 が返ります。
model はそのリクエストにのみ適用され、Agent や会話のモデル設定は変わりません。

モデル一覧

GET /v1/models 利用できるモデル、つまり「設定 → モデル設定」で設定済みのプロバイダーのチャットモデルを返します。owned_by はプロバイダーです。一覧にない model を指定すると 404 が返ります。

会話の管理

API は 2 つの会話方式に対応しています:
  • ステートレス(デフォルト):conversation_id を指定せず、通常のモデルと同じように毎回 messages 全体を送ります。最後の user メッセージが今回の入力、それ以前の user / assistant メッセージがコンテキストになります。CowAgent の会話履歴には書き込まれません。
  • ステートフル:conversation_id を指定すると、会話履歴を CowAgent が保持します。以降は新しいメッセージだけを送ればよく、messages 内の以前のメッセージは無視されます。同じ会話のリクエストは順番に 1 つずつ処理されます。
リクエスト内の system メッセージは無視され、Agent は常に自身のペルソナ、スキル、メモリを使います。どちらの方式でも、Agent はツールを通じてワークスペースとメモリファイルを読み書きできます。

レスポンス形式

非ストリーミング

標準の OpenAI レスポンスに加えて、message に思考過程とツール呼び出しの記録が含まれます:

ストリーミング

"stream": true を指定すると、標準の chat.completion.chunk を SSE で返します:
  • 回答は choices[0].delta.content
  • 思考過程は choices[0].delta.reasoning_content
  • ツール呼び出しなどのプロセスイベントはトップレベルの cow_event フィールドにあり、このとき delta は空です
  • 最後のチャンクの finish_reason は stop。stream_options.include_usage を指定した場合は、続けて choices が空で usage を含むチャンクが送られます
  • data: [DONE] で終了します
ストリームを読み取る例:

プロセスイベント

cow_event.type は次の値を取ります:

エラー処理

エラーレスポンスは OpenAI の形式に従います:
ストリーミングリクエストは、Agent が最初のイベントを生成するまで最大 30 秒待機します。それまでにエラーやタイムアウトが発生した場合は上表の JSON エラーを返し、タイムアウト時はそのリクエストをキャンセルします。ストリームの開始後は HTTP ステータスを変更できないため、以降のエラーは cow_event.type=error のチャンクとして返され、続いて finish_reason=error の終了チャンクと data: [DONE] が送られます。

他のアプリから使う

カスタム OpenAI エンドポイントに対応したクライアントやプラットフォームなら、そのまま接続できます。「OpenAI」または「OpenAI 互換」タイプを選び、次のように入力します:
  • API アドレス:http://<サーバーアドレス>:9899/v1(アドレスとポートだけを入力し、/v1 を自動で補うアプリもあります)
  • API キー:コンソールで生成したキー
  • モデル:モデル一覧 から選択
これらのアプリからのリクエストにはデフォルト Agent が回答します。 API はクロスオリジンリクエスト(CORS)に対応しているため、ブラウザ上のアプリからも直接呼び出せます。
現在はテキスト入力のみに対応しており、画像などのマルチモーダルコンテンツには対応していません。呼び出し側が tools を渡す関数呼び出しにも対応しておらず、Agent は自身のツールでタスクを完了します。