CodeRAG Go
混合代码库搜索(BM25关键字搜索+可选矢量搜索)作为一个Go二进制文件,带有MCP服务器,可与Cursor、Claude等集成。
受启发于 SylphxAI/代码 (使用AST分块、混合TF-IDF+向量、MCP就绪的闪电般快速的语义代码搜索)。
安装和使用
要求: 转到1.25+
默认版本包括用于可选矢量搜索的LanceDB。在运行时设置相关环境变量时启用嵌入;没有它们,只使用BM25搜索。
# Clone and build (with LanceDB for hybrid search)
git clone https://github.com/matperez/coderag-go.git && cd coderag-go
# One-time: download native LanceDB libraries (required for build with embeddings)
make download-lancedb
# Build with embeddings (Makefile sets CGO_LDFLAGS automatically)
make build
# Or build without embeddings (BM25 only, no CGO)
make build-no-embeddings嵌入(可选): 若要启用混合BM25+矢量搜索,请为兼容OpenAI的API设置环境变量。启动时,二进制文件将创建一个嵌入提供程序和向量存储;然后,索引将把块嵌入写入LanceDB codebase_search 将使用混合排名。
OPENAI_API_KEY-API密钥(可以是本地服务器的任何值,例如。ollama)OPENAI_BASE_URL-API基本URL(默认值:https://api.openai.com/v1)EMBEDDING_MODEL或OPENAI_EMBEDDING_MODEL--模型名称(默认值:text-embedding-3-small)
当地Ollama的例子:
export OPENAI_BASE_URL="http://localhost:11434/v1"
export OPENAI_API_KEY="ollama"
export EMBEDDING_MODEL="nomic-embed-text-v2-moe"
# Optional: set context size (e.g. 8192); also truncates long inputs so they fit (or set EMBEDDING_MAX_INPUT_CHARS explicitly)
export OLLAMA_NUM_CTX=8192
./coderag-mcp --root /path/to/project如果无法访问嵌入API或无法打开矢量存储,则应用程序会记录警告并以BM25-only模式运行。
旗帜:
--root--项目根目录用于索引和搜索(默认值:.)--index-only--运行索引并退出(不要启动MCP)--max-size--最大文件大小(字节)(0=无限制)--log-level--日志级别:debug,info,warn,error(默认值:从CODERAG_LOG或info)--pprof--在地址处启用pprof HTTP服务器,例如。:6060(或设置CODERAG_PPROF);用于索引期间的CPU/内存分析
登录中: 输出转到stderr(文本格式)。这 CODERAG_LOG 环境变量设置不使用标志时的级别(debug, info, warn, error).已记录:启动(root,data_dir);索引进度(每10个文件和完成时);处理完所有文件后——IDF计算、存储块和BM25向量,以及(在启用嵌入时)生成和写入嵌入;然后 indexing done;工具调用(代码库搜索、代码库索引状态);搜索错误;跳过的文件。
分析: 与...一起跑 --pprof :6060 (或 CODERAG_PPROF=:6060).然后打开 http://localhost:6060/debug/pprof/ 在浏览器中或运行 go tool pprof -http=:8080 http://localhost:6060/debug/pprof/profile?seconds=30 捕获30秒的CPU配置文件,或 go tool pprof http://localhost:6060/debug/pprof/heap 获取堆快照。使用此功能查看索引过程中CPU或内存的使用情况。
示例:
# Index a repository
./coderag-mcp --root /path/to/project --index-only
# Run MCP server (expects JSON-RPC on stdin/stdout)
./coderag-mcp --root /path/to/project索引数据存储在 ~/.coderag-go/projects// (绝对值的哈希值 --root 路径)。
控制台CLI(coderag-CLI)
coderag-cli 是一个查询现有索引(无索引)的控制台客户端。可用于在不运行MCP服务器的情况下进行测试和脚本编写。
构建于 make build (输出 bin/coderag-cli 和 bin/coderag-mcp)或 make build-cli 仅适用于CLI。索引必须已经存在(使用创建它 coderag-mcp --root --index-only).
用途:
# Show index stats
coderag-cli --root /path/to/project status
coderag-cli --root /path/to/project --json status
# Search (same semantics as MCP codebase_search)
coderag-cli --root /path/to/project search "your query" [--limit N] [--include-content]
coderag-cli --root /path/to/project --json search "query" [--limit N] [--ext .go,.js] [--path-filter dir] [--exclude test]全球旗帜: --root (项目根目录,默认 .), --json (机器可读输出 status 和 search).
支持的文件格式
只有具有已知扩展名的文件才会被索引。对于每种具有 树保姆 语法,组块使用AST(函数、类、类型等);否则,内容将按字符拆分。这 .txt 扩展仅使用基于字符的分块(没有语法)进行索引。
使用AST分块的语言: Go,JavaScript/TypeScript(.js, .mjs, .cjs, .ts, .tsx)、CSS、Markdown、YAML、TOML、协议缓冲区(.proto)、JSON、Python(.py),鲁比(.rb),C/C++(.c, .h, .cpp, .cc, .cxx, .hpp, .hh, .hxxC.cs),巴什(.sh),HTML(.html, .htmJava.java),生锈(.rs),斯威夫特(.swift),PHP(.php),卢(.lua),科特林(.kt),Scala(.scala, .sc),Groovy(.groovy, .grvy, .gy, .gvy),灵丹妙药(.ex, .exs),榆树(.elm),OCaml(.ml, .mli),HCL(.hcl),提示(.cue)、Dockerfile、Svelte(.svelte),SQL(.sql).
索引过程中会忽略不支持的扩展名。
MCP配置
光标
在MCP设置中添加服务器,例如 .cursor/mcp.json 或在光标设置中:
{
"mcpServers": {
"coderag-go": {
"command": "/path/to/coderag-mcp",
"args": ["--root", "/path/to/your/project"]
}
}
}首次使用前运行索引:
/path/to/coderag-mcp --root /path/to/your/project --index-onlyClaude Desktop/其他客户
相同的想法:设置 command (路径到 coderag-mcp)以及 args: ["--root", " "].运输是标准的。
在没有游标/代理的情况下测试MCP: 使用 MCP检查员 调用工具(例如。 codebase_search, codebase_index_status)通过stdio:
npx @modelcontextprotocol/inspector -- ./bin/coderag-mcp --root MCP工具
- 代码库搜索 --搜索代码库(BM25或启用嵌入时的BM25+向量):
query,limit,file_extensions,path_filter,exclude_paths,include_content.响应为带有路径和可选代码段的markdown。最适合确切的术语、方法/类型/API名称和原型/合同名称;使用path_filter或file_extensions缩小到一种服务或语言。 - 代码库_索引_状态 --索引状态:
is_indexing,progress,文件和块计数;当索引时,current_file包括在内。
文档
构建和测试
make build # build both bin/coderag-mcp and bin/coderag-cli (with LanceDB)
make build-cli # build only bin/coderag-cli
make build-no-embeddings # build both without LanceDB (BM25 only)
make test # go test ./...
make lint # golangci-lint run基准: 跑 go test -bench=. -benchmem ./internal/tokenizer/ ./internal/search/ ./internal/indexer/ 衡量标记化、搜索和索引性能;用于捕捉回归并证明优化的合理性。
要在没有LanceDB的情况下构建(仅BM25,没有矢量存储),请运行 make build-no-embeddings。当矢量存储不可用时,生成的二进制文件将仅使用BM25搜索。
许可证
MIT。看 许可证.
