Feat/agent conversation #1

Merged
GaoRuiXin merged 3 commits from feat/agent-conversation into main 2026-09-11 03:18:28 +00:00
3 Commits
Author SHA1 Message Date
LuminousRuoxi 76d3b30e7d feat: 问题点数量口径改为 单段 1–3 / 全篇 5–10
产品口径(2026-09-11):全篇 Pattern 由「最多 5 个」改为 5–10 个,单段主要
Pattern 由「最多 2 个」改为 1–3 个。依据 PRD §13.1(单段最多默认展示 1–3 个
主要 Pattern)与 §19.3(只概括当前段最主要的 1–3 类问题)。每段批注 3 条上限不变。

全篇 5–10 带下限,与「模型不得无 evidence 输出 Pattern」冲突——只有下限没有
逃生口,模型会编证据凑数。因此两处同时补上「证据优先于数量,下限不得靠编造
evidence 来凑」;SKILL.md 原有「也不要硬凑到十条」随口径一并改写。

无硬截断代码需要同步:evidence.sanitize_patterns 只过滤证据不截数量,前端
index.html:1053/1059 的 slice(0,3) 本就是单段 1–3 的展示上限。

证明 artifact(docs/ 被 gitignore,本地留存):
- docs/_probe_pattern_counts_20260911.py 真实链路探针
- docs/_pattern_counts_20260911_run1.json / _pattern_counts_20260911.json
- docs/Agent化改造方案_20260911.md §十 口径与实测记录

实测(同篇文书,gemini-3.7-flash via OpenRouter,走真实 /api/diagnose):
run1 patterns=5 批注 1/1/2/2 证据 11/11;run2 patterns=6 批注 1/1/3/2 证据 16/16。
两次均在区间内且非死咬下限,4 段 ai_focus 全非空,证据 100% 可逐字回溯。
单测 65 例全绿(test_demo.py 35 + test_agent.py 30)。
2026-09-11 10:41:22 +08:00
LuminousRuoxi bdc6a53f81 refactor: 删掉随 agent 化失效的 applyUnderstandingCorrection,原位留已知偏差说明
顾问纠正某段理解时,改造前它会同时改写该段的 semantic_anchor;现在走
record_advisor_note 只落成分段约束,锚点不跟着改。纠正内容仍会进诊断/复检的
paragraph_constraints,所以不是静默丢失,但与原行为有差——写在原函数位置而不是
只记在方案文档里,读代码的人能看见。
2026-09-11 10:26:04 +08:00
LuminousRuoxi 94a26227c1 feat: 对话层 Agent 化(对话底座 + 自研 skill)
把对话页从固定状态机换成 skill 驱动的 Agent:顾问说什么都原样发给 agent,
由 SKILL.md + 工具决定该聊还是该调工具。工作台(workbenchView)未改动。

后端
- llm.py:新增 stream_chat()(流式 + tools),并带 reasoning 端点自动降级
  (gemini-3.7-flash 拒绝 effort:none,首次 400 后锁定重试)
- agent.py:最小对话底座内核——skill 注入 + 工具循环 + SSE 事件
- tools.py:8 个工具包住既有能力(analyze/diagnose/scaffold/reference/
  translate/recheck/record_note/confirm),延迟 import main 复用已验证的
  endpoint 处理器与测试接缝,prompts.py/schemas.py/evidence.py 未改一行
- main.py:POST /api/chat/stream(SSE)

skill
- skills/hvr-rewrite/SKILL.md:分诊规则、首轮盘点、AI 味清单对齐
  blader/humanizer 的 A–E 分类(含强度校准与反误报)、诚实性硬约束

前端
- 流式正文 + 工具卡片 + 选项按钮;工具 payload 直接喂既有渲染函数
  (renderUnderstanding/renderDiagnosis/renderRecheck),没有第二套 UI
- 删除随 agent 化失效的 runDiagnose / applyUnderstandingCorrection 死代码

验证(真实模型,非 mock)
- 65 单测全绿(test_agent.py 30 + test_demo.py 35)
- 逐轮实跑:盘点 → 确认 → 诊断 → 复检,SSE 事件序列与 payload kind 均符合契约
- 前端 readSSE 用真实响应字节按 7/64/全量三种切块回放,事件序列一致
- 实测修掉两个只在真跑时暴露的问题:模型调完分析直接调确认工具导致正文为空
  (SKILL.md 补「正文先行」硬规则);伪标题 `**N. 标题**` 让列表判定失败、
  短横线漏成字面字符(前端改逐行分组渲染)

未验证:浏览器人工走查(无浏览器自动化环境),仅到「真实 HTTP + 真实字节回放」这一层。
2026-09-11 10:25:12 +08:00