feat(server): 参考 BidEngine 补五项:原因码、截断重跑、项目信息逐项表态、占位符、提示词规则对应校验

- 待确认记原因码(extract.FAILURES,存在 ai_values.failures),解析结果按原因计数
  (verify_failures);前端待确认条目显示具体原因
- 相邻分块重叠约 800 字;模型输出被截断或不是合法 JSON 时对半重跑(最多 3 层),
  拆到底仍不完整记 output_incomplete。修复:以前截断时整块条目被当成「没有结果」悄悄丢掉
- 项目基本信息提示词 v2:12 个字段逐项表态 found / ambiguous / not_found,跨分块合并为
  found / absent / needs_review(info_fields)
- 「____元」「××」「( )」「待填」等占位符不算取值
- 提示词 substantive v4,qualification / scoring / schedule / tech_param v3:每条禁止事项
  对应一个原因码,对照表在 prompts/README.md
- 顾问(Fable)深读参考项目的结论补进 ref-bid-engine-analysis.md §5;架构 §13 SK12
- 待确认:国动 4 → 2,S02 13 → 3,S06 57 → 55

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-03 21:59:12 +08:00
parent e3f234ca0b
commit f99bb8b358
22 changed files with 884 additions and 81 deletions

View File

@@ -2397,6 +2397,16 @@ components:
items_pending: { type: integer }
items_absent: { type: integer, description: 重新解析时没再出现的旧条目 }
lots_found: { type: integer }
verify_failures:
type: object
description: 没通过校验的原因码和条数(如 quote_too_short、value_unverified),评测和排查用
additionalProperties: { type: integer }
chunks_split: { type: integer, description: 模型输出被截断、把分块对半重跑的次数 }
output_incomplete: { type: integer, description: 拆到底输出仍不完整的分块数(这些分块的结果可能不全) }
info_fields:
type: object
description: 项目基本信息各字段的结论:found / absent(文件本身没写)/ needs_review(抽取有问题,要人核对)
additionalProperties: { type: string, enum: [found, absent, needs_review] }
created_at: { $ref: '#/components/schemas/Timestamp' }
finished_at:
oneOf: