Files
MediaOrganizer/docs/adr/0017-ai-response-json-tolerance.md
T
Shuery c1ed1795c2
CI / lint + test + build (push) Canceled after 0s
docs: 重写 README、新增项目报告与开发工具配置
- README 现代化重写:徽章区、特性一览、统一 GitHub 提示块格式、修正版本号与 AI 默认值
- 新增 docs/PROJECT_REPORT.md 学术项目报告(含许可证合规分析与死链修复记录)
- 收录 23 份 ADR 架构决策记录与 CONTEXT.md 领域术语表
- 新增开发配置:.editorconfig / .shellcheckrc / .markdownlint-cli2.jsonc
- .gitignore 补充 mo_map/、检查报告、编辑器临时文件
- 新增 config.example.json 配置模板(不含真实密钥)
2026-08-14 22:41:40 +08:00

1.4 KiB

AI 响应 JSON 容错提取链

AI_SYSTEM_MESSAGE 强制模型"仅输出 JSON"只是要求,推理模型(DeepSeek-R1 类)实际会输出 <thinking>…</thinking>、「思考:」前缀或代码围栏——此前 jq -e . 校验失败即整批丢弃(该批所有条目留待重试,浪费一轮 + 额度)。决定:新增 ai_extract_json 四级容错链——① 直接解析 → ② 剥 ```json/``` 围栏后解析 → ③ 剥离思考链标记(<thinking> 块 + 「思考/分析/推理:」前缀)后重试直接/围栏解析 → ④ 取最外层 {} 块解析。任何一级 jq 验证通过即返回;全部失败保持原失败路径(条目留待下批)。

边界语义:① 纯 awk/sed 实现(零新依赖,busybox 兼容);② 第 ④ 级花括号配平不识别字符串内 {}——仅作兜底,误计最多导致该级失败,不影响前三级;③ 成功提取不改变后续语义(仍是同一个 JSON 对象,jq 消费端无感知);④ 失败日志只截取前 200 字符(防超长响应刷屏)。

Considered Options: 维持严格校验(原状)——模型纪律不可依赖,推理模型输出思考内容时整批失效;客户端 SDK 结构化输出(response_format)——本项目用 curl 直连 OpenAI 兼容端点,无法依赖 SDK 能力(各兼容服务对 json_schema 支持不一);提示词强化——与系统消息重复,仍不保证遵守。