需要把claude的回答接入表单、数据库或后续程序时,可以使用结构化输出指定字段与类型。php sdk支持通过jsonoutputformat和outputconfig提交json schema。下面以fable 5.2生成文章标题和标签为例,区别于仅在提示词中要求“返回json”。
定义必填字段和额外字段规则
先安装anthropic-ai/sdk及兼容HTTP客户端,并准备API密钥。Schema中的required控制必填项,additionalProperties设为false,用于约束未声明字段。

官方PHP JSON Schema示例,示例模型以截图为准
<?php
require __DIR__ . '/vendor/autoload.php';
use Anthropic\Client;
use Anthropic\Messages\JSONOutputFormat;
use Anthropic\Messages\OutputConfig;
$key = getenv('ANTHROPIC_API_KEY');
if (!$key) { throw new RuntimeException('请先设置ANTHROPIC_API_KEY'); }
$schema = [
'type' => 'object',
'properties' => [
'title' => ['type' => 'string'],
'tags' => ['type' => 'array', 'items' => ['type' => 'string']],
],
'required' => ['title', 'tags'],
'additionalProperties' => false,
];
$message = (new Client(apiKey: $key))->messages->create(
maxTokens: 4096,
model: 'claude-fable-5-2',
messages: [['role' => 'user', 'content' => '为一篇PHP数组入门文章拟标题,并给出两个标签。']],
outputConfig: OutputConfig::with(format: JSONOutputFormat::with(schema: $schema)),
);
$text = '';
foreach ($message->content as $block) {
if ($block->type === 'text') { $text .= $block->text; }
}
if ($text === '') { throw new RuntimeException('未取得文本,请先检查停止原因'); }
$data = json_decode($text, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);先检查完整返回,再使用数据
示例按文本块类型读取,避免把思考块当成JSON。实际业务还应检查停止原因:遇到拒绝、输出预算耗尽或没有完整文本时,不要把半截结果直接写入数据库。通过Schema只说明结构满足要求,内容是否正确仍需业务校验。
赋予Agent实时语音交互能力。与Claude对话!超快TTS文字转语音,约90毫秒低延迟音频输出。
确认模型和组织限制
Fable 5.2在使用客户管理加密密钥的组织中,不能直接使用此处的结构化输出功能,应按官方迁移说明调整并在应用侧校验。截图是官方SDK通用示例,本文使用的模型ID和文本块读取方式按新模型要求设置。


















