ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

为什么AI编程助手装上sem更省token?MCP八大实体级工具全解析

为什么AI编程助手装上sem更省token?MCP八大实体级工具全解析 为什么AI编程助手装上sem更省tokenMCP八大实体级工具全解析【免费下载链接】semSemantic version control entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents.项目地址: https://gitcode.com/gh_mirrors/sem7/semsem是构建在 Git 之上的语义化版本控制semantic version control工具它以函数、类、方法为最小单位做 diff、blame 和影响力分析并通过 tree-sitter 覆盖28 种语言。它最独特的定位是为 AI 编程代理而生——通过一套 MCP 工具让 Claude、Cursor 等 AI 助手用一次结构化的调用就拿到文本搜索需要十几轮 grep 读文件才能拼出的上下文。本文将带你完整解析 sem 的MCP 八大实体级工具以及它为什么能让你的 AI 编程助手更省 token、更少幻觉。 为什么装上 sem 之后更省 token普通 AI 助手回答这个函数被谁调用改了会影响什么这类问题时通常的路径是grep找引用 → 打开文件读代码 → 发现 import 别名又 grep 一轮 → 再读依赖文件……每一轮都要消耗调用往返 token和大段重复的文件内容 token。换上 sem 后同样的问题往往一次工具调用就结束。省 token 主要来自四个机制1️⃣ 一次结构化调用替代 N 次 grep/readsem 在本地维护了真实的跨文件调用图与导入图不是靠猜所以谁调用了 X→sem_callers一次返回跨文件、跨 import 别名都不会漏改 X 会破坏什么→sem_impact一次返回直接依赖、直接反向依赖、传递性影响和受影响的测试读懂 X 这个函数→sem_context直接返回函数全文 它的调用者与被调用者无需打开源文件sem 的 MCP 服务器在 server.rs 中内置了一段给 AI 的使用守则明确要求结构性问题优先用 sem 工具grep 只留给字符串搜索这类场景。这正是它省 token 的底层逻辑——让模型少走弯路而不是让模型读更多文件。2️⃣ Token 预算制读多少由你说了算sem_context有一个token_budget参数默认 8000会按优先级精准装箱目标实体 直接依赖 直接反向依赖 传递依赖 传递反向依赖。预算用完即停不会把无关代码灌进上下文。更妙的是mode: headers模式——只打包每个实体的签名 首行文档注释同样的预算能画出大得多的代码地图。3️⃣ 确定性结果省去反复验证文本搜索找调用者天然会漏重名、别名、re-exportAI 发现可疑时会反复重新 grep 交叉验证这是隐藏的 token 大户。sem 的结果是确定性的漏了就是漏了它会诚实报告命中就是真命中模型不必反复复核也就省掉了验证循环。4️⃣ 毫秒级响应索引常驻查询不冷启动sem 的索引支持增量更新与磁盘缓存冷查询通常在6–7 毫秒级响应。每个工具返回结果里都带elapsed_ms真实等待耗时你可以直观看到一次 sem_impact 只要 9ms还顺带抓到 grep 会漏掉的 2 个传递调用者。快意味着 AI 会话少等待、少重试。 MCP 八大实体级工具全解析sem 通过标准 MCP 协议暴露工具参数定义在 crates/sem-mcp/src/tools.rs工具实现集中在 crates/sem-mcp/src/server.rs。下面按从定位 → 阅读 → 影响 → 历史的常用顺序逐一解析。#工具一句话定位省 token 的关键点1sem_entities列出目录下所有函数/类或按意图找实体一次拿到文件里有什么不用整文件读2sem_context按 token 预算打包实体及其依赖上下文精确控制输入 token 量3sem_impact改 X 会波及哪些依赖、调用者、测试替代多轮 grep 读文件4sem_find按精确名定位实体定义位置支持function xxx类型消歧5sem_callers列出某个实体的直接调用者跨文件不漏、不重名误报6sem_diff实体级 diff新增/修改/删除/重命名行级 diff 里的噪音消失7sem_blame实体级 blame谁在何时为何改了它直接回答这段代码为什么存在8sem_log实体演化史 仓库级热点/共变分析区分逻辑变更与纯格式变更1.sem_entities结构版ls还能当意图搜索给定路径列出其中所有语义实体不想要列表时它还有三种高级用法query自然语言找实体比如重试逻辑在哪里按名称/签名相关度和图中心性排序返回file:linetext在实体函数体内做精确子串搜索找错误消息、配置键命中的是实体而不是零散行号可直接喂给sem_contextsignatures只返回签名 首行文档注释信息量比名字多、比函数体少2.sem_context省 token 的核心武器一次调用返回目标实体全文 按图关系圈选的依赖上下文全部在token_budget内。还支持entities: [...]多个目标打包成一次调用共享同一预算hops把关联实体限制在 1–2 跳邻域看近处而不是全图fresh上下文被压缩后强制重发它的哲学是AI 不需要读文件AI 需要的是带依赖关系的精准代码包。3.sem_impact改动前的爆炸半径扫描给定file_path entity_name一次返回四类信息用mode按需裁剪all默认依赖 反向依赖 传递性影响 受影响的测试deps/dependents只看直接依赖或调用者tests只列出会被波及的测试实体这直接回答了我敢不敢动这个函数——传统工具链里这是最烧 token 的问题。4.sem_find与 5.sem_callers精确定位二件套sem_find按精确名找定义位置支持function createProgram这种类型 名字格式消歧也支持批量queries: [...]。sem_callers则只回答一件事谁直接调用它。它的严谨之处在于——名字有歧义时会拒绝回答并给出候选清单迫使你用文件或类型消歧后重试。宁可多一次调用也不给错误的调用者列表这正是少幻觉的设计。6.sem_diff实体级 diff告别行级噪音普通git diff告诉你第 37 行改了sem_diff告诉你function validateToken新增、function authenticateUser修改、function legacyAuth删除而且能识别重命名行级 diff 只能看到删了一半加了一半。对 AI 审查 PR 来说这意味着输入的是高信号、低噪音的变更清单。实体级 diff 的能力实现可见 crates/sem-core/src/parser/differ.rs。7.sem_blame这个函数为什么长成这样对文件里每个实体给出最后修改者、时间和原因commit message。AI 接手陌生代码时一个函数级 blame 比读整个文件更能快速建立心智模型。8.sem_log时间轴上的代码考古追踪某个实体跨 commit 的演化并区分逻辑变更与格式变更重排空格不算改过。省略实体名时切换到仓库级分析模式hotspots被改动最多的实体含作者统计co-change pairs总在同一批 commit 里一起变的实体对这是快照式依赖图看不到的时间维度对 AI 判断这两个文件是不是应该一起改极有价值。 补充以上之外还有sem_greprg 兼容的文本搜索专为字符串、错误消息、非代码文件保留以及 4 个面向 sem-cloud 在线评审的监听工具join_review、wait_for_branch、reply_to_branch、list_open_branches可让 AI 实时接入代码评审流程。参数结构定义见 tools.rs。⚡ 如何快速把 sem 接入你的 AI 编程助手只需两步无需改代码安装 sem运行安装脚本即可配置可参考 install.sh 与 README.md让客户端连上 MCPsem 自带sem setup命令实现在 crates/sem-cli/src/commands/setup.rs会自动为常见 AI 客户端写入 MCP 配置手动配置时只需在 MCP 客户端设置里添加一条以sem mcp为命令的服务条目服务器启动时会在后台预热当前仓库的实体图见 lib.rs 的 prewarm 逻辑所以 AI 的第一次结构性查询就能直接从内存回答不会卡在冷启动上。 哪些场景收益最大你的 AI 助手正在做的事换用 sem 工具效果反复 grep 找调用点sem_callers/sem_impact1 次调用替代 5–10 轮且不漏跨文件引用整文件读取来理解代码sem_context按预算取数附带依赖上下文审 PR 时逐 hunk 分析sem_diff直接看哪个函数变了/被重命名猜这段代码为什么这么写sem_blame/sem_log一次拿到作者、动机、演化史找重试逻辑在哪这种模糊问题sem_entitiesquery意图式检索直达实体简单记忆法结构性问题谁调用、改什么会坏、这函数干嘛用 sem 八大工具纯文本问题找字符串、配置键、非代码文件才用sem_grep。sem 的使用守则对这一点有明确规定server.rs 中的 MCP_INSTRUCTIONS。 社区与后续sem 采用 Apache-2.0 / MIT 双许可核心解析与图构建在 crates/sem-core/基准测试如依赖准确性、大规模 JS 项目放在 benchmarks/面向 LLM 的说明文档见 docs/llms.txt技能包定义见 SKILL.md。一句话总结sem 省 token 的本质不是压缩输出而是用实体级 图结构的确定性信息替代 AI 反复 grep、读文件、交叉验证的试错过程——八大 MCP 工具各管一个环节组合起来正好覆盖 AI 编程助手理解代码的完整链路定位 → 阅读 → 影响评估 → 历史溯源。【免费下载链接】semSemantic version control entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents.项目地址: https://gitcode.com/gh_mirrors/sem7/sem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

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