コンテキスト管理
Context は多義的な用語です。考慮すべきコンテキストには主に 2 つの種類があります:
- 実行中にコードがアクセスできる ローカル コンテキスト: ツールに必要な依存関係やデータ、
onHandoffのようなコールバック、ライフサイクル フック - 応答を生成するときに言語モデルが参照できる エージェント/LLM のコンテキスト
ローカル コンテキスト
Section titled “ローカル コンテキスト”ローカル コンテキストは RunContext<T> 型で表されます。状態や依存関係を保持する任意のオブジェクトを作成し、それを Runner.run() に渡します。すべてのツール呼び出しとフックは RunContext ラッパーを受け取り、そのオブジェクトを読み書きできます。
import { Agent, run, RunContext, tool } from '@openai/agents';import { z } from 'zod';
interface UserInfo { name: string; uid: number;}
const fetchUserAge = tool({ name: 'fetch_user_age', description: 'Return the age of the current user', parameters: z.object({}), execute: async ( _args, runContext?: RunContext<UserInfo>, ): Promise<string> => { return `User ${runContext?.context.name} is 47 years old`; },});
async function main() { const userInfo: UserInfo = { name: 'John', uid: 123 };
const agent = new Agent<UserInfo>({ name: 'Assistant', tools: [fetchUserAge], });
const result = await run(agent, 'What is the age of the user?', { context: userInfo, });
console.log(result.finalOutput); // The user John is 47 years old.}
main().catch((error) => { console.error(error); process.exit(1);});単一の実行に参加するすべてのエージェント、ツール、フックは同じ 型 のコンテキストを使用する必要があります。
ローカル コンテキストの用途:
- 実行に関するデータ(ユーザー名、ID など)
- ロガーやデータ フェッチャーなどの依存関係
- ヘルパー関数
エージェント/LLM のコンテキスト
Section titled “エージェント/LLM のコンテキスト”LLM が呼び出されるとき、参照できるのは会話履歴に含まれるデータのみです。追加の情報を利用可能にする方法はいくつかあります:
- エージェントの
instructionsに追加する(system または developer メッセージとも呼ばれます)。これは静的な文字列でも、コンテキストを受け取って文字列を返す関数でも構いません Runner.run()を呼び出す際のinputに含める。これは instructions の手法に似ていますが、メッセージをより低い位置に配置できます(指揮系統 内)- 関数ツール経由で公開し、LLM がオンデマンドでデータを取得できるようにする
- リトリーバルや Web 検索のツールを使用して、ファイル、データベース、または Web からの関連データに基づいて応答を確かなものにする