docs(v2): 更正第一批记录中模型失败的错误归因

原记录归因于"演示项目缺 financial.operating_cashflow 导致模型引用未知字段",
与代码不符:已定义但本次无值的字段仍会建键(apply_candidate 无条件建键),
不会触发该守卫,补该字段因此不可能修好它。

更正为字段表三处缺陷(方法文档 inputs 超出字段表、守卫比对错集合、未下发字段清单),
并补记实测结果、证据路径,以及一项未修复的完整性漏报(skill-quality 只遍历已存在值的字段)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
2026-09-30 17:38:35 +08:00
co-authored by Claude Code
parent 4df80c0053
commit 350146d9bc
+45 -11
View File
@@ -7,15 +7,15 @@
## 第一批:接通正常预审执行链
状态:**部分完成**(执行链已接通并经真实运行验收;界面点击本身尚未由自动化驱动,
材料确认步骤未在浏览器中完整走一遍)。
状态:**部分完成**(执行链已接通并经真实运行验收;模型类技能已能跑完全程,见文末
「更正记录」;界面点击本身尚未由自动化驱动,材料确认步骤未在浏览器中完整走一遍)。
### 页面入口
| 入口 | 位置 |
|---|---|
| 发起预审 | `/xingbang-workbench?project=DEMO-B`「材料与问题」页 → 顶部"开始AI预审"按钮 |
| 查看结果与依据 | 同页「预审与推进沙盘」面板:主审意见、核查结果(4)、核查维度(10)、每条"查看依据" |
| 查看结果与依据 | 同页「预审与推进沙盘」面板:主审意见、核查结果、核查维度(10)、每条"查看依据" |
### 操作步骤(实际执行)
@@ -63,16 +63,50 @@
**未闭合部分**:仍是接口调用而非浏览器点击。
- **演示角色需要 `XINGBANG_DEMO_ROLE_LOGIN=1`**:否则 worker 的 `authorized()` 会把
演示角色发起的运行判为"权限已撤销"(运行会失败但可读)。这是配置要求,需写入部署说明。
- **模型已接通,但预算不足**:配置 DeepSeek(`XINGBANG_LOCAL_MODEL_*`)后,模型类技能
`corporate.analysis` 真实发起调用,先后遇到两类失败,都如实记成降级:
1. `模型引用未知字段` —— 模型的引用被字段守卫拒绝;根因是演示项目缺
`financial.operating_cashflow`,经上面"上传+确认"补齐后不再出现(守卫工作正常)。
2. `工具调用预算耗尽` —— 补齐字段后模型继续调用只读工具,超过方案冻结的
`max_tool_calls: 12` 而终止。
**待定**:提高演示方案的 `max_tool_calls`(阈值属产品/评审决定,不擅自改)或收敛
Skill 的工具使用指令。在此之前,"模型全程跑完"仍未验证。
- **模型已接通并能跑完全程(2026-09-30 第二轮更正,见下方「更正记录」)**:配置 DeepSeek
(`XINGBANG_LOCAL_MODEL_*`)后,模型类技能 `corporate.analysis` 真实发起调用。
本轮首测仍报 `模型引用未知字段`——但**根因不是缺 `financial.operating_cashflow`**;
修复字段表三处缺陷后,模型跑完全程:工具调用 11 次 / 预算 18,降级记录为空。
- 取消中的运行不产出视图(只处理 completed/partial/failed)。
### 更正记录(2026-09-30 第二轮实测)
**更正**:本节原先记为"模型已接通,但预算不足",其归因有误。第二轮用真实模型复测后确认:
1. **`模型引用未知字段` 与缺 `financial.operating_cashflow` 无关。** "已定义但本次无值"的
字段,键仍然存在(`backend/services/assistant_materials.py` 的 `apply_candidate` 无条件建键),
不会触发该守卫;补这个字段因此不可能修好它。实测补件后(revision 2→4,缺证清零)报错照旧。
2. **真正被拒的是 `repayment.*`,进而是字段表的三处缺陷**:
- `backend/skills/financial-leasing-*/SKILL.md` 的 `inputs` 声明了 8 个 S1 标准字段表里
**不存在**的字段:还款来源、涉诉、增信、保证金、保险、客户名称;
- 字段守卫比对的是"当前恰好有值的字段",而非标准字段表,于是把"标准字段但本次无数据"
误判为未知字段——与提示词自身"缺失资料标 unknown"**自相矛盾**;
- 模型从未被告知允许使用的字段名,只能靠猜(实测先猜 `repayment.annual_amount`,
放开后改猜 `metrics.debt_ratio`)。
3. **工具预算不是约束**:跑通的那次实际只用了 **11 次**,原值 12 本就够用。
`max_tool_calls` 12→18、超时 120s→180s 保留作余量,但**不构成修复**。
**已修复(4 个文件)**:
| 文件 | 改动 |
|---|---|
| `backend/services/assistant_materials.py` | 补 8 个标准字段;`NUMERIC` 排除两个非数值字段;`legal.case_count` 加非负整数校验 |
| `backend/services/assistant_model.py` | 守卫改为比对标准字段表;向模型下发 `standard_fields`;提示词加字段约束;删除遮蔽模块级导入的局部导入 |
| `backend/services/project_assistant.py` | 补 `insurance.`→租赁物、`deposit.`→增信 维度前缀 |
| `backend/services/component_registry.py` | 方案预算与版本(`1.0.0`→`1.1.0`) |
字段表三处是代码层改动,**对既有数据库立即生效**;预算存放在冻结组件里,需走
`POST /components` 草稿 → publish 才对既有库生效。
**实测结果**(一次性临时库 + DeepSeek,演示库未改动):`corporate.analysis` 由 `failed`
变为 `partial`(部分结果为 `unknown`,属如实标注而非失败),降级记录为空,
核查结果 3 条 → 14 条。证据:`test-evidence/20260930-171301-962d425/`
(`scripts/verify.py` 11/11 PASS,531 项单测)。
**本轮新发现、尚未修复**:`skill-quality` 的完整性检查只遍历"已存在值的字段"
(`backend/services/skill_executor.py`),因此**从未提供过的字段永远不会被判为缺失**——
真实项目下"资料完整性"会漏报。建议单独立项,不并入本批。
---
## 运行环境配置(本地演示,2026-09-30 实测)