エージェントの実行結果
エージェントを実行すると、次のいずれかを受け取ります:
stream: trueなしでrunを呼び出した場合はRunResultstream: trueを指定してrunを呼び出した場合はStreamedRunResult。ストリーミングの詳細はストリーミングも参照してください
finalOutput プロパティには、最後に実行されたエージェントの最終出力が含まれます。結果は次のいずれかです:
string—outputTypeが未定義のエージェントのデフォルトunknown— エージェントの出力型として JSON スキーマが定義されている場合。この場合、JSON は解析されていますが、型の検証は手動で行う必要がありますz.infer<outputType>— エージェントの出力型として Zod スキーマが定義されている場合。出力は自動的にこのスキーマで解析されますundefined— エージェントが出力を生成しなかった場合(たとえば、出力を生成する前に停止した場合)
異なる出力型を伴うハンドオフを使用している場合は、エージェントの作成に new Agent() コンストラクターではなく Agent.create() メソッドを使用してください。
これにより、SDK があらゆるハンドオフ経路の出力型を推論し、finalOutput プロパティに対してユニオン型を提供できるようになります。
例:
import { Agent, run } from '@openai/agents';import { z } from 'zod';
const refundAgent = new Agent({ name: 'Refund Agent', instructions: 'You are a refund agent. You are responsible for refunding customers.', outputType: z.object({ refundApproved: z.boolean(), }),});
const orderAgent = new Agent({ name: 'Order Agent', instructions: 'You are an order agent. You are responsible for processing orders.', outputType: z.object({ orderId: z.string(), }),});
const triageAgent = Agent.create({ name: 'Triage Agent', instructions: 'You are a triage agent. You are responsible for triaging customer issues.', handoffs: [refundAgent, orderAgent],});
const result = await run(triageAgent, 'I need to a refund for my order');
const output = result.finalOutput;// ^? { refundApproved: boolean } | { orderId: string } | string | undefined次ターンの入力
Section titled “次ターンの入力”次の 2 つの方法で、次ターン用の入力にアクセスできます:
result.history— あなたの入力とエージェントの出力の両方のコピーを含みますresult.output— エージェントのフル実行の出力を含みます
history は、チャットのようなユースケースで完全な履歴を維持する便利な方法です:
import { Agent, user, run } from '@openai/agents';import type { AgentInputItem } from '@openai/agents';
const agent = new Agent({ name: 'Assistant', instructions: 'You are a helpful assistant knowledgeable about recent AGI research.',});
let history: AgentInputItem[] = [ // initial message user('Are we there yet?'),];
for (let i = 0; i < 10; i++) { // run 10 times const result = await run(agent, history);
// update the history to the new output history = result.history;
history.push(user('How about now?'));}最後のエージェント
Section titled “最後のエージェント”lastAgent プロパティには、最後に実行されたエージェントが含まれます。アプリケーションによっては、次回のユーザー入力時に有用です。たとえば、一次トリアージ エージェントが言語別エージェントにハンドオフする場合、最後のエージェントを保存して、次回ユーザーがメッセージを送るときに再利用できます。
ストリーミング モードでは、現在実行中のエージェントに対応する currentAgent プロパティへアクセスするのも有用です。
新しいアイテム
Section titled “新しいアイテム”newItems プロパティには、実行中に生成された新しいアイテムが含まれます。アイテムは RunItem です。ランアイテムは、LLM が生成した元アイテムをラップします。これにより、LLM の出力に加えて、これらのイベントがどのエージェントに関連付けられていたかにもアクセスできます。
RunMessageOutputItemは LLM からのメッセージを示します。元アイテムは生成されたメッセージですRunHandoffCallItemは LLM がハンドオフ ツールを呼び出したことを示します。元アイテムは LLM からのツール呼び出しアイテムですRunHandoffOutputItemはハンドオフが発生したことを示します。元アイテムはハンドオフ ツール呼び出しへのツール応答です。アイテムからソース/ターゲット エージェントにもアクセスできますRunToolCallItemは LLM がツールを呼び出したことを示しますRunToolCallOutputItemはツールが呼び出されたことを示します。元アイテムはツールの応答です。アイテムからツール出力にもアクセスできますRunReasoningItemは LLM からの推論アイテムを示します。元アイテムは生成された推論ですRunToolApprovalItemは LLM がツール呼び出しの承認を要求したことを示します。元アイテムは LLM からのツール呼び出しアイテムです
state プロパティには、実行の状態が含まれます。result に付随するものの多くは state から導出されていますが、state はシリアライズ/デシリアライズ可能で、エラーからの復旧やinterruption への対応が必要な場合に、後続の run 呼び出しの入力としても使用できます。
エージェントで needsApproval を使用している場合、続行前に処理が必要な interruptions が発生することがあります。その場合、interruptions は中断を引き起こした ToolApprovalItem の配列になります。中断への対処方法の詳細は、人間の介入(HITL)を参照してください。
その他の情報
Section titled “その他の情報”元レスポンス
Section titled “元レスポンス”rawResponses プロパティには、エージェントの実行中にモデルが生成した元の LLM レスポンスが含まれます。
最後のレスポンス ID
Section titled “最後のレスポンス ID”lastResponseId プロパティには、エージェントの実行中にモデルが最後に生成したレスポンスの ID が含まれます。
ガードレールの結果
Section titled “ガードレールの結果”inputGuardrailResults と outputGuardrailResults プロパティには、ガードレールの結果(存在する場合)が含まれます。ガードレールの結果には、記録や保存に有用な情報が含まれることがあるため、利用できるようにしています。
ツールのガードレール結果は、toolInputGuardrailResults と toolOutputGuardrailResults で個別に公開されています。
トークン使用量は result.state.usage に集計され、実行におけるリクエスト数とトータル トークン数を追跡します。ストリーミング実行では、レスポンスの到着に伴いこのデータが更新されます。
import { Agent, run } from '@openai/agents';
const agent = new Agent({ name: 'Usage Tracker', instructions: 'Summarize the latest project update in one sentence.',});
const result = await run( agent, 'Summarize this: key customer feedback themes and the next product iteration.',);
const usage = result.state.usage;console.log({ requests: usage.requests, inputTokens: usage.inputTokens, outputTokens: usage.outputTokens, totalTokens: usage.totalTokens,});
if (usage.requestUsageEntries) { for (const entry of usage.requestUsageEntries) { console.log('request', { endpoint: entry.endpoint, inputTokens: entry.inputTokens, outputTokens: entry.outputTokens, totalTokens: entry.totalTokens, }); }}input プロパティには、run メソッドに提供した元の入力が含まれます。多くの場合これは不要ですが、必要な場合に備えて利用できます。