Mimir 开源代码智能引擎

Mimir是一个基于Go的代码智能引擎,可以索引你的整个代码仓库。

Mimir 开源代码智能引擎
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.mcpServerssettings.json
  • VS Code MCP(通过serversmcp.json
  • Cursormcp.json
  • Windsurfmcp.json
  • Zed(通过context_serverssettings.json
  • OpenCode~/.config/opencode/config.json
  • Antigravity(通过github.copilot.mcpServerssettings.json

6、每次分析的自动设置

运行mimir analyze不仅仅索引你的代码。它还会:

  • 在后台启动MCP守护进程
  • 写入编辑器MCP配置
  • 安装Claude Code钩子(搜索前图增强 + 写入后自动重新索引)
  • 将4个方法论技能写入.claude/skills/mimir/(探索、调试、影响分析、重构)
  • 生成带有实时索引统计的AGENTS.mdCLAUDE.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

汇智网翻译整理,转载请标明出处