当前位置: 首页 > article >正文

16.人工智能实战:大模型回答格式总是不稳定?JSON Schema 约束、重试修复与结构化输出完整方案

人工智能实战大模型回答格式总是不稳定JSON Schema 约束、重试修复与结构化输出完整方案一、问题场景AI 回答内容对了但系统解析失败在很多 AI 应用中模型不是只负责聊天而是要输出结构化结果。例如1. 从简历中抽取姓名、学历、技能 2. 从合同中抽取甲方、乙方、金额 3. 对客服对话做分类 4. 根据用户需求生成任务 JSON 5. Agent 调用工具前生成参数这类场景最怕的问题是模型回答看起来对但不是合法 JSON。真实线上问题包括1. 多输出了一段解释文字 2. JSON 少了逗号 3. 字段名不一致 4. 数组变成字符串 5. null、空字符串、缺字段混用 6. 中文引号导致解析失败例如我们希望模型输出{name:张三,skills:[Python,FastAPI],level:senior}但模型可能输出以下是提取结果 { 姓名: 张三, 技能: Python, FastAPI }对人来说能看懂对系统来说就是失败。这篇文章解决的问题是如何让大模型稳定输出可解析、可校验、可修复的结构化 JSON。二、错误做法只在 Prompt 里说“请输出 JSON”很多人第一版会这样写请严格输出 JSON不要输出多余内容。这在简单场景下有效但线上不稳定。因为模型仍然可能1. 加解释 2. 字段漏掉 3. 类型错误 4. 输出 Markdown 代码块 5. 输出不符合业务枚举所以结构化输出不能只靠 Prompt。需要完整链路Prompt 约束 ↓ JSON 解析 ↓ Schema 校验 ↓ 失败修复 ↓ 兜底处理三、目标结构定义假设我们要做简历信息抽取。期望输出{name:张三,education:本科,skills:[Python,FastAPI,PyTorch],years_of_experience:5,level:senior}字段规则name字符串 education字符串 skills字符串数组 years_of_experience整数 level只能是 junior / middle / senior四、项目结构structured-output-demo/ ├── app.py ├── schema.py ├── parser.py ├── prompt.py └── repair.py安装依赖pipinstallfastapi uvicorn pydantic五、定义 SchemafrompydanticimportBaseModel,FieldfromtypingimportList,LiteralclassResumeExtractResult(BaseModel):name:strField(...,description候选人姓名)education:strField(...,description最高学历)skills:List[str]Field(...,description技能列表)years_of_experience:intField(...,ge0,le50)level:Literal[junior,middle,senior]这个 Schema 很关键。它不只是类型声明也是后续校验标准。六、构造强约束 Promptdefbuild_extract_prompt(resume_text:str):returnf 你是一个信息抽取助手。 请从简历文本中抽取信息并只输出合法 JSON。 【字段要求】 {{ name: 字符串候选人姓名, education: 字符串最高学历, skills: [字符串数组技能列表], years_of_experience: 整数工作年限, level: 只能是 junior / middle / senior }} 【规则】 1. 只能输出 JSON不要输出解释。 2. 不要使用 Markdown 代码块。 3. skills 必须是数组。 4. years_of_experience 必须是整数。 5. level 只能是 junior、middle、senior。 6. 如果信息缺失请根据文本保守判断不要编造。 【简历文本】{resume_text}这里要注意字段要求和规则要分开写。模型更容易遵守。七、JSON 解析器 parser.pyimportjsonimportredefextract_json(text:str):texttext.strip()# 去掉 markdown 代码块texttext.replace(json,).replace(,).strip()# 如果前后有解释尝试截取 JSON 对象matchre.search(r\{.*\},text,re.S)ifnotmatch:raiseValueError(No JSON object found)json_textmatch.group(0)returnjson.loads(json_text)这个解析器解决模型多输出解释 模型输出 Markdown 代码块八、Schema 校验fromschemaimportResumeExtractResultfromparserimportextract_jsondefparse_and_validate(raw_output:str):dataextract_json(raw_output)resultResumeExtractResult(**data)returnresult测试raw json{name:张三,education:本科,skills:[Python,FastAPI],years_of_experience:5,level:senior}“”result parse_and_validate(raw)print(result)--- ## 九、失败修复 repair.py 真实项目中第一次输出不合法很常见。 这时不要直接失败可以让模型修复。 python def build_repair_prompt(raw_output: str, error: str): return f 下面是一个模型输出的 JSON但它不符合要求。 【错误信息】 {error} 【原始输出】 {raw_output} 请修复为合法 JSON并满足以下要求 {{ name: 字符串, education: 字符串, skills: [字符串数组], years_of_experience: 整数, level: junior / middle / senior }} 只输出修复后的 JSON不要解释。 解析流程defrobust_parse(raw_output:str,llm_call):try:returnparse_and_validate(raw_output)exceptExceptionase:repair_promptbuild_repair_prompt(raw_output,str(e))repairedllm_call(repair_prompt)returnparse_and_validate(repaired)十、完整 FastAPI 示例fromfastapiimportFastAPI,HTTPExceptionfrompydanticimportBaseModelfrompromptimportbuild_extract_promptfromschemaimportResumeExtractResultfromparserimportparse_and_validatefromrepairimportbuild_repair_prompt appFastAPI(titleStructured Output Demo)classExtractRequest(BaseModel):resume_text:strdefmock_llm(prompt:str):return { name: 张三, education: 本科, skills: [Python, FastAPI, PyTorch], years_of_experience: 5, level: senior } app.post(/extract,response_modelResumeExtractResult)defextract(req:ExtractRequest):promptbuild_extract_prompt(req.resume_text)raw_outputmock_llm(prompt)try:resultparse_and_validate(raw_output)returnresultexceptExceptionase:repair_promptbuild_repair_prompt(raw_output,str(e))repaired_outputmock_llm(repair_prompt)try:returnparse_and_validate(repaired_output)exceptExceptionasfinal_error:raiseHTTPException(status_code500,detailfparse failed:{str(final_error)})启动uvicorn app:app--port8000请求curl-XPOSThttp://127.0.0.1:8000/extract\-HContent-Type: application/json\-d{ resume_text: 张三本科学历5年Python开发经验熟悉FastAPI和PyTorch。 }十一、验证结果优化前模型输出不稳定 JSON 解析经常失败 字段类型不一致优化后Prompt 限制输出 Parser 提取 JSON Pydantic 校验类型 Repair 修复错误 接口返回稳定结构这套方案的核心是不要相信模型一次输出一定正确。十二、踩坑记录坑 1只靠 PromptPrompt 能减少错误但不能消除错误。必须有程序校验。坑 2没有类型校验JSON 能解析不代表业务正确。例如{skills:Python, FastAPI}这是合法 JSON但不是你要的结构。坑 3字段枚举不限制分类任务必须限制枚举值。否则模型可能输出高级 资深 Senior Engineer系统很难处理。坑 4修复无限重试最多重试 1~2 次。否则模型异常时会拖垮系统。坑 5错误样本不沉淀每次解析失败都应该记录原始输入 模型输出 错误信息 修复结果这些是后续优化 Prompt 和 Schema 的关键数据。十三、适合收藏的结构化输出 ChecklistPrompt [ ] 是否明确只输出 JSON [ ] 是否给出字段示例 [ ] 是否限制枚举值 [ ] 是否禁止 Markdown 解析 [ ] 是否去掉代码块 [ ] 是否能提取 JSON 对象 [ ] 是否处理多余解释文本 校验 [ ] 是否使用 Schema [ ] 是否校验字段类型 [ ] 是否校验枚举值 [ ] 是否校验数值范围 修复 [ ] 是否支持一次修复 [ ] 是否限制重试次数 [ ] 是否记录失败样本 上线 [ ] 是否有兜底策略 [ ] 是否有错误率监控 [ ] 是否有坏例回收机制十四、经验总结结构化输出是大模型落地中非常关键的一环。聊天场景里模型多说几句影响不大。但系统集成场景里模型输出必须可解析 可校验 可修复 可监控一句话总结大模型结构化输出不能只靠“请输出JSON”必须靠工程链路兜住。十五、优化建议后续可以继续做1. 使用 function calling / tools 2. 使用 JSON mode 3. 增加字段级置信度 4. 对高风险字段二次校验 5. 建立结构化输出评测集 6. 将失败样本自动回流 Prompt 优化 7. 对不同业务定义不同 Schema最后一句经验模型负责生成工程负责兜底。两者缺一不可。

相关文章:

16.人工智能实战:大模型回答格式总是不稳定?JSON Schema 约束、重试修复与结构化输出完整方案

人工智能实战:大模型回答格式总是不稳定?JSON Schema 约束、重试修复与结构化输出完整方案一、问题场景:AI 回答内容对了,但系统解析失败 在很多 AI 应用中,模型不是只负责聊天,而是要输出结构化结果。 例如…...

实战应用:通过快马快速构建vmware虚拟机网络安全攻防靶场

实战应用:通过快马快速构建VMware虚拟机网络安全攻防靶场 在网络安全学习和实战演练中,搭建一个隔离的测试环境是必不可少的。VMware虚拟机因其稳定性和灵活性,成为搭建网络安全靶场的首选工具。但手动配置多台虚拟机、设置网络环境、安装工…...

手把手教你用AT32F423和NCN5120自制KNX-USB调试模块(附完整PCB与源码)

手把手教你用AT32F423和NCN5120自制KNX-USB调试模块(附完整PCB与源码) KNX作为智能家居和楼宇自动化领域的国际标准协议,其调试工具往往价格昂贵且功能封闭。本文将带你从零开始,用国产MCU雅特力AT32F423和NCN5120 KNX接口芯片&am…...

大模型工具调用对话的工程范式对比——以 DeepSeek-V4 为切入点

引言 在大模型的能力版图里,"推理"和"知识"长期是主角,而"工具调用"则被视为一个工程细节——似乎把 JSON Schema 喂给模型、让它吐回一段结构化 JSON 就够了。但随着 Agent 范式的崛起,这个看似平淡的接口层正在变成整个系统架构的应力集中…...

3分钟掌握Windows Defender永久禁用技巧:开源管理工具完全指南

3分钟掌握Windows Defender永久禁用技巧:开源管理工具完全指南 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-contro…...

Java任务编排框架的终极解决方案:如何用DAG引擎提升微服务架构效率?

Java任务编排框架的终极解决方案:如何用DAG引擎提升微服务架构效率? 【免费下载链接】taskflow taskflow是一款轻量、简单易用、可灵活扩展的通用任务编排框架,基于有向无环图(DAG)的方式实现,框架提供了组件复用、同步/异步编排、…...

为什么BetterGI的自动战斗系统如此智能?深度解析原神自动化辅助工具的技术奥秘

为什么BetterGI的自动战斗系统如此智能?深度解析原神自动化辅助工具的技术奥秘 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 …...

鸿蒙系统开发者如何快速接入大模型服务,使用Taotoken实现多模型调用

鸿蒙系统开发者如何快速接入大模型服务,使用Taotoken实现多模型调用 1. 鸿蒙应用集成AI能力的挑战 在鸿蒙应用开发中引入大模型能力时,开发者常面临几个实际问题。首先是模型供应商的选择与接入复杂度,不同厂商的API协议、认证方式和计费模…...

5个实战技巧:彻底解决Mesa3D Windows驱动部署难题

5个实战技巧:彻底解决Mesa3D Windows驱动部署难题 【免费下载链接】mesa-dist-win Pre-built Mesa3D drivers for Windows 项目地址: https://gitcode.com/gh_mirrors/me/mesa-dist-win 你是否曾经在Windows上尝试使用Mesa3D驱动时,遇到了令人头疼…...

怪物猎人世界终极叠加层指南:HunterPie免费工具5分钟快速上手

怪物猎人世界终极叠加层指南:HunterPie免费工具5分钟快速上手 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/Hunte…...

D3KeyHelper:5个核心机制解析与实战配置指南——暗黑3技能连点器深度剖析

D3KeyHelper:5个核心机制解析与实战配置指南——暗黑3技能连点器深度剖析 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一…...

专业音频转换工具:3步实现跨平台音乐自由播放

专业音频转换工具:3步实现跨平台音乐自由播放 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitco…...

如何高效配置Windows虚拟游戏手柄:vJoy完整实战指南

如何高效配置Windows虚拟游戏手柄:vJoy完整实战指南 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 想要在Windows系统上体验专业游戏手柄的控制感,却不想购买昂贵的硬件设备?vJoy虚拟摇杆…...

完全掌握华硕笔记本性能优化:G-Helper专业级硬件控制实战指南

完全掌握华硕笔记本性能优化:G-Helper专业级硬件控制实战指南 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zen…...

为内部知识库问答系统集成Taotoken多模型能力的架构思考

为内部知识库问答系统集成Taotoken多模型能力的架构思考 1. 多模型接入的核心价值 在企业知识库问答系统的架构设计中,模型能力的多样性直接影响回答质量与系统可靠性。通过Taotoken平台提供的统一API接入层,架构师可以避免为每个模型供应商单独维护对…...

高效二维码工具:Chrome-QRCode完整指南,5分钟掌握跨设备内容传输

高效二维码工具:Chrome-QRCode完整指南,5分钟掌握跨设备内容传输 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中…...

Python医疗影像预处理崩溃全记录(CT/MRI/DR三模态调试避坑手册)

更多请点击: https://intelliparadigm.com 第一章:Python医疗影像预处理崩溃全记录(CT/MRI/DR三模态调试避坑手册) 医疗影像预处理是AI辅助诊断 pipeline 中最易“静默失败”的环节——看似加载成功,实则像素值溢出、…...

初创团队如何通过 Taotoken 统一管理多个 AI 模型的开发与成本

初创团队如何通过 Taotoken 统一管理多个 AI 模型的开发与成本 1. 多模型接入的挑战与解决方案 初创技术团队在开发 AI 产品原型时,往往需要同时调用多个大模型进行功能验证和效果对比。传统模式下,开发者需要为每个模型单独注册账号、申请 API Key、对…...

前端新手福音:用快马平台和ccswitch轻松理解状态管理

作为一个刚接触前端状态管理的新手,我最近发现了一个特别适合入门的学习组合:ccswitch状态管理库InsCode(快马)平台。通过这个组合,我快速理解了状态管理的核心概念,而且整个过程完全不需要配置环境,特别适合像我这样刚…...

Agent 一接下拉选择器就开始选错项:从 Option Grounding 到 Commit Fence 的工程实战

很多团队把浏览器 Agent 接进运营后台后,最容易低估的不是按钮,而是下拉选择器。⚠️ 页面上明明看到了“华东一区”或“标准版”,提交后落库的却是另一个同名选项,最后一路传导到权限和审批流配置。 人类在选下拉项时&#xff0c…...

长期使用Taotoken服务对其API稳定性和客服响应速度的感受

长期使用Taotoken服务对其API稳定性和客服响应速度的感受 1. 平台API稳定性体验 在过去六个月的日常开发工作中,我们团队持续使用Taotoken作为大模型API的统一接入层。从技术指标来看,API端点响应成功率保持在较高水平,未出现长时间服务不可…...

Agent 一接无限滚动页就开始漏内容:从 Viewport Checkpoint 到 Stable Item Key 的工程实战

很多团队把浏览器 Agent 接到商品流或监控列表后,第一批线上事故并不是“不会滚动”,而是它滚得很勤,却依旧漏内容。⚠️ 页面每次只暴露一个视口,模型若把“当前看到的列表”直接当成“完整世界”,结果就会一边下滚一…...

Agent 一接 Canvas 图表页就开始读错数据:从 Bitmap OCR 到 Semantic Overlay 的工程实战

很多团队把浏览器 Agent 接进运营大屏后,第一批事故并不是按钮点不到,而是图表读错了。⚠️ 页面上明明显示“退款率上升”,执行器却把另一条系列当成目标,随后导出错误结论、点击错误筛选,整条分析链路都被带偏。 人…...

【计算机毕业设计】基于Springboot的在线课程管理系统+LW

博主介绍:✌全网粉丝3W,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、…...

WebPlotDigitizer终极指南:5分钟掌握科研图表数据提取神器

WebPlotDigitizer终极指南:5分钟掌握科研图表数据提取神器 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 还在为从科研论文…...

CAPL诊断自动化避坑指南:从diagGetLastResponseCode返回值说起

CAPL诊断自动化避坑指南:从diagGetLastResponseCode返回值说起 在车载电子控制单元(ECU)的自动化测试领域,诊断协议脚本的调试过程往往比开发更耗时。许多工程师能够快速完成CAPL脚本的初步编写,却在测试报告分析阶段陷…...

LlamaIndexTS:TypeScript生态下的RAG应用开发实战指南

1. 项目概述:当LlamaIndex遇上TypeScript 如果你最近在折腾大语言模型应用开发,尤其是想给现有的Web应用或者Node.js后端加上智能问答、文档分析这类“AI能力”,那你大概率听说过LlamaIndex。这个Python生态里的明星项目,几乎成了…...

终极Betaflight Configurator配置指南:从零构建专业级无人机调参环境

终极Betaflight Configurator配置指南:从零构建专业级无人机调参环境 【免费下载链接】betaflight-configurator Cross platform configuration and management application for the Betaflight firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight…...

PyPI镜像失效、pip install卡死、torch.cuda.is_available()返回False?Python AI配置崩溃前的最后3分钟急救指南

更多请点击: https://intelliparadigm.com 第一章:PyPI镜像失效、pip install卡死、torch.cuda.is_available()返回False?Python AI配置崩溃前的最后3分钟急救指南 当 pip install 在下载 torch 时无限挂起,或 import torch; pri…...

APK Installer:3个创新设计重新定义Windows安卓应用部署

APK Installer:3个创新设计重新定义Windows安卓应用部署 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 当传统安卓模拟器还在为资源占用和性能损耗苦苦挣扎…...