ドキュメンテーション

構造化された応答

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スキーマを使用した強制

JSONスキーマを使用して構造化された応答を強制することもできます。

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スキーマの場合、スキーマを満たさない無効な文字列を受け取ることになります。