🍣

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 - モデルの推論を制限する。lowmediumhighをサポートしている。制限を加えることで応答が早くなり、トークン数を削減することができる。
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までの整数で指定する。このパラメータを使用する場合はlogprobstrueを設定する必要がある。
top_p number or null - temperatureの代替手法。0.1を指定することで、確率質量の上位10%を構成するトークンのみを考慮する。temperaturetop_pのどちらかのみを設定することが推奨される。
user string - エンドユーザー向けの識別子。不正使用の検出と防止に役立つ。
web_search_options object - ウェブ検索オプション。レスポンスに使用する関連結果を得るためにWeb上で検索する。

まとめ

  • client.chat.completions.createにより、LLMと連携して対話を行います
  • client.chat.completions.createの必須項目はmessagesmodelです

脚注

脚注
  1. Create chat completion ↩︎

セリオ株式会社 テックブログ

Discussion