v0.20.2.zh.md
docs/i18n/release-notes/v0.20.2.zh.md
Tesserae v0.20.2 — 模型现在读取全部内容
<!-- translations:start -->
English · 한국어 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
发布于 2026-07-14 · PyPI · GitHub 发布 · pip install --upgrade tesserae==0.20.2
这是长会话修复的后半部分。v0.20.1 移除了 300 转的*导入*上限,让完整对话历史进入存储;本次发布修复了*消费*侧,使每个读取该历史的 LLM 都能真正读到全部内容——与总长度无关。
0.20.1 之后仍然存在的问题
- 会话摘录被截断以适应限制:超过每个项目 24,000 字符的界限后,摘要会丢弃整段会话并显示"…more sessions omitted for length"——模型从未看到它们。
- 一个无界的 prompt:摘要叙述和 agent 决策挖掘各自在单次 LLM 调用中发送全部内容——在繁忙的时间窗口上,比任何上下文窗口都大。
max_turns_per_chunk统计的是转数,而不是大小:三十转可能携带一个 500KB 的工具输出转储;会话图提取的块仍可能溢出。
变更内容
新增 tesserae/llm_chunking.py:一个确定性的块打包器和一个按保守上下文预算(48,000 字符 ≈ 12k token;可用 TESSERAE_LLM_CHUNK_CHARS 调节)设定大小的 map-reduce 运行器。每个消费会话历史的 LLM 现在都按预算大小的块迭代——先是 PART i/N 的 map 调用,然后是层次化合并——截断标记消失了,单个超大的转会按行拆分到多个块而不是溢出,小输入则保持原有的单次调用路径不变。
--max-turns 仅保留为扫描内存保护——它不再限制模型读取的内容。
已直接按需求验证:600KB 的会话历史 → 82 次有界调用(在 8,000 字符的测试预算下,最大 prompt 为 7,525 字符)→ 一份合并叙述,涵盖每个会话。验收测试在超出旧截断界限的*最后一个*会话中植入了一个决策——它在修复前的代码上会失败。