MastraModelOutput(実験的)
実験的なAPI:この型は実験的な .streamVNext()
メソッドの一部です。フィードバックに基づき機能を改善する過程で、APIが変更される可能性があります。
MastraModelOutput
クラスは .streamVNext() によって返され、ストリーミングとPromiseベースの両方でモデル出力にアクセスできます。構造化出力の生成、ツール呼び出し、推論、包括的な使用状況の追跡をサポートします。
// MastraModelOutput は agent.streamVNext() によって返されます
const stream = await agent.streamVNext("Hello world");
セットアップと基本的な使用方法については、.streamVNext() メソッドのドキュメントをご参照ください。
ストリーミングのプロパティ
これらのプロパティは、生成中のモデル出力にリアルタイムでアクセスするためのものです:
fullStream:
ReadableStream<ChunkType<OUTPUT>>
テキスト、ツール呼び出し、推論、メタデータ、制御チャンクを含む、あらゆるチャンク種別の完全なストリーム。モデルの応答のあらゆる側面にきめ細かくアクセスできます。
ReadableStream
ChunkType:
ChunkType<OUTPUT>
ストリーミング中に出力されうるすべてのチャンク種別
textStream:
ReadableStream<string>
テキストのみを段階的に流すストリーム。メタデータ、ツール呼び出し、制御チャンクをすべて除外し、生成中のテキストだけを提供します。
objectStream:
ReadableStream<PartialSchemaOutput<OUTPUT>>
出力スキーマ使用時に、構造化オブジェクトの進捗を逐次配信するストリーム。オブジェクトの組み立て途中の部分を随時出力し、構造化データ生成をリアルタイムに可視化できます。
ReadableStream
PartialSchemaOutput:
PartialSchemaOutput<OUTPUT>
定義済みスキーマに合致する未完成のオブジェクト
elementStream:
ReadableStream<InferSchemaOutput<OUTPUT> extends (infer T)[] ? T : never>
出力スキーマが配列型を定義している場合に、配列の各要素を個別に配信するストリーム。配列全体の完了を待たず、各要素が完成し次第出力されます。
Promise ベースのプロパティ
これらのプロパティは、ストリーム完了後に最終値で解決されます:
text:
Promise<string>
モデルからの結合済みの完全なテキスト応答。テキスト生成の完了時に解決されます。
object:
Promise<InferSchemaOutput<OUTPUT>>
出力スキーマ使用時の、構造化オブジェクトの完全な応答。解決前にスキーマで検証されます。検証に失敗した場合は reject されます。
Promise
InferSchemaOutput:
InferSchemaOutput<OUTPUT>
スキーマ定義に厳密に一致する完全に型付けされたオブジェクト
reasoning:
Promise<string>
Reasoning をサポートするモデル(OpenAI の o1 シリーズなど)向けの完全な推論テキスト。Reasoning 非対応のモデルでは空文字列を返します。
reasoningText:
Promise<string | undefined>
推論コンテンツへの別経路。Reasoning 非対応のモデルでは undefined になる場合がありますが、"reasoning" は空文字列を返します。
toolCalls:
Promise<ToolCallChunk[]>
実行中に行われたすべてのツール呼び出しチャンクの配列。各チャンクにはツールのメタデータと実行詳細が含まれます。
ToolCallChunk
type:
'tool-call'
チャンク種別の識別子
runId:
string
実行ランの識別子
from:
ChunkFrom
チャンクの発生元(AGENT、WORKFLOW など)
payload:
ToolCallPayload
toolCallId、toolName、args、実行詳細を含むツール呼び出しデータ
toolResults:
Promise<ToolResultChunk[]>
ツール呼び出しに対応するすべてのツール結果チャンクの配列。実行結果とエラー情報を含みます。
ToolResultChunk
type:
'tool-result'
チャンク種別の識別子
runId:
string
実行ランの識別子
from:
ChunkFrom
チャンクの発生元(AGENT、WORKFLOW など)
payload:
ToolResultPayload
toolCallId、toolName、result、エラーステータスを含むツール結果データ
usage:
Promise<Record<string, number>>
トークン使用状況の統計(入力トークン、出力トークン、合計トークン、Reasoning モデルの場合は推論トークン)を含みます。
Record
inputTokens:
number
入力プロンプトで消費されたトークン
outputTokens:
number
応答で生成されたトークン
totalTokens:
number
入力トークンと出力トークンの合計
reasoningTokens?:
number
非表示の推論トークン(Reasoning モデル向け)
finishReason:
Promise<string | undefined>
生成が停止した理由(例: 'stop'、'length'、'tool_calls'、'content_filter')。ストリームが終了していない場合は undefined。
enum
stop:
'stop'
モデルが自然に完了
length:
'length'
最大トークン数に到達
tool_calls:
'tool_calls'
モデルがツールを呼び出した
content_filter:
'content_filter'
コンテンツがフィルタリングされた
エラーのプロパティ
error:
string | Error | { message: string; stack: string; } | undefined
ストリームでエラーが発生した場合のエラー情報。エラーがなければ undefined。文字列メッセージ、Error オブジェクト、またはスタックトレース付きのシリアライズされたエラーのいずれか。
メソッド
getFullOutput:
() => Promise<FullOutput>
テキスト、構造化オブジェクト、ツール呼び出し、使用量統計、リースニング、メタデータなど、すべての結果を含む包括的な出力オブジェクトを返します。ストリームの全結果に一括でアクセスできる便利なメソッドです。
FullOutput
text:
string
完全なテキスト応答
object?:
InferSchemaOutput<OUTPUT>
スキーマが指定されている場合の構造化出力
toolCalls:
ToolCallChunk[]
実行されたすべてのツール呼び出しチャンク
toolResults:
ToolResultChunk[]
すべてのツール結果チャンク
usage:
Record<string, number>
トークン使用量の統計
reasoning?:
string
利用可能な場合の思考過程テキスト
finishReason?:
string
生成が終了した理由
consumeStream:
(options?: ConsumeStreamOptions) => Promise<void>
チャンクを個別に処理せず、ストリーム全体を手動で消費します。最終的な Promise ベースの結果だけが必要で、ストリームの消費を明示的に開始したい場合に有用です。
ConsumeStreamOptions
onError?:
(error: Error) => void
ストリームエラーを処理するコールバック
使用例
テキストの基本的なストリーミング
const stream = await agent.streamVNext("Write a haiku");
// 生成され次第テキストを順次ストリームする
for await (const text of stream.textStream) {
process.stdout.write(text);
}
// あるいは、全文を取得する
const fullText = await stream.text;
console.log(fullText);
構造化出力のストリーミング
const stream = await agent.streamVNext("ユーザーデータを生成", {
output: z.object({
name: z.string(),
age: z.number(),
email: z.string()
})
});
// 部分的なオブジェクトを逐次受信
for await (const partial of stream.objectStream) {
console.log("進捗:", partial); // { name: "John" }, { name: "John", age: 30 }, ...
}
// 検証済みの最終オブジェクトを取得
const user = await stream.object;
console.log("最終結果:", user); // { name: "John", age: 30, email: "john@example.com" }
ツールの呼び出しと結果
const stream = await agent.streamVNext("ニューヨーク市の天気は?", {
tools: { weather: weatherTool }
});
// ツール呼び出しを監視
const toolCalls = await stream.toolCalls;
const toolResults = await stream.toolResults;
console.log("呼び出されたツール:", toolCalls);
console.log("結果:", toolResults);
出力の完全アクセス
const stream = await agent.streamVNext("Analyze this data");
const output = await stream.getFullOutput();
console.log({
text: output.text,
usage: output.usage,
reasoning: output.reasoning,
finishReason: output.finishReason
});
フルストリームの処理
const stream = await agent.streamVNext("複雑なタスク");
for await (const chunk of stream.fullStream) {
switch (chunk.type) {
case 'text-delta':
process.stdout.write(chunk.payload.text);
break;
case 'tool-call':
console.log(`「${chunk.payload.toolName}」を呼び出しています…`);
break;
case 'reasoning-delta':
console.log(`推論: ${chunk.payload.text}`);
break;
case 'finish':
console.log(`完了!理由: ${chunk.payload.stepResult.reason}`);
break;
}
}
エラー処理
const stream = await agent.streamVNext("Analyze this data");
try {
// オプション1:consumeStream 内でエラーを処理する
await stream.consumeStream({
onError: (error) => {
console.error("Stream error:", error);
}
});
const result = await stream.text;
} catch (error) {
console.error("Failed to get result:", error);
}
// オプション2:error プロパティを確認する
const result = await stream.getFullOutput();
if (stream.error) {
console.error("Stream had errors:", stream.error);
}
関連型
- ChunkType - ストリーム全体で使用されるすべてのチャンク種別
- .streamVNext() - MastraModelOutput を返すメソッド