Mimir 开源代码智能引擎
Mimir是一个基于Go的代码智能引擎,可以索引你的整个代码仓库。
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
我用过的每个AI编程助手——Claude、Copilot、Cursor——当你让它们浏览代码库时,做的都差不多:grep搜索、猜测、然后希望结果是对的。
问它"如果我改了UserService会破坏什么?"它会读几个文件,做一些假设,然后给你一个听起来很自信的答案,但错过了一半的爆炸半径。
这不是AI的错。它没有地图。
所以我构建了一个。
1、什么是Mimir?
Mimir是一个基于Go的代码智能引擎,它将你的整个代码仓库索引为一个类型化的知识图谱,并通过MCP(模型上下文协议)将其暴露给AI代理。
可以把它想象成给你的AI助手一个GPS,而不是手绘的草图。
# 安装
go install github.com/thuongh2/git-mimir/cmd/mimir@latest
# 索引你的项目
mimir analyze .
# 启动MCP守护进程
mimir daemon start
# 自动配置你的编辑器
mimir setup
就这样。你的AI代理现在有了你代码库的完整知识图谱。
2、工作原理
当你运行mimir analyze时,幕后发生的事情如下:
1. 并行AST解析一个goroutine池遍历你的仓库,并使用go-tree-sitter解析每个文件。支持8种语言:TypeScript、JavaScript、Go、Python、Rust、Java、C、C++。解析工作者是预先分配的(创建tree-sitter解析器很昂贵——约5ms——所以我们重用它们)。
2. 作用域感知解析所有文件解析完毕后,一个两阶段解析器构建跨文件边。第一阶段构建完整的符号表(基于trie)。第二阶段根据它解析调用点。每条边根据解析的确定性得到一个置信度分数(0.60–1.00)。
3. 知识图谱存储所有内容都存储到SQLite中(纯Go,通过modernc.org/sqlite实现无CGO),具有:
- BM25全文索引用于关键词搜索
- 通过
sqlite-vec实现的HNSW向量索引用于语义搜索 - Louvain社区检测用于模块聚类
4. MCP服务器一个后台守护进程向任何兼容MCP的AI代理暴露7个工具。
3、7个MCP工具,带真实示例
3.1 query() — 快速查找任何内容
你:"支付处理在哪里进行?"
没有Mimir时,AI会读3–4个它猜测可能相关的文件,却错过了埋在服务层中的实际入口点。
有了Mimir:
query("payment processing")
→ ProcessGroup: checkout-flow
entry: OrderController.handleCheckout (api/order.go:42)
→ PaymentService.charge (services/payment.go:88)
→ StripeGateway.createIntent (gateways/stripe.go:31)
→ OrderRepository.markPaid (repo/order.go:120)
AI现在一次往返就知道完整的调用链。无需猜测。
3.2 context() — 360度符号视图
你:"解释AuthMiddleware如何工作以及谁调用了它。"
context("AuthMiddleware")
→ Symbol: AuthMiddleware (middleware/auth.go:15)
Kind: Function | Package: middleware
→ Callers (incoming):
- router.Setup (router/router.go:28) confidence: 0.95
- router.SetupAdmin (router/admin.go:14) confidence: 0.95
→ Callees (outgoing):
- TokenValidator.Validate (auth/token.go:44) confidence: 0.90
- UserRepository.FindByID (repo/user.go:67) confidence: 0.85
- logger.Warn (pkg/logger/logger.go:33) confidence: 0.95
→ Cluster: auth-middleware (cohesion: 0.97)
Members: middleware/auth.go, middleware/rate_limit.go, middleware/cors.go
AI立即知道:谁在使用它,它依赖什么,以及它属于哪个模块。无需跳转文件。
3.3 impact() — 在触碰之前知道会破坏什么
这是最重要的工具。每次编辑之前运行它。
场景:你想更改UserRepository.FindByID的签名。
impact("UserRepository.FindByID", "upstream")
→ Target: UserRepository.FindByID (repo/user.go:67)
→ Depth 1 — WILL BREAK (direct callers):
- AuthMiddleware (middleware/auth.go:55) confidence: 0.85
- ProfileController.getProfile (api/profile.go:30) confidence: 0.90
- AdminController.getUser (api/admin.go:88) confidence: 0.90
→ Depth 2 — LIKELY AFFECTED:
- router.Setup → AuthMiddleware
- router.SetupAdmin → AdminController
- handleGetUser (api/user.go:22)
→ Risk summary: 3 direct callers, 5 total affected symbols across 4 files
现在AI可以准确告诉你:"这个更改会破坏4个文件中的3个函数。以下需要更新。"
不再有"我觉得这个改动应该是安全的。"
3.4 detect_changes() — 提交前风险分析
你已经编码了2个小时。在提交之前:
detect_changes()
→ Changed files: 3
Modified: services/payment.go, repo/order.go
Added: services/refund.go
→ Changed symbols:
- PaymentService.charge — 4 callers affected
- OrderRepository.markPaid — 2 callers affected
→ Affected processes:
- checkout-flow (HIGH RISK — 2 of 5 steps changed)
- admin-refund-flow (LOW RISK — 1 of 8 steps changed)
→ Recommendation: Review checkout-flow callers before committing.
你的AI在更改离开你的机器之前就能获取完整的风险报告。
3.5 rename() — 安全协调重命名
重命名一个广泛使用的符号在没有工具支持时是可怕的。Mimir让它变得安全。
rename("UserService", "AccountService", dry_run: true)
→ Status: dry_run
→ Files affected: 12
→ Total edits: 34
Graph edits (typed references): 28
Text search edits (string literals, comments): 6
→ Preview:
api/user.go:15 — UserService → AccountService
api/user.go:44 — UserService → AccountService
services/auth.go:8 — UserService → AccountService
... (29 more)
先试运行。确认。然后不带dry_run: true运行以原子性地应用全部34个更改。
3.6 cypher() — 强力查询
当你需要其他工具不直接暴露的答案时:
# Find all exported functions with no callers (dead code candidates)
cypher("SELECT n.name, n.file_path FROM nodes n
WHERE n.exported = 1 AND n.kind = 'Function'
AND NOT EXISTS (SELECT 1 FROM edges e WHERE e.to_uid = n.uid)")
→ Columns: [name, file_path]
→ Rows:
["generateLegacyToken", "auth/legacy.go"]
["formatOldResponse", "api/v1/format.go"]
["debugDumpState", "internal/debug.go"]
"这里有3个没人调用的导出函数。可以安全删除。"
3.7 推荐工作流
1. query() — 找到相关代码所在位置
2. context() — 在触碰之前深入理解符号
3. impact() — 在编辑任何共享函数之前始终运行
4. detect_changes() — 每次提交之前
遵循此模式的代理会少得多地犯"我不小心搞坏了认证流程"的错误。
4、为什么用Go?(以及为什么这很重要)
Mimir的前身是一个叫GitNexus的Node.js工具。它能用,但慢且重。以下是对比:
| 指标 | GitNexus (Node.js) | Mimir (Go) |
|---|---|---|
| 冷索引,1000个文件 | ~45秒 | < 8秒 |
| 增量重新索引 | ~45秒(全量重新索引) | < 2秒 |
| 混合搜索延迟 | ~300毫秒 | < 80毫秒 |
| 二进制大小 | 350 MB | < 20 MB |
| 索引期间内存 | ~800 MB | < 120 MB |
用Go重写不仅仅是为了速度。纯Go的SQLite驱动意味着零CGO——单个静态二进制文件,无需系统库依赖,开箱即用于任何Linux/macOS机器。
5、编辑器支持
mimir setup自动为以下工具配置MCP:
- Claude Code(
~/.claude/mcp.json) - VS Code + Copilot(通过
github.copilot.mcpServers的settings.json) - VS Code MCP(通过
servers的mcp.json) - Cursor(
mcp.json) - Windsurf(
mcp.json) - Zed(通过
context_servers的settings.json) - OpenCode(
~/.config/opencode/config.json) - Antigravity(通过
github.copilot.mcpServers的settings.json)
6、每次分析的自动设置
运行mimir analyze不仅仅索引你的代码。它还会:
- 在后台启动MCP守护进程
- 写入编辑器MCP配置
- 安装Claude Code钩子(搜索前图增强 + 写入后自动重新索引)
- 将4个方法论技能写入
.claude/skills/mimir/(探索、调试、影响分析、重构) - 生成带有实时索引统计的
AGENTS.md和CLAUDE.md
7、增量索引
在第一次完整索引之后,Mimir只重新处理更改的内容:
git diff HEAD → changed files
→ deleted files: remove nodes + cascade-delete edges
→ modified files: delete nodes/edges → re-parse + re-resolve
→ added files: parse + resolve + insert
→ re-cluster affected communities
→ re-trace affected execution flows
完整重新索引:~8秒。增量:< 2秒。
8、Web界面
不是AI代理?也有可视化界面:
mimir serve
# Open http://localhost:7842
基于Sigma.js v2 + Graphology的力导向图。探索聚类、追踪执行流程、可视化检查符号关系。
9、开始使用
# 安装(一行命令)
curl -fsSL https://raw.githubusercontent.com/thuongh2/git-mimir/main/install.sh | sh
# 或通过Go
go install github.com/thuongh2/git-mimir/cmd/mimir@latest
# 索引、启动守护进程、配置编辑器
mimir analyze .
mimir setup
原文链接:Mimir: I Built an Open-Source Code Intelligence Engine So AI Agents Can Actually Understand Code
汇智网翻译整理,转载请标明出处