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 が自身のデフォルトモデルで回答します。
- cURL
- Python
- Node.js
エンドポイント
認証
すべてのリクエストのヘッダーに 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 キー:コンソールで生成したキー
- モデル:モデル一覧 から選択
現在はテキスト入力のみに対応しており、画像などのマルチモーダルコンテンツには対応していません。呼び出し側が
tools を渡す関数呼び出しにも対応しておらず、Agent は自身のツールでタスクを完了します。