ドキュメント

基本

構造化レスポンス

Pydantic (Python)、Zod (TypeScript)、またはJSON Schemaを使用してモデルからの構造化レスポンスを強制する

スキーマ (JSON または zod) を .respond() メソッドに渡すことで、LLMからの特定のレスポンス形式を強制できます。これにより、モデルの出力が提供されたスキーマに準拠することが保証されます。

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スキーマの場合、スキーマを満たさない無効な文字列が返されます。

このページのソースは GitHub で利用可能です。