Repository navigation
v1.4.2 — 第一次真实云端端到端 · 连引核验修复
v1.4.2 — 第一次真实云端端到端 · 连引核验修复
一句话:这是项目第一次在真实云端模型上跑通完整热路径(此前所有验证都是本地模型或零消耗
替身)。真跑逮到两个只有实战才暴露的缺陷,都已修复。
为什么有这一版
v1.4.1 之后堆了 21 个提交,其中两处是安全修复。本版的核心不是"加功能",而是把那个唯一
用零消耗手段补不上的洞补上:协议桥转译、json_schema 约束、并发模型、超时层次——这些
在 mock 与本地模型下都成立,但只有真接云端网关才能确认。
真跑经用户明确授权,共消耗 6 次上游调用(1 次单路探 + 5 次五路),单次约 ¥0.001 量级。
实测结果
单路探(1 次调用,只开「逻辑审计员」)
用 ADVISORS_YAML 临时名册只开一路、其余 enabled: false,1 次调用同时验三件事:
| 观察点 | 结果 |
|---|---|
协议桥转译(/bridge/v1 → Anthropic 协议 → 网关) |
通 |
response_format=json_schema 被遵守 |
是 |
顶层 res 字段(_parse_output 强取) |
正常 |
| 单次延迟 | 1.4–1.7s |
max_tokens 未被吃掉——输出 97–534 字符。这条验证了一个已知陷阱:给 mavis 传合法的
max_tokens 反而会导致 0 次调用(未知 kwargs 静默空转),所以 mavis_bridge.py 干脆不传,
由桥侧 DEFAULT_MAX_TOKENS 兜底。
五路并行(5 次调用,LLM_CONCURRENCY=5)
| 观察点 | 结果 |
|---|---|
| 五路状态 | 全 ok |
| 墙钟耗时 | 2.88s(最慢一路 2.85s) |
| 真并发 | 确认——5 个请求在 37ms 窗口内发出 |
prompt_pack |
传了 domain 时落 legal(法学包),产出明显更强 |
结论:现场用云端时,五路并行的延迟余量充足,不需要为速度牺牲路数。
修掉的两个缺陷
① 连引稀释内容核验(后端,误判)
真实模型产出了一句连引:
作品需具有独创性并能以一定形式表现,**《著作权法实施条例》**未要求创作须脱离工具独立完成
_claimed_after() 原来只在第一个句末符处截断,不知道下一部法从这里开始 ⇒ 下一条引用
标记被算进本条的分母。最长公共子串占声称长度的比例从 0.452 掉到 0.326,刚好跨过
MATCH_LOW=0.45 判错——一条真引用被判存疑。
修法是剔除下一条引用标记本身(连同它前面的连接词"及/和/以及"),不是截断:
截断会让第一条什么都不剩,等于把真引用漏掉核验。
实测:同一条引用 match 回到 0.452,content_ok 恢复 True。整体 content_suspect
从 1 降到 0。新增 2 条回归,测试数据就是那句真实模型产出。
MATCH_LOW 一个字没动 —— 按既定口径,算法不改,只修实现 bug。
② 零引用与自由输入的界面口径(前端,说不清)
真跑同时暴露了一个真实的路子被堵死的情况:
- 手打辩题时前端不带
domain,后端按「绝不猜」落general包。这本身是正确行为,
但界面上既不说明、也不给出路,用户只看到法学语料一条都没引用。 - 通用辩题本就无引用,界面却显示成"本轮没有《…》第…条式引用",读起来像出错。
改动(后端逻辑一字未动):
- 新增
frontend/src/citeBar.ts:total === 0时显示「引用 本轮无(通用辩题不引法条)」,
且warn: false——零引用也出现在状态条上,不再静默消失。 packNote():无 domain 时明说「提示词包 X · 自由输入,未选领域」,并提示从下拉选预设
即可切过去;有 domain 时只报包名,不说教。CitationPanel的零引用文案与状态条统一口径。
新增 10 条前端用例覆盖这两处。
回归数据(发版前最后一轮)
| 项 | 结果 |
|---|---|
后端 pytest |
316 passed(v1.4.1 是 314,+2 连引回归) |
前端 npm test |
59 passed(v1.4.1 是 49,+10 界面口径) |
tsc --noEmit |
0 错误 |
vite build |
通过 |
桥探针 scripts/bridge_probe.py |
10/10 |
npm audit --omit=dev |
0 漏洞 |
两次交互之间的等待都设得大于单轮最坏耗时,并断言了「进行中」中间态;变异检验做了 4 次
(SettingsPanel 2 条、citations 1 条、citeBar 2 条),全部精准命中单点——全绿通常意味着
在测快照而不在测测行为。
本版没有做的(以及为什么)
- 没动
MATCH_LOW:内容核验的已知盲区(合理意译会判存疑,偏保守;半挪用/只截 1/4 原文
都放行,拦不住拼凑截取)是算法层面的取舍,按既定口径不改,只修实现 bug。 - 没给会话表加
domain字段:会让复盘无法回溯当轮用了哪个提示词包,是一个已知取舍,
不是漏项。要加得配套设计复盘视图,不适合塞进一个补丁版。 - 没清 dev 依赖的 4 条 audit 告警:都在 vitest/vite 链上,清零得整条升到 6/7,
会牵动plugin-react与 vitest,属独立任务。 - 没重抓
npc.gov.cn语料:仍是死穴(SPA 空壳 + TLS 握手失败)。加新法走 gov.cn
子域镜像手工取。
升级提示
无破坏性变更,直接 git pull 即可。若你之前手打过辩题,现在起建议从预设辩题下拉里选,
否则提示词包会落在通用包上——这不是 bug,但法学场景下你会拿不到法学措辞。
复现入口
cd backend && API_PORT=8020 LLM_CONCURRENCY=5 ADVISOR_BUDGET_S=120 LLM_TIMEOUT_S=110 \
"../.venv/Scripts/python.exe" -m app.main
# POST /api/analyze(body 里带 domain)→ POST /api/session/{id}/verify-citations三条坑记在 HANDOVER.md §13续八:端点是 verify-citations 不是 citations/verify;
package-lock.json 里 4 处版本号只改前 2 处;手打辩题要传 domain。