2.4 KB · updated 2026-07-31 · md

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 字符)→ 一份合并叙述,涵盖每个会话。验收测试在超出旧截断界限的*最后一个*会话中植入了一个决策——它在修复前的代码上会失败。