🍣
OpenAIと連携するチャットボットを構築!LLM連携処理の各種設定について
背景
- 社内のAIチャットボットのUI開発にMicrosoft 365 Agents Toolkitを使うことが決まりました
- Toolkitの機能でBasic Custom Engine Agentのプロジェクトを作成したとき自動生成されるLLM連携のコードの設定について調べました
対象読者
- AIチャットボットを作りたい方
- Microsoft 365 Agents Toolkitで開発したい方
事前準備
- Microsoft 365 Agents ToolkitでBasic Custom Engine Agentのプロジェクトを作成すること(関連記事はこちら)
LLM連携処理
以下のコードにより、LLMと連携して回答を得ています。この処理に渡す設定内容について調べました。
このコードによりOpenAIのChat Completions APIを呼び出してLLMから回答を得ています。
/** クライアント定義 */
const client = new AzureOpenAI({
apiVersion: "2024-04-01-preview",
apiKey: config.azureOpenAIKey,
endpoint: config.azureOpenAIEndpoint,
deployment: config.azureOpenAIDeploymentName,
});
/** LLM連携 */
const result = await client.chat.completions.create({
messages: [
{
role: "system",
content: systemPrompt,
},
{
role: "user",
content: context.activity.text,
},
],
model: "",
});
Chat Completions APIのリクエストパラメータは以下があります。[1]
項目名 | 型 | 必須 | 説明 |
---|---|---|---|
messages | array | 必須 | これまでの会話を構成するメッセージリスト。使用するモデルによってテキスト、画像、音声など様々なメッセージをサポートする。roleがsystem の場合はシステムプロンプトを扱い、roleがassistant の場合はLLMからの応答、roleがuser の場合はユーザーからの問い合わせを扱う。 |
model | string | 必須 | レスポンスの生成に使われるモデルID(gpt-4o など)。ブランクを指定した場合、client作成時に指定したモデルがデフォルトで使用される。 |
audio | object or null | - | オーディオ出力のためのパラメータ。オーディオ出力をリクエストする場合、modalities: ["audio"] が必要。 |
frequency_penalty | number or null | - |
-2.0 から2.0 までの数値。プラス値を入力するとテキスト内で既存の頻度に基づいてペナルティを課し、モデルが同じ行を逐次的に繰り返す可能性を減らす。 |
function_call | string or object | 非推奨 | モデルから呼び出される関数を制御する。{"name": "my_function"} のように指定すると特定の関数を強制的に呼び出す。 |
functions | array | 非推奨 | モデルがJSON入力を生成する関数リスト。 |
logit_bias | map | - | 指定したトークンが完了までに現れる可能性を修正する。 トークンを-100から100までの値をとる関連するバイアス値にマッピングするJSONオブジェクトを受け取る。 |
logprobs | boolean or null | - | 出力トークンの対数確率を返却するかどうかを設定する。 |
max_completion_tokens | integer or null | - | 生成できるトークン数の上限。 |
max_tokens | integer or null | 非推奨 | チャット完了時に生成できるトークン数の上限。 |
metadata | map | - | オブジェクトにアタッチできる最大16個のキーと値のペアの集合。API経由などでオブジェクトを問い合わせる際に役立つ |
modalities | array or null | - | モデルに生成してほしい出力の型。デフォルトはtext 型。テキストと音声を両方出力してほしい場合は["text", "audio"] と指定する |
n | integer or null | - | 入力メッセージに対して生成する補完選択肢の数。選択肢を生成する際トークン数に応じて課金されるため注意が必要。コストを最小限に抑えるには1 を指定する。 |
parallel_tool_calls | boolean | - | ツールを使用している間、関数呼び出しを並行して実行するかどうか。 |
prediction | object | - | モデルからの応答の大部分が事前にわかる場合、応答時間を大幅に改善するような予測出力のための設定。コンテンツにわずかな変更があるファイルの再生成によく使われる。 |
presence_penalty | number or null | - |
-2.0 から2.0 までの数値。プラス値は新しいトークンがこれまでのテキストに出てきたかどうかでペナルティを課し、モデルが新しいトピックを話す可能性を高める。 |
reasoning_effort | string or null | - | モデルの推論を制限する。low 、medium 、high をサポートしている。制限を加えることで応答が早くなり、トークン数を削減することができる。 |
response_format | object | - | モデルの出力形式を指定するオブジェクト。{ "type": "json_schema", "json_schema": {...} } の形式に設定すると構造化された出力を可能にする。 |
seed | integer or null | - | ベータ版の機能。同じシードを持つリクエストを繰り返した場合、同じ結果が返される。 |
service_tier | string or null | - | リクエスト処理に使うレイテンシを指定する。 |
stop | string or string array or null | - | 最大4つまでの、APIによるトークン生成を停止させるためのシーケンス。 |
store | boolean or null | - | モデル蒸留や製品評価に使用するため、リクエスト出力を保存するかどうか。 |
stream | boolean or null | - | trueに設定するとモデルレスポンスデータがサーバー送信イベントを使用して生成され、クライアントにストリームされる。 |
stream_options | object or null | - | ストリームオプション。設定するとデータの前にチャンクが追加されストリーミングされる。 |
temperature | number or null | - | 0から2までの間でサンプリング温度を設定可能。0.8のような高い値だと出力をよりランダムにでき、0.2のように低い値だと出力が一様になる。 |
tool_choice | string or object | - | モデルがどのツールを呼び出すかを制御する。 |
tools | array | - | モデルが呼び出すことができるツールのリスト。 |
top_logprobs | integer or null | - | 各トークンの位置で最も返されそうなトークンの数を0から20までの整数で指定する。このパラメータを使用する場合はlogprobs にtrue を設定する必要がある。 |
top_p | number or null | - |
temperature の代替手法。0.1を指定することで、確率質量の上位10%を構成するトークンのみを考慮する。temperature かtop_p のどちらかのみを設定することが推奨される。 |
user | string | - | エンドユーザー向けの識別子。不正使用の検出と防止に役立つ。 |
web_search_options | object | - | ウェブ検索オプション。レスポンスに使用する関連結果を得るためにWeb上で検索する。 |
まとめ
-
client.chat.completions.create
により、LLMと連携して対話を行います -
client.chat.completions.create
の必須項目はmessages
とmodel
です
Discussion