ドキュメンテーション
構造化された応答
LLMからの特定の応答形式を強制するには、`.respond()` メソッドにスキーマ(JSONまたはzod
)を提供します。これにより、モデルの出力が提供されたスキーマに準拠することが保証されます。
zod
スキーマを使用した強制モデルに与えられたスキーマを満たすJSONを生成させたい場合は、zod
を使用してスキーマを提供することをお勧めします。zod
スキーマが提供されると、予測結果には追加のフィールドparsed
が含まれ、そこには解析され、検証され、型付けされた結果が含まれます。
zod
スキーマの定義import { z } from "zod"; // A zod schema for a book const bookSchema = z.object({ title: z.string(), author: z.string(), year: z.number().int(), });
const result = await model.respond("Tell me about The Hobbit.",
{ structured: bookSchema },
maxTokens: 100, // Recommended to avoid getting stuck
);
const book = result.parsed;
console.info(book);
// ^
// Note that `book` is now correctly typed as { title: string, author: string, year: number }
JSONスキーマを使用して構造化された応答を強制することもできます。
// A JSON schema for a book const schema = { type: "object", properties: { title: { type: "string" }, author: { type: "string" }, year: { type: "integer" }, }, required: ["title", "author", "year"], };
const result = await model.respond("Tell me about The Hobbit.", {
structured: {
type: "json",
jsonSchema: schema,
},
maxTokens: 100, // Recommended to avoid getting stuck
});
const book = JSON.parse(result.content);
console.info(book);
構造化生成は、モデルが提供されたスキーマに準拠するトークンのみを生成するように制約することで機能します。これにより、通常の場合には有効な出力が保証されますが、2つの重要な制限があります。
モデル(特に小規模なもの)は、スキーマの要件により、未完了の構造(開始括弧など)に閉じ込められたままになることがあります。これは、その構造内にいることを「忘れて」しまい、停止できなくなるためです。そのため、無限生成を防ぐために、常にmaxTokens
パラメータを含めることをお勧めします。
スキーマの準拠は、完全で成功した生成に対してのみ保証されます。生成が中断された場合(キャンセル、maxTokens
制限への到達、その他の理由による)、出力はスキーマに違反する可能性があります。zod
スキーマ入力の場合、これによりエラーが発生します。JSONスキーマの場合、スキーマを満たさない無効な文字列を受け取ることになります。
このページで
zod
スキーマを使用した強制
- zod
スキーマの定義
- 構造化された応答の生成
JSONスキーマを使用した強制
- JSONスキーマの定義
- 構造化された応答の生成