コンテンツにスキップ

エージェントの実行結果

エージェントの実行 を行うと、次のいずれかが返されます。

  • stream: true を付けずに run を呼び出した場合は RunResult
  • stream: true を付けて run を呼び出した場合は StreamedRunResult
    ストリーミングの詳細については ストリーミング ガイドも参照してください。

finalOutput プロパティには、最後に実行されたエージェントの最終出力が入ります。この結果は次のいずれかです。

  • stringoutputType が定義されていないエージェントのデフォルト
  • unknown — エージェントに JSON スキーマが outputType として定義されている場合。この場合 JSON はパースされますが、型の検証は手動で行う必要があります
  • z.infer<outputType> — エージェントに Zod スキーマが outputType として定義されている場合。出力は自動でこのスキーマに対してパースされます
  • undefined — エージェントが出力を生成しなかった場合(例: 出力を生成する前に停止した場合)

異なる outputType を持つハンドオフを使用する場合は、エージェントを作成する際に new Agent() コンストラクターではなく Agent.create() メソッドを使用してください。

これにより SDK がすべてのハンドオフでの出力型を推論し、finalOutput プロパティにユニオン型を提供します。

例:

Handoff final output types
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

次のターンで使用できる入力を取得する方法は 2 つあります。

  • result.history — 入力とエージェントの出力の両方を含む履歴のコピー
  • result.output — エージェント実行全体の出力

history はチャットのようなユースケースで完全な履歴を保持するのに便利です。

History loop
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 プロパティにアクセスすることも有用です。

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 呼び出しへの入力としても使用できます。

エージェントで needsApproval を使用している場合、run が継続する前に処理すべき interruptions が発生することがあります。その場合、interruptions には中断を引き起こした ToolApprovalItem の配列が入ります。中断の扱い方については 人間の介入(HITL) ガイドを参照してください。

rawResponses プロパティには、エージェント実行中にモデルが生成した元の LLM 応答が入ります。

lastResponseId プロパティには、エージェント実行中にモデルが生成した最後の応答の ID が入ります。

inputGuardrailResults および outputGuardrailResults プロパティには、ガードレールが存在する場合その結果が入ります。ガードレール結果にはログや保存に有用な情報が含まれることがあるため、これらを利用できるようにしています。

input プロパティには run メソッドに渡した元の入力が入ります。ほとんどの場合は不要ですが、必要に応じて利用できます。