CodeBendKit/codeseek
GitHub: CodeBendKit/codeseek
基于 Rust 的代码智能 CLI 工具,通过调用图分析与混合语义搜索为 AI 编程助手提供精准的代码检索与导航能力。
Stars: 818 | Forks: 43
# CodeSeek
**为 Claude Code 打造的代码智能 CLI 工具。** 基于 AST 的调用图分析 + 语义搜索 —— 直接在你的终端中运行。
## 快速开始
```
# 通过 npm 安装(自动处理 setup wizard + binary download)
npm install -g codeseek
# 首次运行 — 交互式 setup wizard 配置你的 embedding model
codeseek
# 索引你的项目
codeseek init
# 按符号名称搜索代码
codeseek search main --limit 10
# 查询 call graph
codeseek callers main
codeseek callees process_data
# 作为 MCP tools 注册到 Claude Code / Codex
codeseek install
# 检查状态
codeseek status
# 在 git commits 上自动索引
codeseek install-hooks
```
自然语言代码搜索示例
```
╰─$ codeseek search 'how the code embedding work'
1. get_embedding (0.7973)
/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/embedding_service.rs:0
2. EmbeddingService (0.2855)
/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/embedding_service.rs:0
3. EmbeddingData (0.1449)
/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/embedding_service.rs:0
4. EmbeddingResponse (0.1304)
/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/embedding_service.rs:0
5. default_model (0.0450)
/home/do/ssd/iohub/dev/codeseek/rust-core/src/config.rs:0
```
函数调用图示例
```
╰─$ codeseek callgraph apply_rerank
Call graph for 'apply_rerank' (depth=1):
== Callers (upstream, depth=1) ==
search (/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/hybrid_search.rs:210)
== Callees (downstream, depth=1) ==
rerank (/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/reranker_service.rs:331)
config (/home/do/ssd/iohub/dev/codeseek/rust-core/src/services/hybrid_search.rs:325)
```
## 安装
### npm
```
npm install -g codeseek
```
npm 包提供了一个轻量级的 JS 封装,负责处理以下内容:
| 步骤 | 描述 |
|------|-------------|
| **首次运行向导** | 通过交互式 CLI 提示输入 embedding API token、模型和 base URL |
| **二进制文件下载** | 自动从 GitHub Releases 拉取适用于你平台的正确 Rust 二进制文件 |
| **透传** | 将所有命令(`init`、`search`、`callers` 等)转发给原生二进制文件 |
支持的平台:
| 平台 | 架构 |
|----------|-------------|
| macOS | arm64 (Apple Silicon), x64 (Intel) |
| Linux | x64 |
### Homebrew
```
brew tap CodeBendKit/codeseek git@github.com:CodeBendKit/codeseek.git
brew install codeseek
```
### 从源码构建
```
# 安装 protoc
# macos: brew install protobuf
# ubuntu: sudo apt install protoc
git clone https://github.com/CodeBendKit/codeseek.git
cd codeseek
./build.sh --release
```
`build.sh` 会编译 TypeScript 封装(`dist/`)和 Rust 二进制文件,然后将其安装到 `~/.codeseek/bin/`。
## 命令
| 命令 | 描述 |
|---------|-------------|
| `codeseek` | 首次设置向导(交互式配置 embedding 模型) |
| `codeseek init` | 构建/更新代码索引(首次运行为全量构建,此后基于 MD5 增量更新) |
| `codeseek status` | 索引统计信息:函数、文件、上次更新时间 |
| `codeseek search ` | 符号名称搜索(依次回退:向量 → 图谱名称匹配) |
| `codeseek callers ` | 查找调用该符号的函数 |
| `codeseek callees ` | 查找该符号调用的函数 |
| `codeseek callgraph ` | 查询具有可配置深度(双向)的调用图 |
| `codeseek list` | 列出所有已索引的项目及其路径 |
| `codeseek install` | 在 Claude Code / Codex 中将 codeseek 注册为 MCP 工具 |
| `codeseek uninstall` | 移除 MCP 集成 |
| `codeseek uninit` | 删除当前项目的索引 |
| `codeseek install-hooks` | 安装 git hooks(post-commit/post-merge → `codeseek init`) |
| `codeseek serve --mcp` | 启动 MCP 服务器(stdio JSON-RPC,由 Claude Code 内部使用) |
所有查询命令均支持 `--json` 以获取机器可读的输出。
## Claude Code / Codex 集成
```
codeseek install
```
将 MCP 服务器配置写入:
| Agent | 配置文件 |
|-------|------------|
| **Claude Code** | `~/.claude.json`(全局,所有项目)或 `./.mcp.json`(项目本地) |
| **Codex CLI** | `~/.codex/config.toml` |
Claude Code 在重启后会自动发现这些工具:
| 工具 | 功能 |
|------|-----------|
| `codeseek_search` | 按名称查找符号 |
| `codeseek_callers` | 追踪上游调用者 |
| `codeseek_callees` | 追踪下游被调用者 |
| `codeseek_callgraph` | 查询具有可配置深度(双向)的调用图 |
| `codeseek_status` | 检查索引健康状况 |
移除集成:
```
codeseek uninstall
```
## 工作原理
### 索引构建 (`codeseek init`)
```
Source files
→ Tree-sitter AST parse (7 languages)
→ Extract functions / classes / methods
→ Batch embed via API (20 texts per call, SQLite cache)
→ Store vectors in LanceDB
→ Build BM25 index in Tantivy
→ Serialize call graph (PetCodeGraph)
→ Save to ~/.codeseek//
```
**幂等性**:首次运行为全量构建,后续运行会对比 MD5 哈希值 —— 仅对发生更改的文件进行重新处理。使用 `codeseek install-hooks` 可在 git commit/merge 时自动重新索引。
### 混合搜索管道 (`codeseek search`)
```
┌─────────────────────┐
User query ────────────→│ Embedding Model │──→ Query vector
└─────────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌───────────────┐ ┌───────────────┐
│ Dense Search │ │ Sparse Search │ │ Graph Search │
│ (LanceDB ANN)│ │ (Tantivy BM25)│ │ (PetCodeGraph)│
└──────┬───────┘ └──────┬────────┘ └────────┬──────┘
│ │ │
└──────────────────────┼────────────────────────┘
▼
┌─────────────────┐
│ RRF Fusion │ ← Reciprocal Rank Fusion
│ (Top-20 candidates)│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Reranker │ ← Cross-Encoder fine re-ranking
│ (Qwen3-Reranker)│ scores each (query, code) pair
└────────┬────────┘
│
▼
┌─────────────────┐
│ Final Results │ ← Top-5 (or Top-N)
└─────────────────┘
```
| 阶段 | 技术 | 作用 | 速度 |
|-------|-----------|------|:-----:|
| **稠密搜索** | LanceDB + Embedding 模型 | 语义向量相似度 | 快速 |
| **稀疏搜索** | Tantivy BM25 | 关键词与 token 匹配 | 快速 |
| **RRF 融合** | Reciprocal Rank Fusion | 公平合并异构分数 | 瞬间 |
| **重排器** | Cross-Encoder (Qwen3-Reranker-4B) | 全交互精确度评分 | ~1-2秒 |
| **回退机制** | PetCodeGraph | 基于图谱的名称搜索(无需 API) | 瞬间 |
如果 embedding/重排器不可用,管道会优雅地回退到基于图谱的名称搜索。
### 存储
- **配置**: `~/.codeseek/config.json`(全局,所有项目共享)
- **索引**: `~/.codeseek//`
- `project.json` — 项目元数据
- `graph.bin` — 序列化的调用图
- `embeddings.lance/` — LanceDB 向量数据
- `tantivy_bm25/` — BM25 全文索引
- `file_hashes.json` — MD5 增量跟踪
没有 daemon,没有 HTTP 服务器。每个命令都是一个独立的进程。
## 支持的语言
| 语言 | 函数 | 结构体/类 | 调用图 |
|----------|:---------:|:---------------:|:----------:|
| Rust | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ |
| JavaScript | ✅ | ✅ | ✅ |
| TypeScript | ✅ | ✅ | ✅ |
| Go | ✅ | ✅ | ✅ |
| C/C++ | ✅ | ✅ | ✅ |
| Java | ✅ | ✅ | ✅ |
## 配置
`~/.codeseek/config.json`:
```
{
"embedding": {
"provider": "openai-compatible",
"model": "Qwen/Qwen3-Embedding-4B",
"api_token": "sk-...",
"api_base_url": "https://api.siliconflow.cn/v1",
"dimensions": 2560
},
"index": {
"min_code_block_length": 16,
"enable_reranker": true,
"hybrid": {
"enable_bm25": true,
"bm25_top_k": 20,
"vector_top_k": 20,
"rrf_k": 60,
"rrf_top_k": 20
},
"reranker": {
"enabled": true,
"model": "Qwen/Qwen3-Reranker-4B",
"api_token": "sk-...",
"api_base_url": "https://api.siliconflow.cn/v1/rerank",
"top_n": 5,
"candidate_multiplier": 5,
"timeout_secs": 60
}
},
"installed_hooks": {}
}
```
### 模型角色
| 模型 | 角色 | 何时使用 |
|-------|------|------|
| `Qwen/Qwen3-Embedding-4B` | 将代码转换为向量以进行稠密搜索 | 索引构建期间 |
| `Qwen/Qwen3-Reranker-4B` | 对(查询,代码)对进行精确度评分 | 搜索期间 |
在首次运行时通过交互式向导进行设置,或手动创建。
## 开发
```
cd rust-core
# 构建
cargo build
# 构建并安装到 ~/.codeseek/bin/
cd .. && ./build.sh --release
# 运行测试
cargo test
# 编译 TypeScript wrapper
npm run build
```
## 许可证
MIT
技术栈:Tree-sitter · Petgraph · LanceDB · Tantivy · Tokio · Clap
标签:AI编程助手, MCP, Rust, SOC Prime, 代码智能, 可视化界面, 开发工具, 网络流量审计, 语义搜索, 通知系统