Managed Inference and Agent APIの /v1/chat/completions
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年04月07日(月)
Heroku Managed Inference and Agent アドオンは現在パイロット段階です。パイロットの一環として提供される製品は本番環境での使用を目的としたものではなく、ベータサービスとみなされています。また、https://www.salesforce.com/company/legal/agreements.jsp のベータサービス条件が適用されます。
/v1/chat/completions
エンドポイントは、提供された一連の入力メッセージに対する会話補完を生成します。モデルを指定したり、temperature
などの生成設定を調整したり、応答をリアルタイムでストリーミングしたりすることができます。モデルが呼び出す tools
を指定することもできます。
リクエストボディパラメータ
パラメータを使用して、会話補完を生成する方法を管理します。
必須パラメータ
フィールド | 型 | 説明 | 例 |
---|---|---|---|
model | 文字列 | 補完に使用されるモデル。通常はこの値に INFERENCE_MODEL_ID 環境設定を使用します。 |
“claude-3-5-sonnet” |
messages | 配列 | モデルが次の応答を生成するために使用する messages オブジェクト (ユーザーとアシスタントの会話ターン) の配列。 | [{“role”: “user”, “content”: “Why is Heroku so awesome?”}] |
オプションパラメータ
フィールド | 型 | 説明 | デフォルト | 例 |
---|---|---|---|---|
max_tokens | 整数 | モデルが停止する前に生成できるトークンの最大数 (トークンは通常約 4 文字のテキストを表す)。 最大値: 4096 |
4096 | 100 |
stop | 配列 | モデルにトークンの生成を停止させる文字列のリスト。モデルはレスポンス内でこのリストの文字列のいずれかに達すると、以降のトークンの生成を停止します (たとえば、["foo"] はモデルが文字列 "foo" を生成した後に (もし生成した場合に) モデルに出力の生成を停止させます)。 |
null | [“foo”] |
stream | ブール値 | サーバーから送信されたイベントを介して応答を段階的にストリーミングするオプション (チャットインターフェースやタイムアウトエラーの回避に便利)。 | false | true |
temperature | フロート | 応答のランダム性を制御します。値が 0 に近いほど高確率のトークンが優先され、より焦点が絞られた応答になります。また、値が 1.0 に近いほど生成されたトークンごとにより広範囲の選択肢からサンプリングされるため、より多様な応答が促進されます。 範囲: 0.0 ~ 1.0 |
1.0 | 0.2 |
tool_choice | 列挙またはオブジェクト | tools に列挙されているツールの 1 つ以上をモデルに強制的に使用させるオプション (「tool_choice)」を参照)。 |
“required” | “auto” |
tools | 配列 | モデルが呼び出すことができるツール (「tools)」を参照)。 | [] | 「tools」セクションの JSON の例を参照 |
top_p | フロート | 次のトークンを生成するときに考慮するトークンの割合を累積確率で指定します。 範囲: 0~1.0 |
0.999 | 0.95 |
オブジェクトの tools
配列
tools
を使用して、モデルが呼び出すことのできるツールの配列を提供できます (モデルがツールを呼び出す方法を指定するには、tool_choice
を使用します)。
これが提供された場合、モデルは role="assistant"
により生成されたメッセージの中で tool_calls
を返す場合があり、指定されたツールを実行するようシステムに指示し、その結果を role="tool"
のメッセージで返します。
これらのツールは拡張プロンプトの形式でモデルに提供され、それ以上の検証は行われないことに注意してください。
モデルは指定されたツール配列に存在しないツール名を作成する場合があります。これを避けるため、モデルが tool_calls
のアシスタントメッセージを返したときに、ツール検証を実行することをお勧めします。
フィールド | 型 | 説明 | 例 |
---|---|---|---|
type | 文字列 | ツールの種類 次のいずれか: “function” または “heroku_tool” |
“function” |
function | オブジェクト | 呼び出される関数の詳細 (下の tools の「function オブジェクト」を参照) | 下の例にある function フィールドを参照) |
Heroku はツール呼び出しリクエストをシステムに返すのではなく、Heroku によって自動的に実行されるさまざまなカスタムの Heroku ツールを提供します。
function
オブジェクト
フィールド | 型 | 説明 | 例 |
---|---|---|---|
description | 文字列 | 関数が行う処理についての説明。モデルが関数をいつどのように呼び出すかを選択するときに使用します。 | “この関数は X を計算します” |
name | 文字列 | 呼び出される関数の名前 | “example_function” |
parameters | オブジェクト | 関数が JSON スキーマオブジェクトとして受け入れるパラメータ | {“type”: “object”, “properties”: {}} |
tools
配列の例
[
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. Portland, OR"
}
},
"required": ["location"]
}
}
}
]
tool_choice
オブジェクト
tool_choice
オブジェクトは、モデルが提供された tools
をどのように使用するかを指定します。
これは、文字列 (none
、auto
、required
) または tool_choice
オブジェクトの場合があります。
none
はモデルがツールを呼び出さないことを意味します。auto
の場合、モデルは提供されたツールを 0 ~多数呼び出すことができ、required
の場合は、モデルがユーザーに応答する前に少なくとも 1 つ以上のツールを呼び出すことを強制します。
モデルに特定のツールの呼び出しを強制するには、tools
オブジェクトで単一のツールを指定して "tools": "required"
を渡すか、必要な関数を指定する tool_choice
オブジェクトを渡してツールの選択を強制します。
フィールド | 型 | 説明 | 例 |
---|---|---|---|
type | 列挙<文字列> | ツールの種類 次のいずれか: function または heroku_tool |
“function” |
function | オブジェクト | 関数の名前を含む JSON オブジェクト | {“name”: “my_cool_function”} |
オブジェクトの messages
配列
messages
オブジェクトはメッセージオブジェクトの配列です。
各メッセージはメッセージのスキーマを決定する role
フィールドを指定する必要があります (以下を参照)。
現在サポートされているタイプは、user
、assistant
、system
、tool
です。
最新のメッセージで assistant
ロールを使用している場合、モデルはその最新メッセージの内容から回答を続行します。
role=user
メッセージ
user
メッセージは、モデルにクエリを送信し、応答を促す主な方法です。
フィールド | 型 | 説明 | 必須かどうか | 例 |
---|---|---|---|---|
role | 文字列 | メッセージのロール (user ) |
はい | “user” |
content | 文字列 | ユーザーメッセージの内容 | はい | “天気はどうですか?” |
role=assistant
メッセージ
通常、assistant
メッセージはモデルによってのみ生成されますが、独自のメッセージを作成したり、部分的に入力された assistant
の応答を事前に入力したりすることで、モデルが次のターンに生成するコンテンツに影響を与えることができます。
フィールド | 型 | 説明 | 必須かどうか | 例 |
---|---|---|---|---|
role | 文字列 | メッセージのロール (assistant ) |
はい | “assistant” |
content | 文字列または配列 | アシスタントメッセージの内容 | はい。ただし tool_calls が指定されている |
“こちらがその情報です” |
refusal | 文字列または null | アシスタントによる拒否メッセージ | いいえ | “それには答えられません” |
tool_calls | 配列 | モデルによって生成されたツール呼び出し | いいえ | [{“id”: “tool_call_12345”, “type”: “function”, “function”: {“name”: “my_cool_tool”, “arguments”: {“some_input”: 123}}}] |
role=system
メッセージ
system
メッセージは、モデルの応答に影響を与えるためにモデルに提供される、プロンプトの「プレフィックス」のようなものです。
フィールド | 型 | 説明 | 必須かどうか | 例 |
---|---|---|---|---|
role | 文字列 | メッセージのロール (system ) |
はい | “system” |
content | 文字列または配列 | システムメッセージの内容 | はい | “あなたは役に立つアシスタントです。あなたは簡潔さを好み、曖昧な表現を避けます。答えがわからないときはすぐに認めます” |
role=tool
メッセージ
tool
メッセージオブジェクトを使用すると、指定されたツールの結果 (出力) をモデルに伝えることができます。
フィールド | 型 | 説明 | 必須かどうか | 例 |
---|---|---|---|---|
role | 文字列 | メッセージのロール (tool ) |
はい | “get_weather” |
content | 文字列または配列 | ツールメッセージの内容 | はい | “雨で気温は 84º です” |
tool_call_id | 文字列 | このメッセージが応答するツール呼び出し | はい | “toolu_02F9GXvY5MZAq8Lw3PTNQyJK” |
tool_calls
オブジェクトの例
tools によってオプションで指定されたツールの呼び出しをモデルが決定したときの tool_calls
オブジェクトの例を以下に示します。
[
{
"role": "assistant",
"tool_calls": [
{
"id": "toolu_02F9GXvY5MZAq8Lw3PTNQyJK",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Portland, OR\"}"
}
}
],
}
]
リクエストヘッダー
次の例では、モデルリソースに「INFERENCE
」(デフォルト) というエイリアスがあると仮定しています。
ヘッダー | 型 | 説明 |
---|---|---|
Authorization |
文字列 | AI アドオンの ‘INFERENCE_KEY’ の値 (API ベアラートークン) |
すべての推論の curl リクエストには、Heroku 推論キーを含む Authorization
ヘッダーを含める必要があります。
たとえば、すべての /v1/chat/completions
リクエストはこちらのパターンに従います。
# If you're developing locally, run this to set your config vars as ENV variables.
eval $(heroku config -a $APP_NAME --shell | grep '^INFERENCE_' | sed 's/^/export /' | tee >(cat >&2))
curl $INFERENCE_URL/v1/chat/completions \
-H "Authorization: Bearer $INFERENCE_KEY" \
-d @- <<EOF
{
"model": "$INFERENCE_MODEL_ID",
"messages": [{"role": "user", "content": "Hello"}]
}
EOF