Skip to content

原文(日本語に翻訳)

複数のスキーマを使用する際に約50%の失敗率を引き起こしていたStructuredOutputスキーマキャッシュのバグを修正しました。

原文(英語)

Fixed StructuredOutput schema cache bug causing ~50% failure rate when using multiple schemas

概要

StructuredOutputで複数の異なるスキーマを使用する場合に、スキーマキャッシュの不具合により約50%の確率でリクエストが失敗していました。この問題は、複数のスキーマが混在するワークフローで特に影響が大きく、ランダムに失敗するため原因の特定が難しいものでした。v2.1.89でこのキャッシュバグが修正され、安定した動作が保証されます。

基本的な使い方

StructuredOutputを使用した構造化出力の取得:

typescript
// Claude Code SDK での StructuredOutput 使用例
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

// スキーマ1: ユーザー情報
const userSchema = {
  type: "object",
  properties: {
    name: { type: "string" },
    email: { type: "string" },
  },
  required: ["name", "email"],
};

// スキーマ2: 商品情報
const productSchema = {
  type: "object",
  properties: {
    title: { type: "string" },
    price: { type: "number" },
  },
  required: ["title", "price"],
};

// 修正後: 複数のスキーマを交互に使用しても安定して動作する

実践例

複数スキーマを使ったバッチ処理

typescript
// 修正前は約50%の確率で失敗していたパターン
async function processMultipleSchemas() {
  const schemas = [userSchema, productSchema, userSchema, productSchema];

  for (const schema of schemas) {
    // 修正前: スキーマが交互に変わると失敗が多発
    // 修正後: 安定して動作する
    const result = await client.messages.create({
      model: "claude-opus-4-5",
      max_tokens: 1024,
      messages: [{ role: "user", content: "..." }],
      // structured output schema
    });
    console.log(result);
  }
}

エラーハンドリングの確認

typescript
// 修正前は再試行ロジックが必要だったケース
async function withRetry(fn: () => Promise<any>, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (e) {
      if (i === maxRetries - 1) throw e;
      console.log(`Retry ${i + 1}...`);
    }
  }
}

// 修正後: 再試行なしで安定して動作する

注意点

  • この問題は複数の異なるスキーマを同一セッションで使用する場合に発生していました
  • 単一スキーマのみ使用している場合は影響を受けていませんでした
  • 修正により、StructuredOutputを使った自動化ワークフローの信頼性が大幅に向上します
  • v2.1.89以前で「ランダムに失敗する」という問題が発生していた場合、このバグが原因だった可能性があります

関連情報