stream()
stream()
メソッドは、エージェントからの応答をリアルタイムでストリーミングすることを可能にします。このメソッドは、generate()
と同様に、messages
とオプションの options
オブジェクトをパラメータとして受け取ります。
Parameters
messages
messages
パラメータは以下のいずれかを指定できます:
- 単一の文字列
- 文字列の配列
role
とcontent
プロパティを持つメッセージオブジェクトの配列
メッセージオブジェクトの構造:
interface Message {
role: "system" | "user" | "assistant";
content: string;
}
options
(Optional)
出力構造、メモリ管理、ツール使用、テレメトリなどの設定を含むことができるオプションのオブジェクトです。
abortSignal?:
AbortSignal
エージェントの実行を中止できるシグナルオブジェクト。シグナルが中止されると、進行中のすべての操作が終了されます。
context?:
CoreMessage[]
エージェントに提供する追加のコンテキストメッセージ。
experimental_output?:
Zod schema | JsonSchema7
テキスト生成とツール呼び出しと並行して構造化出力生成を有効にします。モデルは提供されたスキーマに準拠したレスポンスを生成します。
instructions?:
string
この特定の生成でエージェントのデフォルト指示を上書きするカスタム指示。新しいエージェントインスタンスを作成せずにエージェントの動作を動的に変更するのに便利です。
memory?:
object
メモリの設定。これがメモリを管理する推奨方法です。
thread:
string | { id: string; metadata?: Record<string, any>, title?: string }
会話スレッド。文字列IDまたは`id`とオプションの`metadata`を持つオブジェクトとして指定。
resource:
string
スレッドに関連付けられたユーザーまたはリソースの識別子。
options?:
MemoryConfig
メッセージ履歴やセマンティック想起などのメモリ動作の設定。下記の`MemoryConfig`を参照。
maxSteps?:
number
= 5
ストリーミング中に許可される最大ステップ数。
maxRetries?:
number
= 2
最大リトライ回数。リトライを無効にするには0に設定。
memoryOptions?:
MemoryConfig
**非推奨。** 代わりに`memory.options`を使用してください。メモリ管理の設定オプション。詳細は下記のMemoryConfigセクションを参照。
onFinish?:
StreamTextOnFinishCallback | StreamObjectOnFinishCallback
ストリーミングが完了したときに呼び出されるコールバック関数。
onStepFinish?:
GenerateTextOnStepFinishCallback<any> | never
ストリーミング中の各ステップ後に呼び出されるコールバック関数。構造化出力では利用できません。
output?:
Zod schema | JsonSchema7
出力の期待される構造を定義します。JSON SchemaオブジェクトまたはZodスキーマを指定できます。
resourceId?:
string
**非推奨。** 代わりに`memory.resource`を使用してください。エージェントと対話するユーザーまたはリソースの識別子。threadIdが提供される場合は必須です。
telemetry?:
TelemetrySettings
ストリーミング中のテレメトリ収集の設定。詳細は下記のTelemetrySettingsセクションを参照。
temperature?:
number
モデルの出力のランダム性を制御します。高い値(例:0.8)は出力をよりランダムにし、低い値(例:0.2)はより集中的で決定論的にします。
threadId?:
string
**非推奨。** 代わりに`memory.thread`を使用してください。会話スレッドの識別子。複数のやり取りにわたってコンテキストを維持できます。resourceIdが提供される場合は必須です。
toolChoice?:
'auto' | 'none' | 'required' | { type: 'tool'; toolName: string }
= 'auto'
ストリーミング中にエージェントがツールを使用する方法を制御します。
toolsets?:
ToolsetsInput
このストリーム中にエージェントが利用できる追加のツールセット。
clientTools?:
ToolsInput
リクエストの「クライアント」側で実行されるツール。これらのツールは定義にexecute関数を持ちません。
MemoryConfig
メモリ管理の設定オプション:
lastMessages?:
number | false
コンテキストに含める最新メッセージの数。無効にするにはfalseに設定します。
semanticRecall?:
boolean | object
セマンティックメモリリコールの設定。ブール値または詳細設定オブジェクトを指定できます。
number
topK?:
number
取得する最もセマンティックに類似したメッセージの数。
number | object
messageRange?:
number | { before: number; after: number }
セマンティック検索で考慮するメッセージの範囲。単一の数値またはbefore/after設定を指定できます。
workingMemory?:
object
ワーキングメモリの設定。
boolean
enabled?:
boolean
ワーキングメモリを有効にするかどうか。
string
template?:
string
ワーキングメモリに使用するテンプレート。
threads?:
object
スレッド固有のメモリ設定。
boolean | object
generateTitle?:
boolean | { model: LanguageModelV1 | ((ctx: RuntimeContext) => LanguageModelV1 | Promise<LanguageModelV1>) }
ユーザーの最初のメッセージからの自動スレッドタイトル生成を制御します。エージェントのモデルを使用して有効/無効にするブール値、またはタイトル生成用のカスタムモデルを持つオブジェクト(コスト最適化に有用)を指定できます。例:{ model: openai('gpt-4.1-nano') }
TelemetrySettings
ストリーミング中のテレメトリ収集の設定:
isEnabled?:
boolean
= false
テレメトリを有効または無効にします。実験的機能のため、デフォルトでは無効です。
recordInputs?:
boolean
= true
入力の記録を有効または無効にします。機密情報の記録を避ける、データ転送を削減する、またはパフォーマンスを向上させるために無効にすることができます。
recordOutputs?:
boolean
= true
出力の記録を有効または無効にします。機密情報の記録を避ける、データ転送を削減する、またはパフォーマンスを向上させるために無効にすることができます。
functionId?:
string
この関数の識別子。関数ごとにテレメトリデータをグループ化するために使用されます。
metadata?:
Record<string, AttributeValue>
テレメトリデータに含める追加情報。AttributeValueは文字列、数値、ブール値、これらの型の配列、またはnullを指定できます。
tracer?:
Tracer
テレメトリデータに使用するカスタムOpenTelemetryトレーサーインスタンス。詳細はOpenTelemetryドキュメントを参照してください。
戻り値
stream()
メソッドの戻り値は、提供されたオプション、特に output
オプションによって異なります。
戻り値のプロパティテーブル
textStream?:
AsyncIterable<string>
テキストチャンクのストリーム。output が 'text' の場合(スキーマが提供されていない)または `experimental_output` を使用する場合に存在します。
objectStream?:
AsyncIterable<object>
構造化データのストリーム。スキーマを持つ `output` オプションを使用する場合にのみ存在します。
partialObjectStream?:
AsyncIterable<object>
構造化データのストリーム。`experimental_output` オプションを使用する場合にのみ存在します。
object?:
Promise<object>
最終的な構造化出力に解決されるプロミス。`output` または `experimental_output` オプションを使用する場合に存在します。
例
基本的なテキストストリーミング
const stream = await myAgent.stream([
{ role: "user", content: "Tell me a story." },
]);
for await (const chunk of stream.textStream) {
process.stdout.write(chunk);
}
スレッドコンテキストを持つ構造化出力ストリーミング
const schema = {
type: "object",
properties: {
summary: { type: "string" },
nextSteps: { type: "array", items: { type: "string" } },
},
required: ["summary", "nextSteps"],
};
const response = await myAgent.stream("What should we do next?", {
output: schema,
threadId: "project-123",
onFinish: (text) => console.log("Finished:", text),
});
for await (const chunk of response.textStream) {
console.log(chunk);
}
const result = await response.object;
console.log("Final structured result:", result);
エージェントのstream()
とLLMのstream()
の主な違いは、エージェントがthreadId
を通じて会話のコンテキストを維持し、ツールにアクセスでき、エージェントのメモリシステムと統合できることです。