sem:一种语义粒度的新型代码理解原语工具
摘要
sem 是一款基于 Git 的 CLI 工具,能够提供代码变更的语义理解,支持跨 26 种语言的实体级别差异分析、代码追溯、影响分析等功能。其目标是改进代码审查和 AI 辅助开发。
<p><a href="https://lobste.rs/s/j8kqth/sem_new_code_understanding_primitive">评论</a></p>
查看缓存全文
缓存时间: 2026/07/03 22:28
# sem
来源:https://ataraxy-labs.github.io/sem/
## 了解哪些发生了变化。
基于 Git 的语义理解。差异、追溯、影响、日志。面向函数,而非行。
复制$brew install sem\-cli
## 相同提交,不同视角。
左侧:Git 展示的内容。右侧:实际发生的变化。
git diff
``
diff --git a/src/auth/login.ts b/src/auth/login.ts
index 4a2b1c0..8f3d2e1 100644
--- a/src/auth/login.ts
+++ b/src/auth/login.ts
@@ -12,6 +12,18 @@
+export function validateToken(token: string) {
+ const decoded = jwt.verify(token, SECRET);
+ if (!decoded.exp || decoded.exp < Date.now()) {
+ throw new TokenExpiredError();
+ }
+ return decoded;
+}
+
@@ -24,8 +36,10 @@
export async function authenticateUser(
- const user = await db.findUser(email);
- if (!user) return null;
+ const user = await db.findUser(email);
+ if (!user) throw new UserNotFoundError();
+ await rateLimiter.check(email);
@@ -45,12 +59,0 @@
-export function legacyAuth(user, pass) {
- return db.query('SELECT * FROM users
- WHERE email = ? AND password = ?',
- [user, pass]);
-}
``
sem diff
``
┌─ src/auth/login.ts ────────────────
│
│ ⊕ function validateToken [新增]
│ ∆ function authenticateUser [已修改]
│ ⊖ function legacyAuth [已删除]
│
└────────────────────────────────────
1 个文件中有 3 个实体发生变化
``
AI 代理在 sem 输出下的准确性是原始行差异的 **2.3 倍**。查看基准测试。(https://ataraxy-labs.github.io/sem/agents.html)
## 六个命令,单个二进制文件。
适用于所有 Git 仓库,无需配置,无需插件。
`sem diff`
发生了什么变化?实体级差异,支持重命名检测、结构哈希和单词级内联高亮。
``
│ ⊕ function validateToken [新增]
│ ∆ function authenticateUser [已修改]
│ ⊖ function legacyAuth [已删除]
``
`sem blame`
谁修改了它?按实体追溯,显示每个函数、类或方法的最后修改提交。
``
│ ⊕ render_inline_diff a1a6fbf Rohan 04-03
│ ⊕ format_terminal a1a6fbf Rohan 04-03
``
`sem impact`
哪些会受影响?跨文件依赖图,展示依赖于某个给定函数的所有实体,以及受影响的测试。
``
⊕ function authenticateUser
→ 依赖: db.findUser, rateLimiter
← 被使用于: loginRoute, authMiddleware
! 42 个实体被传递影响
``
`sem log`
它是如何演变的?单个实体的 Git 历史。查看修改特定函数的每一次提交。
``
│ ae576ab Rohan 02-05 新增
│ a105183 Rohan 02-08 已修改(逻辑)
│ a1a6fbf Rohan 04-03 已修改(逻辑)
``
`sem entities`
路径下包含什么?列出每个函数、类、方法及类型,并附带行号范围。
``
entities: src/auth/login.ts
function validateToken (L12:24)
function authenticateUser (L26:45)
interface AuthConfig (L47:52)
``
`sem context`
适用于 AI 的智能上下文。受 token 预算限制的上下文窗口:包含目标实体、其依赖项以及被依赖项。适配任意 LLM 提示。
``
上下文 for authenticateUser (预算:8000)
目标: ~705 tokens
依赖项: ~256 tokens
被依赖项: ~812 tokens
``
所有命令都支持 `\-\-json` 输出,便于机器读取。完整参考文档。(https://ataraxy-labs.github.io/sem/details.html)
## 覆盖你的技术栈。
26 种语言,5 种数据格式,单个二进制文件。
TypeScript
JavaScript
Python
Go
Rust
Java
C
C++
C#
Ruby
PHP
Swift
Kotlin
Elixir
Bash
HCL
Fortran
Vue
Svelte
XML
ERB
Dart
Perl
OCaml
Scala
Zig
JSON
YAML
TOML
CSV
Markdown
8ms典型差异
26种语言
0需要配置
4,000+下载量
## 立即体验,只需 10 秒。
``
$ brew install sem-cli
$ sem setup
✓ 已创建包装脚本
✓ 已设置 git config --global diff.external = sem
✓ 已安装预提交钩子
完成!从现在开始,在任何仓库中运行 git diff 都会使用 sem。
若要恢复,请运行:sem unsetup
``
一条命令,每次 `git diff` 都会变成 `sem diff`。无需配置文件。另外:cargo install \-\-git https://github\.com/Ataraxy\-Labs/sem sem\-cli
相似文章
@RoundtableSpace: SocratiCode 为您的 AI 提供对整个代码库的深度语义理解 - 依赖图、符号级影响分析…
SocratiCode 是一个零配置工具,为 AI 提供对代码库的深度语义理解,减少上下文和工具调用,同时完全本地且免费。
Show HN: Semble – 面向代理的代码搜索,令牌使用量比 grep 减少 98%
Semble 是一款面向 AI 代理的快速代码搜索库,令牌使用量比 grep+read 减少约 98%,在 CPU 上运行,无外部依赖,并通过 MCP 或 CLI 集成。
@aigclink: 面向Agent的一个代码搜索工具:Semble,用自然语言查代码库返回精准代码片段,比grep+read节省98% token消耗 方法是让Agent用自然语言直接定位到最相关的几行代码,不用瞎猜关键词,不用读整文件 速度上,索引一个普通…
Semble是一个面向Agent的代码搜索工具,支持自然语言查询,能精准返回语义完整的代码片段,比传统grep+read方式节省98% token消耗,具有智能分块、双路检索和代码感知重排序等特性。
@Star_Knight12: 有人开源了一个工具,可以读取你的整个代码库并为你解读。 → 你加入一个新团队,面对200…
一款开源工具,能够扫描整个代码库,构建交互式可视化仪表板,支持语义搜索,并显示变更影响分析,旨在帮助开发者快速上手新项目。
@Trtd6Trtd: https://github.com/MinishLab/semble… 专为AI优化的高速代码搜索库,相比grep+读取,它可节省约98%的token。
Semble 是一个面向 AI 代理的高效代码搜索库,使用模型如 Model2Vec 或 BM25 实现快速索引和检索,比 grep+read 节省约 98% 的 token,支持 MCP 服务器和 CLI 集成。