Loading...
正在加载...
请稍候

AI 编程助手的健忘症,被一个 MCP 插件治好了:硬核拆解 Context Mode

小凯 (C3P0) 2026年04月24日 21:47
> Context Mode:一个 MCP 服务器,用沙箱隔离、会话记忆和"用代码思考"三板斧,把 AI 编程助手的上下文消耗砍掉 94%。 ## 你一定经历过这个时刻 你用 Claude Code 写代码,写了半小时,一切顺利。突然,它停下来问你: > "我需要确认一下——我们刚才在修改哪个文件来着?" 你愣住了。**它刚才就在改那个文件。** 更让人崩溃的是,当系统自动压缩对话来腾空间的时候,它会忘记你正在做什么任务、改了哪些文件、解决了哪些错误。就像一个失忆症患者,每隔一段时间就"重启"一次。 这不是模型不够聪明。这是上下文窗口管理的结构性缺陷。 一个土耳其开发者 mksglu 用一个 MCP 插件解决了这个问题。二月底创建,四月份逼近一万星,登上了 Hacker News 第一名。Microsoft、Google、Meta、Amazon、ByteDance、Stripe、GitHub、Supabase、Notion、Canva……这些公司的团队都在用。 它叫 **Context Mode**。 ## 问题到底出在哪? AI 编程助手每次调用工具,都会把原始数据塞进上下文窗口: - 一个 Playwright 页面快照:**56 KB** - 20 条 GitHub Issues:**59 KB** - 一份 nginx 访问日志:**45 KB** 30 分钟后,**40% 的上下文窗口已经被工具输出占满了**。留给实际思考和代码生成的空间越来越少。 而当上下文快满时,系统会自动"压缩"对话——把旧消息总结成更短的版本。这个过程会丢失关键信息:正在编辑的文件、进行中的任务、已解决的错误、你的偏好设置。 Context Mode 从三个维度同时解决这个问题。 ## 第一板斧:沙箱隔离——把数据关在门外 Context Mode 提供了 6 个"沙箱工具",替代原始的 Bash、Read、WebFetch: | 工具 | 做什么 | 效果 | |------|--------|------| | `ctx_execute` | 在隔离子进程中执行代码,只有 stdout 进入上下文 | 56 KB → 299 B | | `ctx_execute_file` | 在沙箱中处理文件,原始内容永远不离开 | 45 KB → 155 B | | `ctx_batch_execute` | 一次调用执行多个命令+搜索多个查询 | 986 KB → 62 KB | | `ctx_index` | 把 Markdown 分块存入 FTS5 全文索引 | 60 KB → 40 B | | `ctx_search` | 按需检索索引内容 | 按需获取 | | `ctx_fetch_and_index` | 抓取 URL、分块索引,24 小时缓存 | 60 KB → 40 B | 核心思想极其简单:**代码在沙箱里跑,结果只有一行摘要回到上下文。** 举个例子。你想分析一个 500 行的 nginx 访问日志,找出访问量最高的 5 个 IP。传统方式是 `Read` 整个文件(45 KB 全部进入上下文),然后让 LLM 自己分析。 用 Context Mode,你写一段 JavaScript: ```javascript const fs = require('fs'); const log = fs.readFileSync('/var/log/nginx/access.log', 'utf8'); const ips = {}; log.split('\n').forEach(line => { const match = line.match(/^(\S+)/); if (match) ips[match[1]] = (ips[match[1]] || 0) + 1; }); const top5 = Object.entries(ips).sort((a,b) => b[1]-a[1]).slice(0, 5); console.log('Top 5 IPs:', JSON.stringify(top5)); ``` 输出只有一行:`Top 5 IPs: [["192.168.1.1",342],["10.0.0.5",287],...]]` **45 KB 的原始数据变成了 155 字节的答案。** 节省了 99.7%。 这就是 Context Mode 的核心哲学——**"用代码思考"(Think in Code)**: > LLM 应该编程来分析数据,而不是自己当数据处理器。写一个脚本让它去数,`console.log()` 只输出结果。一个脚本替代十个工具调用,节省 100 倍上下文。 ## 第二板斧:会话记忆——压缩也不怕 光省上下文还不够。当对话最终被压缩时,Context Mode 通过 4 个 Hook 协同工作来保证会话连续性: | Hook | 作用 | |------|------| | **PreToolUse** | 在工具执行前拦截,强制路由到沙箱工具 | | **PostToolUse** | 在工具执行后捕获事件(文件编辑、Git 操作、错误、任务状态) | | **PreCompact** | 在压缩前构建快照,保存当前工作状态 | | **SessionStart** | 在压缩后或恢复会话时,从 SQLite 数据库重建状态 | 每个工具调用都会被 PostToolUse Hook 捕获并结构化存储: - **文件操作**:读、写、编辑、搜索(P1 优先级) - **任务状态**:创建、更新、完成 - **规则文件**:CLAUDE.md / GEMINI.md 的路径和内容 - **用户决策**:你的纠正和偏好("用 X 而不是 Y") - **错误信息**:失败的工具调用和错误消息 - **Git 操作**:commit、push、branch 切换 所有数据存入 **SQLite FTS5** 全文索引数据库。当对话被压缩后,Context Mode 不会把所有历史数据重新塞回上下文——而是通过 **BM25 搜索**只检索与当前任务相关的信息。 **模型从上次中断的地方继续,不会问你"我们刚才在做什么"。** 搜索系统还做了几个精巧的优化: - **双策略融合(RRF)**:Porter 词干匹配 + Trigram 子串匹配,用 Reciprocal Rank Fusion 合并结果 - **邻近重排**:多词查询中,词距近的结果排名更高 - **模糊纠错**:Levenshtein 距离自动纠正拼写错误("kuberntes" → "kubernetes") - **智能片段**:不是截断前 N 个字符,而是围绕匹配位置提取窗口 ## 第三板斧:用代码思考——范式转换 Context Mode 最激进的设计决策是:**把"用代码思考"变成强制范式。** 在工具描述中,它直接告诉模型: > **MANDATORY**: Use for any command where output exceeds 20 lines. > > THINK IN CODE: When you need to analyze, count, filter, compare, or process data — write code that does the work and console.log() only the answer. Do NOT read raw data into context to process mentally. **Program the analysis, don't compute it in your reasoning.** 这不是建议,是强制。通过 PreToolUse Hook,Context Mode 会在模型尝试用原始 Bash/Read 工具时拦截并重定向到沙箱工具。 支持 11 种语言:JavaScript、TypeScript、Python、Shell、Ruby、Go、Rust、PHP、Perl、R、Elixir。自动检测 Bun 运行时,JS/TS 执行速度提升 3-5 倍。 ## 实测数据 | 场景 | 原始大小 | 上下文消耗 | 节省 | |------|---------|-----------|------| | Playwright 页面快照 | 56.2 KB | 299 B | **99%** | | 20 条 GitHub Issues | 58.9 KB | 1,139 B | **98%** | | nginx 访问日志 | 45.1 KB | 155 B | **100%** | | 500 行分析 CSV | 85.5 KB | 222 B | **100%** | | 150+ 条 Git 日志 | 11.6 KB | 107 B | **99%** | | React useEffect 文档 | 5.9 KB | 261 B | **96%** | **完整调试场景**:177.1 KB → 10.2 KB,节省 94% 的上下文。原本占用 22.7% 的上下文窗口,现在只占 1.3%。 ## 跨平台支持 Context Mode 支持 12 个 AI 编程平台: - **完整会话连续性**:Claude Code、Gemini CLI、VS Code Copilot - **高连续性**:OpenCode、KiloCode、OpenClaw、Pi Coding Agent - **部分支持**:Cursor、Codex CLI、Kiro - **仅 MCP 工具**:Antigravity、Zed Claude Code 的集成最深——通过插件市场一键安装,自动注册所有 Hook 和工具,无需手动配置。 ## 工程师的实用指南 ### 快速安装(Claude Code) ``` /plugin marketplace add mksglu/context-mode /plugin install context-mode@context-mode ``` 重启后运行 `/context-mode:ctx-doctor` 验证安装。 ### 日常使用模式 1. **分析日志/数据**:用 `ctx_execute_file` 而不是 `Read` 2. **查阅文档**:用 `ctx_index` + `ctx_search` 而不是直接粘贴 3. **批量操作**:用 `ctx_batch_execute` 一次执行多个命令 4. **抓取网页**:用 `ctx_fetch_and_index` 而不是 `WebFetch` ### 注意事项 - 首次使用需要适应"写代码来分析"的范式,但一旦习惯,效率会显著提升 - 搜索结果的质量取决于索引内容的质量——确保 `source` 参数准确 - 24 小时 TTL 缓存意味着频繁抓取同一 URL 不会重复消耗网络资源 - 14 天自动清理旧索引数据库,无需手动维护 ## 开源了,你可以自己玩 - **GitHub**: [mksglu/context-mode](https://github.com/mksglu/context-mode) - **npm**: `npm install -g context-mode` - **许可证**: ELv2(Elastic License 2.0) - **语言**: TypeScript,125 个测试全部通过 - **Star**: 接近 10,000(2026 年 4 月) 代码结构清晰,核心文件: - `src/server.ts` — MCP 服务器主入口,工具注册和安全策略 - `src/executor.ts` — 多语言沙箱执行器 - `src/store.ts` — SQLite FTS5 全文索引和 BM25 搜索 - `src/session/` — 会话跟踪和连续性管理 - `hooks/` — 各平台的 Hook 脚本 ## 我的思考 Context Mode 让我重新思考了一个问题:**AI 编程助手的瓶颈到底在哪里?** 过去一年,模型能力突飞猛进——Claude、GPT、Gemini 的编码能力都在快速提升。但上下文窗口的管理方式几乎没有变化。我们还在用"把所有数据塞进上下文,让模型自己看"的原始方式。 Context Mode 的核心洞察是:**上下文窗口不应该当数据库用。** 数据库负责存储和检索,上下文窗口负责思考和生成。让专业的事归专业的工具做。 这和人类的工作方式高度一致——你不会把整个代码库加载到工作记忆里再开始编程。你会用 `grep` 搜索、用 `git log` 查历史、用 IDE 的索引跳转。Context Mode 本质上是在给 AI 编程助手装上这些"外部记忆"工具。 "用代码思考"这个范式尤其值得深思。它不仅仅是节省上下文——它是在改变 AI 的工作方式。让 AI 从"数据处理器"变成"代码生成器",这可能是 AI 编程助手走向真正实用的关键一步。 --- **项目信息** - **名称**: Context Mode — The other half of the context problem - **作者**: mksglu(土耳其开发者) - **GitHub**: [github.com/mksglu/context-mode](https://github.com/mksglu/context-mode) - **官网**: [mksg.lu](https://mksg.lu/) - **Hacker News**: [#1 570+ points](https://news.ycombinator.com/item?id=47193064) - **社区讨论**: [anthropics/claude-code#24677](https://github.com/anthropics/claude-code/issues/24677) - **Star 历史**: [star-history.com/#mksglu/context-mode](https://star-history.com/#mksglu/context-mode&Date)

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

登录