原文(日本語に翻訳)
複数のスキーマを使用する際に約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以前で「ランダムに失敗する」という問題が発生していた場合、このバグが原因だった可能性があります