ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【开源】md2telegraph — 200 行 JS 实现的 LLM 上下文压缩器(MIT + 强制署名)

【开源】md2telegraph — 200 行 JS 实现的 LLM 上下文压缩器(MIT + 强制署名) 大家好我是芦云。我想为全人类省电——因为在大模型时代电力就是 token上下文瘦身 30%算力就省 51%碳排放跟着降。省电是绿色地球的开源。今天分享一个我做了两天的小东西——md2telegraph一个零依赖、单文件、结果确定的 Markdown 压缩器。一、项目背景LLM 的注意力机制是 O(n²)上下文长度翻倍计算量翻四倍。实测中塞进上下文的规则/档案/索引真正被模型反复读到的不足 30%——剩下的都是占位但没用的 token白花钱。现有的提示压缩方案微软 LLMLingua 系列用一个小模型在读取时压缩效果不错但要 GPU、依赖重、输出不确定。md2telegraph 反过来在写入时压缩。把 Markdown 长文在写作那一刻就压成电报体标题 首批要点 首句LLM 天生读得懂这种风格不需要任何解码器。二、算法核心200 行纯 Node.js零依赖单文件字节级确定同一输入永远同一输出可用 hash 验证流程分离 frontmatter → 按标题切节 → 每节保留标题 前 N 个列表项或首句→ 输出电报体 原文备份姊妹档内置敏感词安全闸含敏感词的输入直接拒收退出码 3零输出零泄漏下面是压缩函数的核心完整 200 行见仓库function telegraph(sections, opt) {const out [];for (const s of sections) {out.push(‘#’.repeat(s.level) ’ ’ s.title);const items s.text.split(‘\n’).map(l l.trim()).filter(l /1\s/.test(l)).slice(0, opt.maxItems);for (const it of items) out.push(it.replace(/2\s/, ‘· ‘));if (!items.length) {const lines s.text.split(’\n’).map(l l.trim()).filter(Boolean);const first lines.find(l l.length 4 !/3{3,}$/.test(l) !l.startsWith(‘|’) !l.startsWith(‘’.repeat(3)) !l.startsWith(‘’));if (first) out.push(‘· ’ first.slice(0, opt.maxChars) (first.length opt.maxChars ? ‘…’ : ‘’));}}return out.join(’\n’);}三、实测数据文档类型 节省 算力节省重复结构文件报告/日志 15–30% 28–51%散文对话/案例 30–50% 51–75%法规类长文档手动 60–85% 84–98%算力按注意力 O(n²) 估算1 − 剩余比例²四、和 LLMLingua 对比LLMLingua md2telegraph依赖 小模型 GPU 零依赖确定性 采样不确定 字节级确定可读性 难读 人可读压缩比 5–20× 1.2–6×运行环境 Python GPU Node.js ≥ 18 / 任意电脑互补关系追求极限压缩比用 LLMLingua追求零依赖、确定性、可审计用 md2telegraph。五、使用方法node md2telegraph.mjs your-doc.md -o ./out输出两个文件your-doc.telegraph.md电报体喂给 LLMyour-doc.full.md原文备份人看六、测试内置 25 项断言测试套件全部通过node test/run-tests.mjs七、Roadmap多场景英文论文 / 代码注释 / API 文档 / 古文 / 法律文书多格式HTML / TXT / JSON / Docx可还原电报体 → 原文基于备份档易部署单文件可执行 / 浏览器版wasm八、协议MIT Mandatory Attribution强制署名必保留自由使用、修改、商用但任何衍生作品必须保留作者署名芦云。仓库https://gitee.com/king-of-playfulness/md2telegraph 引用仓库内 CITATION.cff 作者芦云2026-09-30-* ↩︎-* ↩︎-* ↩︎
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进