autodev-codebase
基于向量嵌入的代码语义搜索引擎,支持40+语言、MCP协议集成和调用图分析,完全离线可用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于向量嵌入的代码语义搜索引擎,支持40+语言、MCP协议集成和调用图分析,完全离线可用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
张工干了 15 年 C++,维护一个 80 万行的遗留系统。上周他接到任务:给"用户权限管理"模块加一个审计功能。花了两个晚上用 grep 搜代码,翻遍了二十多个文件,还是没搞清楚哪些地方会调用权限校验函数。最后只能小心翼翼地改——改完果然线上出了 bug。
他不是不努力,是代码太大了,关键词搜索根本不够用。如果有一个工具,能理解代码的语义——知道"这段代码是干什么的"而不是"这个字符串在哪里出现",那该多好。
@autodev/codebase 就是来解决这个问题的。
简单来说,这是一个基于向量嵌入的代码语义搜索引擎。它的核心逻辑是:先把你的代码用 AI 模型转换成"数学向量"(专业术语叫 embedding),存入向量数据库;搜索时,把你的自然语言查询也转成向量,然后在向量空间里找最相似的代码片段。
这就像给代码建了一个"图书馆检索系统"——你不需要知道书的 ISBN,只需要描述"我想看关于量子力学入门的书",系统就能把相关的书推给你。
与传统的关键词搜索(如 ripgrep、grep)相比,语义搜索的优势在于理解意图而非字面。搜索"用户管理",它能返回 UserService、AuthHandler、权限控制模块——即使这些文件中从未出现"用户管理"这四个字。
项目支持多种嵌入模型提供商,这让它非常灵活:
| 提供商 | 说明 | 离线可用 |
|---|---|---|
| Ollama | 本地运行开源模型(如 nomic-embed-text) | ✅ |
| OpenAI | text-embedding-3-small 等商业模型 | ❌ |
| Jina | 免费额度,支持中文 | ❌ |
| OpenAI-Compatible | 支持任意兼容 OpenAI API 的后端 | 视后端而定 |
如果你对数据隐私有要求(不想把代码上传到第三方),强烈建议使用 Ollama 模式——所有计算都在本地完成,代码不会离开你的机器。
项目默认使用 SQLite + sqlite-vec 作为向量存储,这是一个纯本地化的方案,无需额外部署服务。sqlite-vec 是 SQLite 的向量扩展,支持近似最近邻搜索(ANN),性能足够个人项目使用。
如果数据量较大,也可以切换到 Qdrant(一个专门的高性能向量数据库),只需一条 Docker 命令即可启动:
docker run -d -p 6333:6333 -p 6334:6334 --name qdrant qdrant/qdrant
能把代码"读懂"而不是"匹配",关键在于 Tree-sitter——一个由 GitHub 开发的多语言增量解析库。它能把代码解析成语法树(AST),准确识别函数、类、方法、变量等结构。
@autodev/codebase 内置了 Tree-sitter wasm 版本,支持 40+ 编程语言,包括 TypeScript、Python、Java、C++、Rust、Go 等主流语言。这意味着无论你的项目是什么语言,都能得到准确的代码结构理解。
这是该项目最值得关注的设计亮点之一——它原生支持 Model Context Protocol(MCP)。
MCP 是 Anthropic 提出的 AI 上下文协议,旨在让 AI 助手能更好地与外部工具和数据源交互。@autodev/codebase 提供了两种 MCP 接入方式:
接入 MCP 后,AI 助手(如 Roo Code、Cursor、Claude Desktop)可以直接调用 codebase search 和 codebase outline,在对话中实时查询代码库。这比传统的"复制粘贴代码片段给 AI"要高效得多。
codebase search "用户权限" --demo
# 返回与"用户权限"语义相关的代码片段,
# 按相似度排序,并标注所在文件和行号
配合 LLM 重排序(Reranking),结果相关性可以进一步提升。重排序使用独立的 LLM(如 Ollama 的 qwen3-vl)对候选结果进行二次评估,给出 0-10 的相关性评分。这个双重排序策略(向量检索 + LLM 重排)在 RAG 系统中非常常见,迁移到代码搜索场景同样有效。
如果说语义搜索是"找相关代码",调用图分析就是"找因果链条"。给定一个函数名,它能画出:
这对于代码重构、bug 溯源、安全审计都极其有用。比如开头张工的问题,如果用调用图分析 checkPermission 函数,三秒钟就能知道所有调用它的代码位置和调用链深度。
调用图结果还支持导出为 Cytoscape.js 格式,配合项目自带的 graph_viewer.html,可以在浏览器中打开交互式可视化图表——拖拽节点、缩放、点击查看详情。
codebase outline src/auth.ts --summarize
这个功能先通过 Tree-sitter 解析代码结构,提取函数和类的定义信息;然后调用 LLM 为每个代码块生成自然语言摘要。如果文件很大,这个功能可以让你在几秒钟内了解一个陌生代码库的整体结构。
项目支持增量索引模式:代码文件发生变化时,自动重新索引相关部分。结合依赖分析缓存,重复分析可以快 10-50 倍。对于大型代码库,这个缓存机制直接影响使用体验。
项目以 npm 包形式发布,安装非常直接:
npm install -g @autodev/codebase
但实际使用需要解决两个依赖:
brew install ollama + ollama serve + ollama pull nomic-embed-text对于纯新手来说,Qdrant 的 Docker 依赖可能是第一个门槛。不过项目也支持无 Qdrant 的纯 SQLite 模式,降低了入门难度。
@autodev/codebase 是一个纯 CLI 工具,没有图形界面。所有操作都通过命令行完成:
# 索引代码库
codebase index --path=/my/project
# 语义搜索
codebase search "authentication"
# 调用图分析
codebase call --query="checkPermission"
# 代码大纲
codebase outline src/**/*.ts --summarize
# MCP 服务
codebase index --serve --port=3001
CLI 的好处是适合集成到自动化脚本和 CI/CD 流程中,但缺点是上手曲线较陡——用户需要熟悉命令行才能发挥全部功能。
通过 MCP 协议,@autodev/codebase 可以无缝接入支持 MCP 的 AI 编程助手。目前已测试兼容 Roo Code(官方声明基于该项目开发),理论上支持 MCP 的其他 IDE(如 Cursor、 Windsurf 等)也可以接入。
但需要注意:不是所有 IDE 都能完美支持 MCP 的 HTTP 模式,部分 IDE 只支持 stdio 模式,需要额外配置。
从源码结构来看,项目的核心模块划分清晰:
src/search/ — 搜索服务层,实现向量检索和重排序src/tree-sitter/ — 代码解析层,封装多语言解析逻辑src/commands/ — 命令行命令实现(index、search、outline、call)src/mcp/ — MCP 协议服务端实现src/config/ — 配置管理,支持 CLI / 项目级 / 全局三级配置src/code-index/ — 索引管理,处理索引创建、更新、缓存架构采用了依赖注入模式(通过 createNodeDependencies() 创建可注入的依赖),便于测试和扩展。测试使用 Vitest,覆盖了单元测试和 E2E 测试,测试配置相对完善。
语义搜索的准确性受限于 embedding 模型能处理的 token 数量。大文件可能被截断,影响检索质量。项目中通过配置 embedderModelDimension 来管理嵌入向量维度,但这需要用户对模型有一定了解。
Ollama 的开源嵌入模型(如 nomic-embed-text)对中文代码的语义理解能力相对有限。如果你的项目主要是中文注释或变量命名,建议尝试支持中文的 embedding 模型(如 Jina 的 jina-embeddings-v3),或者在 OpenAI-Compatible 模式下接入支持中文的后端。
虽然 Qdrant 能大幅提升大规模数据的检索性能,但它需要 Docker 环境。对于 Windows 用户或没有 Docker 使用经验的用户,这增加了一步部署成本。
截至分析时,项目仅有 120 颗 GitHub stars,ISSUE 数量为 3 个。虽然功能较为完整,但社区规模和用户反馈较少,实际使用中遇到问题时可能缺乏参考资料。
代码语义搜索并不是一个新概念,GitHub 的代码搜索、Copilot 的代码补全、Sourcegraph 都是这个领域的玩家。但 @autodev/codebase 的差异化在于:
这些特性使它特别适合:
从技术趋势看,MCP 协议正在成为 AI 编程工具的标准接口协议。随着更多 IDE 和 AI 助手支持 MCP,类似 @autodev/codebase 这样的代码库语义索引工具的价值会进一步凸显——它们本质上是给 AI 编程助手提供"代码记忆"的基础设施。
| 场景 | 推荐配置 | 难度 |
|---|---|---|
| 尝鲜体验 | codebase search --demo(内置演示数据) | ⭐ |
| 本地私有库 | Ollama + SQLite | ⭐⭐ |
| 团队共享 | Ollama + Qdrant(Docker) | ⭐⭐⭐ |
| 企业内网 | OpenAI-Compatible + Qdrant(内网部署) | ⭐⭐⭐⭐ |