stream()
stream()
メソッドは、エージェントからの応答をリアルタイムでストリーミングすることを可能にします。このメソッドは、generate()
と同様に、messages
とオプションの options
オブジェクトをパラメータとして受け取ります。
パラメータ
messages
messages
パラメータは以下のいずれかです:
- 単一の文字列
- 文字列の配列
role
とcontent
プロパティを持つメッセージオブジェクトの配列
メッセージオブジェクトの構造:
interface Message {
role: 'system' | 'user' | 'assistant';
content: string;
}
options
(オプション)
出力構造、メモリ管理、ツールの使用、テレメトリなどの設定を含むオプションのオブジェクトです。
abortSignal?:
AbortSignal
エージェントの実行を中止できる信号オブジェクト。信号が中止されると、進行中のすべての操作が終了します。
context?:
CoreMessage[]
エージェントに提供する追加のコンテキストメッセージ。
experimental_output?:
Zod schema | JsonSchema7
テキスト生成とツール呼び出しと共に構造化された出力生成を有効にします。モデルは提供されたスキーマに準拠したレスポンスを生成します。
instructions?:
string
この特定の生成のためにエージェントのデフォルト指示を上書きするカスタム指示。新しいエージェントインスタンスを作成せずに動的にエージェントの動作を変更するのに役立ちます。
maxSteps?:
number
= 5
ストリーミング中に許可される最大ステップ数。
maxRetries?:
number
= 2
最大リトライ回数。リトライを無効にするには0に設定します。
memoryOptions?:
MemoryConfig
メモリ管理の設定オプション。詳細は以下のMemoryConfigセクションを参照してください。
onFinish?:
StreamTextOnFinishCallback | StreamObjectOnFinishCallback
ストリーミングが完了したときに呼び出されるコールバック関数。
onStepFinish?:
GenerateTextOnStepFinishCallback<any> | never
ストリーミング中の各ステップ後に呼び出されるコールバック関数。構造化出力では利用できません。
output?:
Zod schema | JsonSchema7
出力の予想される構造を定義します。JSONスキーマオブジェクトまたはZodスキーマを指定できます。
resourceId?:
string
エージェントと対話するユーザーまたはリソースの識別子。threadIdが提供される場合は必須です。
telemetry?:
TelemetrySettings
ストリーミング中のテレメトリ収集の設定。詳細は以下のTelemetrySettingsセクションを参照してください。
temperature?:
number
モデルの出力のランダム性を制御します。高い値(例:0.8)は出力をよりランダムにし、低い値(例:0.2)はより焦点を絞った決定論的な出力にします。
threadId?:
string
会話スレッドの識別子。複数のやり取りにわたってコンテキストを維持できます。resourceIdが提供される場合は必須です。
toolChoice?:
'auto' | 'none' | 'required' | { type: 'tool'; toolName: string }
= 'auto'
ストリーミング中にエージェントがツールをどのように使用するかを制御します。
toolsets?:
ToolsetsInput
このストリーム中にエージェントが利用できるようにする追加のツールセット。
MemoryConfig
メモリ管理の設定オプション:
lastMessages?:
number | false
コンテキストに含める最新メッセージの数。falseに設定すると無効になります。
semanticRecall?:
boolean | object
セマンティックメモリリコールの設定。ブール値または詳細な設定が可能です。
number
topK?:
number
取得する意味的に最も類似したメッセージの数。
number | object
messageRange?:
number | { before: number; after: number }
セマンティック検索の対象とするメッセージの範囲。単一の数値または前後の設定が可能です。
workingMemory?:
object
ワーキングメモリの設定。
boolean
enabled?:
boolean
ワーキングメモリを有効にするかどうか。
string
template?:
string
ワーキングメモリに使用するテンプレート。
'text-stream' | 'tool-call'
type?:
'text-stream' | 'tool-call'
ワーキングメモリに使用するコンテンツのタイプ。
threads?:
object
スレッド固有のメモリ設定。
boolean
generateTitle?:
boolean
新しいスレッドのタイトルを自動生成するかどうか。
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);
Agentのstream()
とLLMのstream()
の主な違いは、AgentはthreadId
を通じて会話のコンテキストを維持し、ツールにアクセスでき、エージェントのメモリシステムと統合できることです。