Table of Contents [expand]
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年09月04日(木)
/v1/agents/heroku エンドポイントを使用すると、メッセージに基づいてツールを自律的に呼び出すことができる大規模言語モデル (LLM) を搭載したエージェントシステムとやり取りできます。/chat/completions とは異なり、単一のモデル応答を生成する v1/agents/heroku エンドポイントは、自動ツール実行とマルチステップワークフローをサポートします。
リクエストボディパラメータ
以下のパラメータを使用して、エージェントの動作とエージェントが使用できるツールを管理します。
必須パラメータ
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| model | 文字列 | 推論に使用されるモデル (通常は INFERENCE_MODEL_ID 環境設定の値) |
|
| messages | 配列 | エージェントが応答と次のアクションを決定するために使用するメッセージの配列 | [{"role": "user", "content": "Check my database schema."}] |
任意のパラメータ
| フィールド | 種類 | 説明 | デフォルト | 例 |
|---|---|---|---|---|
| max_tokens_per_inference_request | 整数 | モデルが各基礎推論リクエスト中に生成できるトークンの最大数で、これを超えると停止します (/v1/agents/heroku への 1 回の呼び出しで複数の基礎推論リクエストを含めることができます)。最大値: Haiku モデルの場合は 4096、Sonnet モデルの場合は 8192 |
変動 | 1024 |
| stop | 配列 | 応答にいずれかの文字列が含まれている場合に、モデルがそれ以上トークンを生成しないようにする文字列のリスト (例: ["foo"] はモデルが文字列 "foo" を生成した場合にのみ出力の生成を停止します) |
null |
["foo"] |
| temperature | フロート | 応答のランダム性を制御します。値が 0 に近いほど高確率のトークンが優先され、より焦点が絞られた応答になります。また、値が 1.0 に近いほど生成されたトークンごとにより広範囲の選択肢からサンプリングされるため、より多様な応答が促進されます。*範囲: * 0.0 ~ 1.0 |
1.0 |
0.2 |
| tools | 配列 | エージェントが使用できるツールのリスト | null |
サンプルリクエストのツールフィールドを参照 |
| top_p | フロート | 次のトークンを生成するときに考慮するトークンの割合を累積確率で指定します *範囲: * 0 ~ 1.0 |
0.999 |
0.95 |
オブジェクトの tools 配列
配列内の各ツールを使用すると、エージェントがユーザーに代わってアクションを呼び出すことができます。Heroku は One-off dyno を介してツール呼び出しを自動的に実行します。現在、/v1/agents/heroku エンドポイントは以下の 2 種類のツールをサポートしています。
- heroku_tool: Heroku Managed Inference and Agents がネイティブにサポートするファーストパーティツール
- MCP ツール: Heroku にデプロイするカスタム MCP ツール。モデルに呼び出されると Heroku によって自動的に実行されます。独自のカスタム MCP ツールを Heroku にデプロイする方法の詳細は、Heroku MCP ツールに関する記事を参照してください。
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| type | 列挙<文字列> | ツールの種類 *次のいずれか: * heroku_tool、mcp |
"heroku_tool" |
| name | 文字列 | ツールの名前 (利用可能なツールについては、Heroku ツールに関する記事を参照してください) | "code_exec_ruby" |
| description | 文字列 | (任意) このツールをいつ使用するかをモデルに通知するヒントテキスト | "Runs SQL query on a Heroku database" |
| runtime_params | オブジェクト | Heroku ツールと mcp ツールの自動実行を制御する構成 (「ランタイムパラメータ)」を参照) |
ランタイムパラメータ
v1/agents/heroku エンドポイントは、実行時に指定された mcp または heroku_tool ツールに特定の設定を渡します。モデルは設定を変更できません。
| フィールド | 種類 | 説明 | デフォルト | 例 |
|---|---|---|---|---|
| target_app_name | 文字列 | (必須) ツールを実行する Heroku アプリの名前 | "my-heroku-app" |
|
| dyno_size | 文字列 | ツールを実行するときに使用する dyno サイズ | "standard-1x" |
"standard-1x" |
| ttl_seconds | 整数 | dyno が実行できる最大秒数 *最大: * 120 |
120 |
10 |
| max_calls | 整数 | エージェントループ中にこのツールを呼び出すことができる最大回数 | 3 |
1 |
| tool_params | オブジェクト | ツールの追加パラメータ (cmd、db_attachment など) (ツール固有のドキュメント)を参照) |
(変動) | {} |
mcp タイプのツールではttl_seconds、max_calls、dyno_size を任意で指定できます。他のパラメータはサポートされていません。heroku_tool タイプのツールでは、ツール自体に応じて特定のパラメータが必要になるか、または許可されます。詳細は、ツール固有のドキュメントを参照してください。
オブジェクトの messages 配列
messages オブジェクトはメッセージオブジェクトの配列です。
各メッセージはメッセージのスキーマを決定する role フィールドを指定する必要があります。現在サポートされているタイプは、user、assistant、system、tool です。
最新のメッセージで assistant ロールを使用している場合、モデルはその最新メッセージの内容から回答を続行します。
role=user メッセージ
user メッセージは、モデルにクエリを送信し、応答を促す主な方法です。
| フィールド | 種類 | 説明 | 必須かどうか | 例 |
|---|---|---|---|---|
| role | 文字列 | メッセージのロール 常に "user" |
はい | "user" |
| content | 文字列 | ユーザーメッセージの内容 | はい | "What is the weather?" |
role=assistant メッセージ
通常、モデルは assistant メッセージのみ生成します。ただし、部分的に完了した assistant 応答を作成または事前入力して、モデルが次のターンに生成するコンテンツに影響を与えることができます。
| フィールド | 種類 | 説明 | 必須かどうか | 例 |
|---|---|---|---|---|
| role | 文字列 | メッセージのロール 常に "assistant" |
はい | "assistant" |
| content | 文字列 | アシスタントメッセージの内容 | はい。ただし tool_calls が指定されている |
"Here is the information" |
| refusal | 文字列または null | (現在リクエストでは無視されます) アシスタントによるメッセージ拒否 | いいえ | "I cannot answer that" |
| tool_calls | 配列 | ツール呼び出し要求オブジェクトの配列 | いいえ | [{"id": "tool_call_12345", "type": "function", "function": {"name": "my_cool_tool", "arguments": {"some_input": 123}}}] |
ツール呼び出しオブジェクト
特定のツールを実行するモデルのリクエストを表します。
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| id | 文字列 | ツール呼び出しの一意の ID | "tooluse_abc123" |
| type | 文字列 | 通話の種類 *常に: * "function" |
"function" |
| function | オブジェクト | 関数呼び出しの詳細 | ツール呼び出しの例を参照 |
ツール呼び出しの例
"tool_calls": [
{
"id": "tooluse_abc123",
"type": "function",
"function": {
"name": "dyno_run_command",
"arguments": "{}"
}
}
]
関数オブジェクト
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| name | 文字列 | 呼び出すツールの名前 | "dyno_run_command" |
| arguments | 文字列 | ツール引数の JSON エンコードされた文字列 | "{}" |
role=system メッセージ
system メッセージは、モデルの応答をガイドするためにモデルに与えられる特別なプロンプトです。
| フィールド | 種類 | 説明 | 必須かどうか | 例 |
|---|---|---|---|---|
| role | 文字列 | メッセージのロール 常に "system" |
はい | "system" |
| content | 文字列 | システムメッセージの内容 | はい | "You are a helpful assistant. You favor brevity and avoid hedging. You readily admit when you don't know an answer." |
role=tool メッセージ
指定されたツールの出力を表す tool メッセージオブジェクト。
| フィールド | 種類 | 説明 | 必須かどうか | 例 |
|---|---|---|---|---|
| role | 文字列 | メッセージのロール 常に "tool" |
はい | "tool" |
| content | 文字列 | ツール呼び出しの出力 | はい | "Rainy and 84º" |
| tool_call_id | 文字列 | このメッセージが応答するツール呼び出し | はい | "toolu_02F9GXvY5MZAq8Lw3PTNQyJK" |
リクエストヘッダー
| ヘッダー | 種類 | 説明 |
|---|---|---|
Authorization |
文字列 | Heroku Inference API キーを含むベアラートークン |
すべての /v1/agents/heroku リクエストには以下のヘッダーを含める必要があります。
-H "Authorization: Bearer $INFERENCE_KEY"
応答形式
エージェント応答は、Server-Sent Events (SSE) を介してストリームで返されます。各 event: message には完了を表す JSON ペイロードが含まれます。最後のイベントはデータ [DONE] を使用した event: done です。
完了オブジェクト
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| id | 文字列 | エージェントセッションの一意の ID | "chatcmpl-abc123" |
| オブジェクト | 列挙<文字列> | 完了の種類 *次のいずれか: * chat.completion、tool.completion |
"tool.completion" |
| created | 整数 | チャンクが作成されたときの UNIX タイムスタンプ | 1746546550 |
| model | 文字列 | メッセージを生成するために使用されたモデル ID | "claude-4-sonnet" |
| system_fingerprint | 文字列 | 出力を生成するシステムの指紋 | "heroku-inf-abc123" |
| choices | オブジェクトの配列 | 単一の選択オブジェクトを含む長さ 1 の配列 | 応答の例を参照 |
| usage | オブジェクト | トークンの使用量の統計。ツールの完了の場合は空 (トークンは消費されない) | {"prompt_tokens":15,"completion_tokens":13,"total_tokens":28} |
選択オブジェクト
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| index | 整数 | 選択のインデックス *常に: * 0 |
0 |
| message | オブジェクト | メッセージの内容 (応答メッセージは常に assistant または tool) の役割) |
応答の例を参照 |
| finish_reason | 列挙<文字列> | モデルが停止した理由 *次のいずれか: * stop、length、tool_calls、"" |
"tool_calls" |
使用量オブジェクト
| フィールド | 種類 | 説明 | 例 |
|---|---|---|---|
| prompt_tokens | 整数 | プロンプトで使用されるトークン | 397 |
| completion_tokens | 整数 | 応答に使用されるトークン | 65 |
| total_tokens | 整数 | プロンプトトークンと完了トークンの合計 | 462 |
SSE 経由でストリーミングされる各 event: message は、chat.completion または tool.completion のいずれか 1 つの完了オブジェクトを含みます。最後のメッセージは data: [DONE] を使用した event: done です。
リクエストの例
curl --location $INFERENCE_URL/v1/agents/heroku \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $INFERENCE_KEY" \
--data @- <<EOF
{
"model": "$INFERENCE_MODEL_ID",
"messages": [
{
"role": "user",
"content": "What is the current time and date?"
}
],
"tools": [
{
"type": "heroku_tool",
"name": "dyno_run_command",
"runtime_params": {
"target_app_name": "$APP_NAME",
"tool_params": {
"cmd": "echo hello && date",
"description": "Runs `echo hello && date` on one-off dyno.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
}
}
]
}
EOF
応答の例
event:message
data:{"id":"chatcmpl-18441121a827937e07e20","object":"chat.completion","created":1748541400,"model":"claude-4-sonnet","system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"assistant","content":"I'll run the command to get the current time and date for you.","refusal":null,"tool_calls":[{"id":"tooluse_mo8vfAMhRqm3ypFIoCTmng","type":"function","function":{"name":"dyno_run_command","arguments":"{}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":397,"completion_tokens":55,"total_tokens":452}}
event:message
data:{"id":"chatcmpl-18441121a827937e07e20","object":"tool.completion","created":1748541402,"system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"tool","content":"Tool 'dyno_run_command' returned result: hello\nThu May 29 05:56:42 PM UTC 2025","refusal":null,"tool_call_id":"tooluse_mo8vfAMhRqm3ypFIoCTmng","name":"dyno_run_command"},"finish_reason":""}],"usage":{}}
event:message
data:{"id":"chatcmpl-18441121a827937e07e20","object":"chat.completion","created":1748541407,"model":"claude-4-sonnet","system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"assistant","content":"Based on the command output, the current time and date is:\n\n**Thursday, May 29, 2025 at 5:56:42 PM UTC**","refusal":null},"finish_reason":"stop"}],"usage":{"prompt_tokens":500,"completion_tokens":40,"total_tokens":540}}
event:done
data:[DONE]