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