@anthropic-ai/claude-agent-sdk を利用していて、その出力形式を自然言語形式ではなく特定の型の JSON にしたいケースがある。その場合 outputFormat で JSONSchema を指定することで任意の形式の出力を得ることができる。
query({
prompt: '...',
options: {
outputFormat: {
type: 'json_schema',
schema
}
}
})
これと zod 4x 以降でサポートされた toJSONSchema を組み合わせると、 zod で定義した型の JSON を出力として指定することが可能となる。
しかし、 2026/02/04 時点では公式のドキュメント通りでは指定がうまく動作せず、自然言語で出力されてしまう。これは zod が吐き出す $schema フィールドが draft-2020-12 になっていることが原因のようで、draft-07 を指定することで動作するらしい。
つまり現状では以下のようなコードで期待した structured_output を得ることができる:
query({
prompt: '...',
options: {
outputFormat: {
type: 'json_schema',
schema: z.toJSONSchema(schema, { target: 'draft-07' })
}
}
})