告别手写正则解析:Laravel AI 结构化输出(Structured Output)实战教程
【免费下载链接】aiThe Laravel AI SDK provides a unified, expressive API for interacting with AI providers such as OpenAI, Anthropic, Gemini, and more.项目地址https://gitcode.com/gh_mirrors/ai89/ai点击查看免费下载使用Laravel AIlaravel/ai的结构化输出功能你可以让 AI 直接返回符合 JSON Schema 的数组或对象彻底告别正则匹配、字符串截取这些脆弱的解析方式。本文用最短路径带你跑通创建 Agent → 定义 Schema → 取出结构化数据全程不到 10 分钟。为什么你需要结构化输出调用 AI 做意图识别、信息抽取时常见的老办法是这样的让 AI 返回固定格式的文本然后用preg_match一点点抠出字段……这种方式问题很多AI 偶尔多一个空格、换行、中英文标点混用正则就可能全线崩溃你只能不断修补。而Structured Output的思路完全不同对比项正则解析文本结构化输出输出格式靠 Prompt 约定 运气由 Schema 严格约束解析代码一堆preg_match直接得到 PHP 数组可靠性低需反复调试高各 Provider 原生支持可维护性改提示词就要改正则只改 Schema 定义Laravel AI 将 OpenAI、Anthropic、Gemini、Bedrock、DeepSeek 等十几个 Provider 的结构化输出统一成了同一套 API——你写一份 Schema所有供应商通用。准备工作先安装 Laravel AI 包并配置至少一个 Provider 的 API Key以 OpenAI 为例配置位于config/ai.phpcomposer require laravel/ai// config/ai.php providers [ openai [ key env(OPENAI_KEY), ], ],完整配置参考仓库内的 config/ai.php。第一步一键生成结构化 AgentLaravel AI 内置了make:agent命令加上--structured参数或缩写-s即可生成带结构化输出的 Agent 骨架命令定义见 src/Console/Commands/MakeAgentCommand.phpphp artisan make:agent SummarizeAgent --structured命令会在app/Ai/Agents下创建类文件其模板来自 stubs/structured-agent.stub。生成的类实现了Agent与HasStructuredOutput两个接口核心就是一个schema()方法use Illuminate\Contracts\JsonSchema\JsonSchema; use Laravel\Ai\Contracts\Agent; use Laravel\Ai\Contracts\HasStructuredOutput; use Laravel\Ai\Promptable; class SummarizeAgent implements Agent, HasStructuredOutput { use Promptable; public function instructions(): string { return 你是文章摘要助手请提取标题、摘要和关键词。; } public function schema(JsonSchema $schema): array { return [ title $schema-string()-required(), summary $schema-string()-required(), keywords $schema-array()-items($schema-string())-required(), ]; } }HasStructuredOutput接口只有一个方法源码见 src/Contracts/HasStructuredOutput.phppublic function schema(JsonSchema $schema): array;$schema是 Laravel 提供的 JsonSchema 类型工厂string()、array()、number()、object()、boolean()等方法链式声明字段类型.required()标记必填。你不再需要在 Prompt 里写请严格按TITLE: xxx的格式输出——格式由 Schema 声明式地交给 AI 执行。 官方测试里的一个真实示例是元素符号抽取schema()里只有一行symbol $schema-string()-required()非常简洁见 tests/Fixtures/Agents/StructuredAgent.php。第二步调用 Agent 并取回结构化数据Agent 创建完成后调用它只需要一行$response (new SummarizeAgent)-prompt( 请总结这篇文章 . $article );只要 Agent 实现了HasStructuredOutputSDK 的文本生成流程会自动检测并调用schema()判定逻辑在 src/Providers/Concerns/GeneratesText.php把解析结果包装成StructuredAgentResponse。这个响应对数据结构做了全面数组化源码见 src/Responses/StructuredAgentResponse.php// 像数组一样按字段取 $summary $response[summary]; // 或者直接整个转成数组 / JSON $data $response-toArray(); $json $response-toJson();没有任何json_decode外层文本没有正则$response[title]直接就是干净的字符串。底层发生了什么请求阶段SDK 把schema()返回的定义转成标准 JSON Schema传给 Provider。支持原生结构化输出的供应商如 Anthropic会走专用通道见 src/Gateway/Anthropic/Concerns/BuildsTextRequests.php。响应阶段Gateway 解析 AI 返回各 Provider 通过共享的DecodesStructuredOutput特性统一解码为 PHP 数组源码见 src/Gateway/Concerns/DecodesStructuredOutput.php。封装阶段结果注入StructuredAgentResponse供你按字段访问。进阶技巧1. 用#[Strict]开启严格模式给 Agent 类加上Strict属性定义见 src/Attributes/Strict.phpSDK 会在 Schema 上声明additionalProperties: falseAI 输出的字段一个都不能多、一个都不能少#[Strict] class SummarizeAgent implements Agent, HasStructuredOutput { // ... }ObjectSchema也会递归地给所有嵌套对象关闭额外属性逻辑见 src/ObjectSchema.php。2. 指定模型与 Provider通过属性快速绑定#[Model(gpt-4o)] #[Provider(openai)]属性定义位于 src/Attributes/Model.php 与 src/Attributes/Provider.php更多可选属性Temperature、MaxTokens、Timeout等都在 src/Attributes/ 目录下。3. 匿名 Agent 也能结构化输出不想写类可以直接用StructuredAnonymousAgent内联定义源码见 src/StructuredAnonymousAgent.php适合在 Controller 里快速原型验证。4. 查看原始响应做调试$response-raw是底层 HTTP 响应对象排查 Provider 层面的问题时非常有用——测试代码中的用法可参考 tests/Feature/Providers/Anthropic/RawResponseTest.php。常见问题 FAQQ哪些 Provider 支持结构化输出ASDK 覆盖了 OpenAI、Anthropic、Gemini、Bedrock、Cohere、DeepSeek、Groq、Mistral、Ollama、OpenRouter、XAI 等主流供应商Gateway 目录下的ParsesTextResponses均集成了结构化解码目录见 src/Gateway/。Q结构化输出会影响工具调用Tools吗A不会。结构化输出与HasTools接口正交Agent 可以同时声明工具和 SchemaSDK 的多步循环TextGenerationLoop会一并处理。Q流式响应支持吗A支持。stream()同样会识别HasStructuredOutput逻辑在 src/Providers/Concerns/StreamsText.php。QSchema 里能定义嵌套对象和数组吗A可以。类型工厂支持object()、array()-items(...)等嵌套结构且additionalProperties会被递归禁用见 src/ObjectSchema.php。小结用php artisan make:agent 名称 --structured生成骨架在schema()中用类型工厂声明字段Schema 即契约调用prompt()后$response[字段名]直接取值零解析代码加#[Strict]可获得最严格的输出约束从正则 字符串到Schema 数组这就是 Laravel AI 结构化输出带给你的确定性。延伸阅读接口定义src/Contracts/HasStructuredOutput.php响应封装src/Responses/StructuredAgentResponse.php命令实现src/Console/Commands/MakeAgentCommand.php官方文档docs/official.md赞分享【免费下载链接】aiThe Laravel AI SDK provides a unified, expressive API for interacting with AI providers such as OpenAI, Anthropic, Gemini, and more.项目地址https://gitcode.com/gh_mirrors/ai89/ai点击查看免费下载相关推荐Open Generative AI 本地部署:无 GPU 也能跑 400 模型,从零到出片Open Generative AI 本地部署:无 GPU 也能跑 400 模型,从零到出片 Open Generative AI 本地部署是套自托管的AI 应用媒体生成大模型PocketFlow 结构化输出实战用提示词工程 YAML 实现简历信息抽取Structured OutputPocketFlow 结构化输出实战用提示词工程 YAML 实现简历信息抽取Structured Output 导读 本文围绕 PocketFlow人工智能大模型AI Agent工作流自动化RAGvllm-ascend 结构化输出Structured Output完全指南用法与 Ascend 实现原理vllm ascend 结构化输出Structured Output完全指南用法与 Ascend 实现原理 导读 结构化输出Structured Out人工智能大模型模型推理服务AscendCANN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考