エージェントの実行結果
エージェントの実行 を行うと、次のいずれかが返されます。
stream: true
を付けずにrun
を呼び出した場合はRunResult
stream: true
を付けてrun
を呼び出した場合はStreamedRunResult
ストリーミングの詳細については ストリーミング ガイドも参照してください。
finalOutput
プロパティには、最後に実行されたエージェントの最終出力が入ります。この結果は次のいずれかです。
string
—outputType
が定義されていないエージェントのデフォルトunknown
— エージェントに JSON スキーマがoutputType
として定義されている場合。この場合 JSON はパースされますが、型の検証は手動で行う必要がありますz.infer<outputType>
— エージェントに Zod スキーマがoutputType
として定義されている場合。出力は自動でこのスキーマに対してパースされますundefined
— エージェントが出力を生成しなかった場合(例: 出力を生成する前に停止した場合)
異なる outputType
を持つハンドオフを使用する場合は、エージェントを作成する際に 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[] = [ // intial 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
プロパティには最後に実行されたエージェントが入ります。アプリケーションによっては、次回ユーザーが入力した際にこれを利用すると便利です。たとえば、最前線のトリアージを行うエージェントが言語別のエージェントにハンドオフする場合、lastAgent
を保存しておき、ユーザーが次にメッセージを送った際に再利用できます。
ストリーミング モードでは、現在実行中のエージェントを示す currentAgent
プロパティにアクセスすることも有用です。
新しいアイテム
Section titled “新しいアイテム”newItems
プロパティには実行中に生成された新しいアイテムが入ります。アイテムは RunItem
で、LLM が生成した元のアイテムをラップしています。これにより、LLM の出力に加え、そのイベントがどのエージェントに関連しているかを取得できます。
RunMessageOutputItem
は LLM からのメッセージを示します。元のアイテムは生成されたメッセージですRunHandoffCallItem
は LLM がハンドオフ ツールを呼び出したことを示します。元のアイテムは LLM のツール呼び出しアイテムですRunHandoffOutputItem
はハンドオフが発生したことを示します。元のアイテムはハンドオフ ツール呼び出しへの応答です。ソース/ターゲットのエージェントにもアクセスできますRunToolCallItem
は LLM がツールを呼び出したことを示しますRunToolCallOutputItem
はツールが呼び出されたことを示します。元のアイテムはツールの応答です。ツール出力にもアクセスできますRunReasoningItem
は LLM の reasoning アイテムを示します。元のアイテムは生成された reasoning ですRunToolApprovalItem
は LLM がツール呼び出しの承認を求めたことを示します。元のアイテムは LLM のツール呼び出しアイテムです
state
プロパティには実行の状態が入ります。result
に付随するほとんどの情報は state
から派生していますが、state
はシリアライズ/デシリアライズ可能で、エラーからの復旧 が必要な場合や interruption
を処理する必要がある場合に、後続の run
呼び出しへの入力としても使用できます。
中断 (Interruption)
Section titled “中断 (Interruption)”エージェントで needsApproval
を使用している場合、run
が継続する前に処理すべき interruptions
が発生することがあります。その場合、interruptions
には中断を引き起こした ToolApprovalItem
の配列が入ります。中断の扱い方については 人間の介入(HITL) ガイドを参照してください。
その他の情報
Section titled “その他の情報”rawResponses
プロパティには、エージェント実行中にモデルが生成した元の LLM 応答が入ります。
最後の応答 ID
Section titled “最後の応答 ID”lastResponseId
プロパティには、エージェント実行中にモデルが生成した最後の応答の ID が入ります。
ガードレール結果
Section titled “ガードレール結果”inputGuardrailResults
および outputGuardrailResults
プロパティには、ガードレールが存在する場合その結果が入ります。ガードレール結果にはログや保存に有用な情報が含まれることがあるため、これらを利用できるようにしています。
input
プロパティには run
メソッドに渡した元の入力が入ります。ほとんどの場合は不要ですが、必要に応じて利用できます。