エージェントの実行結果
エージェントの実行 を行うと、戻り値は次のいずれかになります。
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
プロパティには、最後に実行されたエージェントが入ります。アプリケーションによっては、ユーザーが次に入力した際にこれが役立つことがあります。たとえば一次受付エージェントが言語別エージェントへハンドオフする場合、lastAgent
を保存しておけば次回のユーザーメッセージで再利用できます。
ストリーミングモードでは、現在実行中のエージェントを示す currentAgent
プロパティも便利です。
新しいアイテム
Section titled “新しいアイテム”newItems
プロパティには、実行中に生成された新しいアイテムが入ります。アイテムは RunItem
で、LLM が生成した元アイテムをラップしています。これにより、LLM の出力に加え、それぞれのイベントがどのエージェントに紐づくかを確認できます。
RunMessageOutputItem
は LLM からのメッセージを示します。元アイテムは生成されたメッセージですRunHandoffCallItem
は LLM がハンドオフツールを呼び出したことを示します。元アイテムはツール呼び出しアイテムですRunHandoffOutputItem
はハンドオフが行われたことを示します。元アイテムはハンドオフツール呼び出しへのレスポンスです。ソース/ターゲットのエージェントにもアクセスできますRunToolCallItem
は LLM がツールを呼び出したことを示しますRunToolCallOutputItem
はツールが呼び出されたことを示します。元アイテムはツールのレスポンスで、ツール出力にもアクセスできますRunReasoningItem
は LLM からの推論アイテムを示します。元アイテムは生成された推論ですRunToolApprovalItem
は LLM がツール呼び出しの承認を求めたことを示します。元アイテムはツール呼び出しアイテムです
state
プロパティには実行の状態が入ります。result
に付随する情報の多くは state
から派生していますが、state
自体はシリアライズ/デシリアライズ可能で、エラーから復旧 する場合や interruption
に対処する場合に、次回の run
呼び出しへの入力としても利用できます。
エージェントで needsApproval
を使用している場合、run
は進行前に処理すべき interruptions
を発生させることがあります。その場合 interruptions
は割り込みを引き起こした ToolApprovalItem
の配列になります。割り込みの扱いについて詳しくは 人間の介入(HITL) ガイドをご覧ください。
その他の情報
Section titled “その他の情報”Raw responses
Section titled “Raw responses”rawResponses
プロパティには、エージェント実行中にモデルが生成した生の LLM レスポンスが入ります。
Last response ID
Section titled “Last response ID”lastResponseId
プロパティには、エージェント実行中にモデルが最後に生成したレスポンスの ID が入ります。
Guardrail results
Section titled “Guardrail results”inputGuardrailResults
と outputGuardrailResults
プロパティには、ガードレールの結果が格納されます(ある場合)。ガードレール結果にはログ保存などに役立つ情報が含まれることがあるため、アクセス可能にしています。
Original input
Section titled “Original input”input
プロパティには run
メソッドに渡した元の入力が入ります。通常は不要ですが、必要な場合に利用できます。