docs(memory): 记录可信度三件套落地、window 参数实机事实与 CAD 自启偏好

- project_review_agent_impl:三件套链路(结构化结论删除二次抽取、确定性检查前置、
  handle 交叉校验)、开关与数据结构;find_zero_length/find_duplicate_entities 的
  window 参数 schema 未声明但实机生效
- feedback_preferences:需要 CAD 时自己启动(自动加载已配好),不要先问用户
This commit is contained in:
gjm committed 2026-10-14 19:54:53 +08:00
1 parent 81d8c3d2ca
commit 17c202549e
3 files changed
+42 -2

No files matched your search

+28 -1
View File
@@ -1,6 +1,6 @@
---
name: LLM 识图审图 Agent —— 架构决策(已定稿)
description: cad_mcp_frame + 自研 Agent 的架构决策与分阶段路线——混合式(流水线骨架+受控只读取证子循环)、基座 B 最小集、标准化路线(先 stdio 桥)
description: cad_mcp_frame + 自研 Agent 的架构决策与分阶段路线——混合式(流水线骨架+受控只读取证子循环)、基座 B 最小集、可信度三件套(确定性检查前置/结构化结论/handle 交叉校验)、标准化路线(先 stdio 桥)
type: project
---
@@ -48,6 +48,29 @@ type: project
(构造即 `list_tools()` 触网);一律 `make_ctx()` 注入假件。
- `verify_mcp_frame.py`:基座改动验证脚本(分帧 / 大报文 / string id / 通知 / isError)。
## 可信度三件套(2026-10-14 落地)
根因是**「LLM 从自由文本里回忆 handle」**:原 `review_frame` 输出无格式约束的自由文本,
再用**第二次 LLM 调用**(`extract_issues`)转 JSON,handle 靠回忆 → 批注错位或丢失。
改后:`review_frame` 直接输出受约束 JSON `{summary, issues[]}`(**删除**二次抽取)
+ `checks.run_deterministic_checks`(确定性,handle 来自工具/数据本身)
→ `findings.build_finding`(合并 + handle 交叉校验)→ `annotator`(只批注 verified 的 handle)。
- **确定性检查前置**(`dwg_review/checks.py`):`find_zero_length` / `find_duplicate_entities`
(都传 `window`)+ 纯 Python 派生(空文字、未闭合多段线 `vertex_count>=3 and closed==false`)。
实机验证:四类全部检出。
- **结论结构化**:`checklist.build_system_prompt` 强约束只输出
`{summary, issues:[{category,severity,message,handle?}]}`;`review_frame` 仅在
「不再请求工具」的回合解析(中间工具回合的 content 永不解析);解析失败降级
`summary=原文, issues=[]`(信息不丢,只是不进批注)。实机验证 deepseek-flash 遵守契约。
- **证据交叉校验**(`findings.normalize_issue`):LLM 引用的 handle 不在已采集证据中时
**保留问题、剥掉 handle、`verified=False`**(永不批注);handle 比对统一 `upper()`。
- 开关(`config.py`,默认全开):`DETERMINISTIC_CHECKS` / `VALIDATE_HANDLES` /
`CHECK_UNCLOSED_POLYLINES`。
- 结构:issue = `{frame,category,severity,message,handle,handles?,source,verified}`;
findings 元素 = `{frame,sheet,summary,issues[],counts{deterministic,llm,unverified}}`。
## 环境事实
- **Pillow 已安装**(12.3.0)。截图下采样策略(`dwg_review/llm_client.py: downsample_image_b64`):
@@ -56,6 +79,10 @@ type: project
缩放后默认输出**无损 PNG**(`IMAGE_FORMAT=png`,适合线稿),需要更小体积可设 `IMAGE_FORMAT=jpeg`。
缺少 Pillow 时自动降级为原图直传。
- 视觉模型 `deepseek-flash`。
- **`find_zero_length` / `find_duplicate_entities` 的 `window` 参数:schema 未声明,但 C++ 侧
`parseCommonQuery` 实际支持**(2026-10-14 实机验证生效)。Python 侧直接传 `window` 即可,
不必改 JSON schema、不必重编 C++。注意 `find_duplicate_entities.limit` 语义是
**最大重复组数**(非条目数),返回 `{count, groups:[{reason,type,handles[]}]}`(非分页)。
- **`DEEPSEEK_API_KEY` 设在 Windows `Machine`(系统)级**。因新设的系统变量**不会传播到已启动
的进程**,`dwg_review/config.py` 的 `_read_env()` 在进程环境读不到时**回退读注册表**
(`HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment` → `HKCU\Environment`)。