feat(v2): T-M3 采纳 llmrouter pinch 三档裁剪——Architect 渲染超预算按相关性分档保留

- Workspace.render_for_architect:超 1200 token 时对 archive 行按与 query+goal
  的字符 2-gram Dice 相似度分档——sim<0.25 先丢、sim<0.55 截断为 40% 摘要、
  仍超限从低到高继续丢;保留行维持原插入序(前缀稳定),最近 4 行下限不变
  (相比旧'从最旧整段丢',高相关事实在预算内留存更久)
- 顺带消除两项旧债:压缩态与首次渲染共用同一 parts 结构(格式漂移)、
  裁剪循环不再每轮 deepcopy 全文档
- 修复本轮引入的缺陷:会话轮次 tool_calls 为 int 计数时清单提取迭代崩溃
  (test_session_multi_turn 抓出,已加类型防御)
- 新增 tests/test_pinch_trim.py 4 项;全量 244 passed ×2(基线 230)
This commit is contained in:
tzt
2026-09-19 09:40:43 +08:00
parent 184c11199a
commit 2d2c2184b9
3 changed files with 137 additions and 30 deletions
+1 -1
View File
@@ -461,7 +461,7 @@ class AgentService:
files = sorted({
str((a.get("arguments") or {}).get("path") or "").strip()
for t in session.data.get("turns", [])
for a in (t.get("tool_calls") or [])
for a in (t.get("tool_calls") if isinstance(t.get("tool_calls"), list) else [])
if isinstance(a, dict)
and str(a.get("name") or "") in _FILE_TOOLS
and (a.get("arguments") or {}).get("path")