Files
mini-openclaw-v2/docs/v2/17-batch-delivery-records.md
T
qiaoqichaoandClaude Code 350146d9bc docs(v2): 更正第一批记录中模型失败的错误归因
原记录归因于"演示项目缺 financial.operating_cashflow 导致模型引用未知字段",
与代码不符:已定义但本次无值的字段仍会建键(apply_candidate 无条件建键),
不会触发该守卫,补该字段因此不可能修好它。

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

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-30 17:38:35 +08:00

142 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 四批交付记录
口径见 [16 交付纠偏规格](16-delivery-corrections.md) §4:每批必须列出**页面入口、操作步骤、
实际结果、证据位置、剩余缺口**;未接通项标"部分完成"。
---
## 第一批:接通正常预审执行链
状态:**部分完成**(执行链已接通并经真实运行验收;模型类技能已能跑完全程,见文末
「更正记录」;界面点击本身尚未由自动化驱动,材料确认步骤未在浏览器中完整走一遍)。
### 页面入口
| 入口 | 位置 |
|---|---|
| 发起预审 | `/xingbang-workbench?project=DEMO-B`「材料与问题」页 → 顶部"开始AI预审"按钮 |
| 查看结果与依据 | 同页「预审与推进沙盘」面板:主审意见、核查结果、核查维度(10)、每条"查看依据" |
### 操作步骤(实际执行)
1. 启动 v2:后端 `uvicorn app:app --port 8012`(带 `XINGBANG_DEMO_ROLE_LOGIN=1`)、
前端 `npm run dev -- -p 3212`。
2. 经前端代理发起预审(与页面按钮同一请求):
`POST /api/risk-agent/project-assistant/projects/DEMO-B/runs`,角色头 `manager`。
3. 等 worker 执行结束(轮询运行状态)。
4. 读取 `GET .../prescreen/projects/DEMO-B/runs/{run_id}`。
5. 浏览器打开工作台并渲染面板截图。
### 实际结果
- 运行结束状态 `partial`,视图 `recommendation=supplement`,`probability=null`。
- **维度 10 个**:5 已核查 / 2 待核实 / 3 存在阻断项;阶段 1–2
(`corporate.consistency`、`corporate.cashflow`、`corporate.assets`、`corporate.coverage`、
`skill-quality`、`skill-finance`、`skill-credit`、`demo.coverage`、`rules-corporate`、`corporate.analysis`)。
- **核查结果 4 条**(`lease.coverage.below_demo_threshold`、`lease.asset.duplicate`、
`financial.cashflow.missing`、`financial.liabilities.conflict`),各带依据与组件版本。
- **证据 14 条**随视图返回,界面"查看依据"可展开来源与定位。
- **未完成项 1 条**:`RUN_STEP_FAILED 金租对公业务综合核查:未配置受信模型,语义核查未执行`
——模型不可用时如实标未完成,不伪造结论。
- 缺证 2 项:`financial.operating_cashflow`、存在尚未人工确认的材料候选。
- 反复发起产生多条记录(本轮 3 条),旧记录仍可读;轨迹引用指向本次运行。
- 呈现判定:10 维超出雷达可读范围 → 界面改用分组列表并保留全部维度(AC-44 真实分支)。
### 证据位置
| 内容 | 位置 |
|---|---|
| 会话内验证日志 | 本轮运行输出(发起→轮询→读视图) |
| 端到端测试 | `backend/test_prescreen_from_run.py`(12 项,真实 enqueue + worker 执行) |
| 界面渲染 | `claude_use/tmp/v2-batch1-panel.png`(本机截图,未入库) |
| 全量验证 | `test-evidence/20260930-123451-0228966/`(`scripts/verify.py` 11/11 PASS,531 项单测) |
| 推送状态 | 已推送 `origin/main`:`f118721..c5edb40`;`git ls-remote origin main` 实测与本地 HEAD 一致 |
### 剩余缺口
- **界面点击未由自动化驱动**:本机无 playwright/puppeteer/chromium-cli,发起预审是通过
与页面按钮同一条代理请求完成的;"点按钮"这一步没有脚本化证据。
- **材料确认已走通(部分闭合)**:通过应用自己的入口补齐演示项目缺的字段——
`POST /documents` 上传按解析器键名书写的材料(`operating_cashflow: 1200`)→
项目待确认候选 → `POST /supplements` 带 `candidate_ids` 确认 →
`financial.operating_cashflow` 等 3 个字段生效(revision 5→6)。
**未闭合部分**:仍是接口调用而非浏览器点击。
- **演示角色需要 `XINGBANG_DEMO_ROLE_LOGIN=1`**:否则 worker 的 `authorized()` 会把
演示角色发起的运行判为"权限已撤销"(运行会失败但可读)。这是配置要求,需写入部署说明。
- **模型已接通并能跑完全程(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 实测)
复现本记录需要以下环境变量。**密钥一律不入库、不写入任何文件**:本地演示用 shell 变量
展开传入,正式环境请用部署系统的密钥管理。
```bash
XINGBANG_DEMO_ROLE_LOGIN=1 # 演示角色发起运行必需,否则 worker 判"权限已撤销"
XINGBANG_LOCAL_MODEL_URL=https://api.deepseek.com/v1
XINGBANG_LOCAL_MODEL_NAME=deepseek-flash # 可换 deepseek-v4-pro(语义核查质量优先)
XINGBANG_LOCAL_MODEL_KEY=<你的 DeepSeek API Key>
# 后端启动前清空代理:实测直连 api.deepseek.com 可用(HTTP 200),
# 系统代理 127.0.0.1:7890 不可用(HTTP 000,与 AGENTS.md 记录的坑一致)
```
启动:`cd backend && venv/Scripts/python.exe -m uvicorn app:app --host 127.0.0.1 --port 8012`;
前端:`npm run dev -- -p 3212`,并设 `RISK_AGENT_BACKEND_URL=http://127.0.0.1:8012`(v2 隔离端口)。
---
## 第二批:完成历史经验加工流程
状态:**未开始**。
## 第三批:按已确认原型完成新版界面
状态:**未开始**。
## 第四批:接通评审反馈与改进发布
状态:**未开始**。