エージェントの実行結果
エージェントの実行を行うと、次のいずれかを受け取ります:
stream: true
を指定せずにrun
を呼び出した場合はRunResult
stream: 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 { AgentInputItem, Agent, user, run } 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
プロパティには、存在する場合はガードレールの結果が入ります。ガードレールの結果には、ログ記録や保存に役立つ情報が含まれることがあるため、参照できるようにしています。
input
プロパティには、run メソッドに渡した元の入力が入ります。ほとんどの場合は不要ですが、必要に応じて利用できます。