使用说明
语义搜索MCP
🔍 Claude code的语义代码搜索 -使用带有AI嵌入的自然语言对代码库进行索引和搜索
为什么选择Semantica?
问题: 查找代码 grep 或者正则表达式速度慢,需要精确的语法,并且缺少语义关系。
解决方案: Semantica使用AI嵌入为您的代码库建立索引,实现自然语言搜索:
❌ Traditional: grep -r "def authenticate" app/
✅ Semantica: "Find authentication logic"
→ Returns auth functions, middleware, login flows across all files
实例:
- “数据库连接在哪里配置?”→ 返回数据库设置和连接代码
- “显示错误处理模式”→ 返回try/catch块、错误类、救援块
- “查找用户验证逻辑”→ 返回验证器、服务方法、模型验证
✨ 主要特点
🚀 生产准备就绪(第1-3阶段完成)
- ✅ 索引成功率100% -AST分割合并分块消除了错误
- ✅ 比本地快2倍 -OpenAI提供商的表现优于Ollama
- ✅ 自动重新索引 -Git挂钩保持索引新鲜(<10s更新)
- ✅ 多个供应商 -Ollama(本地,免费)或OpenAI(云,快速)
- ✅ 增强的用户体验 -飞行前估计、进度跟踪、明确指导
🌳 基于AST的索引
- 智能代码分块保留了函数/类边界
- 使用树形图进行语言感知解析
- 50%块减少与初始分割
- 支持TypeScript、JavaScript、Ruby
🎯 混合搜索
- 结合向量相似度(语义)+TF-IDF(关键字)
- 比仅矢量搜索效率高40%
- 使用特定于代码的同义词进行查询扩展
- 按查询类型动态调整权重
⚡ 自动重新索引
- Git挂钩自动检测更改
- 增量更新在10秒内完成(快42倍!)
- 基于Merkle树的变化检测
- 后台处理(非阻塞)
🚀 快速开始
选项1:本地设置(免费,私人)
先决条件: 码头工人
# 1. Start services
docker run -d -p 19530:19530 milvusdb/milvus:latest
docker run -d -p 11434:11434 ollama/ollama:latest
docker exec ollama ollama pull nomic-embed-text
# 2. Install Semantica
git clone <your-repo-url>
cd semantica-search-mcp
npm install && npm run build
# 3. Configure Claude Code
# Add to ~/.config/claude/claude_desktop_config.json (Linux)
# Or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
{
"mcpServers": {
"semantica-search": {
"command": "/absolute/path/to/semantica-search-mcp/build/index.js"
}
}
}
# 4. Index your first project
# In Claude Code:
"Index the codebase at /path/to/your-project"
选项2:云设置(快速、可扩展)
先决条件: OpenAI API密钥
# 1. Install Semantica (same as Option 1, steps 2-3)
# 2. Set API key
export OPENAI_API_KEY="sk-..."
# 3. Create project config
# In your project: .semantica/config.json
{
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"dimensions": 1536,
"batchSize": 128,
"concurrency": 3,
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"timeout": 30000
}
},
"vectordb": {
"provider": "milvus",
"collectionName": "my_project"
}
}
# 4. Index your project (same as Option 1)
⚙️ 配置指南
配置文件位置
.semantica/config.json 在项目根目录中
完整配置参考
{
"version": "1.0.0",
"project": {
"name": "my-project",
"root": "/path/to/project",
"languages": ["typescript", "javascript", "ruby"]
},
"indexing": {
"granularity": "hybrid",
"chunkingStrategy": "ast-split-merge",
"maxChunkSize": 250,
"overlap": 50,
"include": ["src/**/*", "lib/**/*"],
"exclude": ["node_modules/**", "**/*.test.*"],
"languageConfig": {
"typescript": {
"extensions": [".ts", ".tsx"],
"chunkTypes": ["function", "class", "interface", "type"]
},
"ruby": {
"extensions": [".rb"],
"chunkTypes": ["def", "class", "module"]
}
}
},
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"dimensions": 1536,
"batchSize": 128,
"concurrency": 3,
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"timeout": 30000
}
},
"vectordb": {
"provider": "milvus",
"collectionName": "my_project",
"milvus": {
"host": "localhost",
"port": 19530,
"indexType": "IVF_FLAT",
"metricType": "COSINE"
}
},
"search": {
"strategy": "hybrid",
"maxResults": 10,
"minScore": 0.5,
"hybrid": {
"vectorWeight": 0.7,
"keywordWeight": 0.3
}
}
}
配置选项说明
indexing -要索引哪些文件
| 选项 | 类型 | 描述 | 最佳实践 |
|---|---|---|---|
granularity |
"hybrid" |
"function" |
"file" |
chunkingStrategy |
"ast-split-merge" |
分块算法 | 使用 "ast-split-merge" (100%成功) |
maxChunkSize |
number | 每个块的最大令牌数 | 250(最适合嵌入) |
include |
string[] | 要索引的全局模式 | ["src/**/*", "app/**/*"] |
exclude |
string[] | 要跳过的全局模式 | ["**/*.test.*", "node_modules/**"] |
languageConfig |
object | 语言特定设置 | 为每种语言定义 |
最佳实践:
{
"include": ["src/**/*", "lib/**/*"], // Core code only
"exclude": [
"node_modules/**", // Dependencies
"**/*.test.*", // Tests
"**/*.spec.*", // Specs
"dist/**", // Build output
"coverage/**" // Test coverage
]
}
embedding -如何生成嵌入
| 选项 | 类型 | 描述 | 最佳实践 |
|---|---|---|---|
provider |
"ollama" |
"openai" |
嵌入服务 |
model |
string | 型号名称 | "nomic-embed-text" 或 "text-embedding-3-small" |
dimensions |
数字 | 矢量维度 | 768(Ollama)或1536(OpenAI) |
batchSize |
number | 每批块数 | 64-128(平衡速度/内存) |
concurrency |
number | 并行批次 | 3-5(基于提供商级别) |
Ollama设置(本地,免费):
{
"provider": "ollama",
"model": "nomic-embed-text",
"dimensions": 768,
"batchSize": 64,
"concurrency": 5,
"ollama": {
"host": "http://localhost:11434",
"timeout": 30000
}
}
OpenAI设置(云,快速):
{
"provider": "openai",
"model": "text-embedding-3-small",
"dimensions": 1536,
"batchSize": 128,
"concurrency": 3,
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"timeout": 30000
}
}
vectordb -在哪里存储矢量
| 选项 | 类型 | 描述 | 最佳实践 |
|---|---|---|---|
provider |
"milvus" |
矢量数据库 | 使用 "milvus" (成熟、可扩展) |
collectionName |
string | 集合/索引名称 | 每个项目唯一 |
host |
string | 数据库主机 | "localhost" 对于本地 |
port |
number | 数据库端口 | 19530(Milvus默认值) |
indexType |
"IVF_FLAT" |
索引算法 | "IVF_FLAT" (平衡良好) |
metricType |
"COSINE" |
距离度量 | "COSINE" (最适合代码) |
search -如何搜索
| 选项 | 类型 | 描述 | 最佳实践 |
|---|---|---|---|
strategy |
"hybrid" |
搜索算法 | 使用 "hybrid" (改善40%) |
maxResults |
number | 要返回的结果 | 10-20(避免淹没) |
minScore |
number | 相似度阈值 | 0.5-0.7(按项目调整) |
vectorWeight |
number | 语义权重(0-1) | 0.7(语义偏好) |
keywordWeight |
number | 关键字权重(0-1) | 0.3(补码) |
🎯 最佳实践
适用于小型项目(<500个文件)
{
"indexing": {
"include": ["src/**/*"],
"exclude": ["**/*.test.*"]
},
"embedding": {
"provider": "ollama", // Free, fast enough
"batchSize": 32,
"concurrency": 3
}
}
时间: <1分钟 成本: 自由
中型项目(500-5K文件)
{
"indexing": {
"include": ["src/**/*", "lib/**/*"],
"exclude": ["node_modules/**", "**/*.test.*", "dist/**"]
},
"embedding": {
"provider": "openai", // Faster, worth the cost
"batchSize": 128,
"concurrency": 3
}
}
时间: 2-5分钟 成本: $0.05-$0.15
适用于大型项目(5K-10K文件)
{
"indexing": {
"include": [
"app/models/**/*", // Focus on core business logic
"app/services/**/*",
"app/queries/**/*"
],
"exclude": [
"**/*.test.*",
"app/controllers/**", // Exclude less critical code
"app/views/**"
]
},
"embedding": {
"provider": "openai",
"batchSize": 128,
"concurrency": 3 // Safe for Tier 1
}
}
时间: 10-15分钟 成本: $0.10-$0.25
用于CI/CD集成
{
"embedding": {
"provider": "openai", // No Docker needed!
"concurrency": 2, // Conservative for CI
"openai": {
"apiKey": "${OPENAI_API_KEY}" // From CI secrets
}
}
}
优点: 无需本地基础设施,设置简单
📊 提供商比较
嵌入提供者
| 特性 | Ollama | OpenAI |
|---|---|---|
| 成本 | 免费 | 每100万代币0.02美元 |
| 速度 | 6-7文件/秒 | 10-18文件/秒(快2倍) |
| 隐私 | 100%本地 | 云API |
| 设置 | Docker+模型下载 | 仅限API密钥 |
| 最适合 | 隐私,免费层 | 速度,CI/CD |
OpenAI模型
| 型号 | 尺寸 | 成本/1M代币 | 用例 |
|---|---|---|---|
| text-embedding-3-small | 1536 | $0.02 | ⭐ 推荐(最佳值) |
| 文本嵌入-3大 | 3072 | 0.13美元 | 最高质量(6.5倍成本) |
| text-embedding-ada-002 | 1536 | 0.10美元 | 传统版(不推荐) |
成本示例(OpenAI文本嵌入3-small)
| 项目大小 | 文件 | 估计。成本 |
|---|---|---|
| 小 | 50 | <0.001美元 |
| 中等 | 500 | 0.01-0.05美元 |
| 大型 | 5000 | 0.10-0.50美元 |
| 非常大 | 10000 | 0.20-1.00美元 |
每日增量更新: <$0.10/天(几乎免费!)
🧪 测试结果和验证
单元测试:47/47通过✅
npm test
# Results:
Test Suites: 3 passed
Tests: 47 passed (21 Ollama + 26 OpenAI)
Coverage: 100% (providers)
Time: ~25s
集成测试-真实代码库
使用真实的OpenAI和Ollama API进行测试:
| 项目 | 文件 | 块 | 时间(OpenAI) | 时间(Ollama) | 成功 |
|---|---|---|---|---|---|
| 项目A(TypeScript) | 46秒 | 453秒 | 3.2秒 | 11.9秒 | 100% |
| 项目B(Ruby) | 2367 | 8474 | 2.25分钟 | 22.1s* | 98.5% |
| 项目C(Ruby) | 8367 | 34761 | 13.1分钟 | 21.6分钟 | 97.4% |
*Ollama基线的较小测试集(352个文件)
主要发现:
- ✅ 对于大型仓库,OpenAI的速度提高了39-43%
- ✅ 在最佳设置下的成功率为97-98%(并发性:3)
- ✅ 成本可以忽略不计(每个项目0.001-0.12美元)
- ✅ 增量重新索引:<10秒(两个提供者)
性能基准
索引速度
| 度量 | 目标 | 已实现 | 状态 |
|---|---|---|---|
| 小项目(<100个文件) | <30s | 3-10s | ✅ 超过 |
| 中等项目(100-1K) | <5分钟 | 2-3min | ✅ 超过 |
| 大型项目(1K-10K) | <15分钟 | 10-13分钟 | ✅ 遇见 |
| 搜索延迟 | <2s | <1s | ✅ 超过 |
| 增量更新 | <10s | <10s | ✅ 遇见 |
| 成功率 | 99%+ | 100% | ✅ 超过 |
速度比较(OpenAI与Ollama)
大型Ruby项目(8367个文件,34761个块):
| 提供者 | 时间 | 速度 | 块/秒 |
|---|---|---|---|
| Ollama | 21.6分钟 | 6.5个文件/秒 | 28个块/秒 |
| OpenAI(c:3) | 13.1分钟 | 10.7个文件/秒 | 44块/秒 |
OpenAI节省8.5分钟(速度提高39%) 🚀
📖 使用示例
为代码库建立索引
"Index the codebase at /Users/me/Projects/my-app"
输出:
📊 Pre-flight check for my-app
────────────────────────────────────────────────────────
📁 Scope:
• Files to index: 2,367
• Estimated chunks: 8,474
• Provider: openai
⏱️ Estimated time: ~2-3 minutes
(This is a one-time operation)
💰 Estimated cost: ~$0.0297
🔍 System checks:
✅ Configuration file
✅ Vector database connection
✅ Embedding provider
✅ Disk space
✅ Ready to index!
Indexing will run in background - you can continue working.
────────────────────────────────────────────────────────
🚀 Indexing started in background!
Job ID: index_1707445123
Estimated time: ~2-3 minutes
Estimated cost: ~$0.0297
💡 You can continue using Claude Code normally.
Check progress: "Get index status"
I'll show a summary when indexing completes!
📝 This is a one-time operation. Future updates via git hooks are <10s.
搜索代码
"Search for authentication logic in my-app"
退货:
🔍 Found 8 results (0.7s):
1. src/services/auth.service.ts:45-67 (score: 0.92)
export class AuthService {
async authenticate(credentials: Credentials) {
// JWT-based authentication
}
}
2. src/middleware/auth.middleware.ts:12-28 (score: 0.87)
export function requireAuth(req, res, next) {
// Check JWT token
}
检查索引状态
"Get index status for my-app"
索引时:
📊 Indexing in progress (Job #index_1707445123)
Phase: Embedding
Progress: 67.3% (5,700/8,474 chunks)
Speed: 52 chunks/s
ETA: 2.1 minutes
完成后:
✅ Index Status for my-app
Collection: my_app
Status: Ready
Vectors: 8,346
Dimensions: 1536
Last updated: 2 minutes ago
🏆 我们取得的成就
第2阶段改进(完成)
- ✅ 100%索引成功 (94%)
- ✅ 快8-10倍 (小型回购为5.9秒vs 42秒)
- ✅ 自动重新索引 通过git钩子
- ✅ 后台操作 (非阻塞)
- ✅ 提高搜索质量 (TF-IDF+查询扩展)
- ✅ JavaScript支持 添加
3.1阶段改进(完成)
- ✅ OpenAI提供商 (大型仓库速度提高2倍)
- ✅ 飞行前估算 (前期时间/成本)
- ✅ 更好的用户体验 (明确的指导、建议)
- ✅ 语言过滤 (仅支持索引类型)
- ✅ 26个单元测试 (供应商100%覆盖)
🛠️ MCP工具
index_codebase -为项目建立索引
参数:
path(必填):项目根目录background(可选):在后台运行(默认值:true)
特征:
- 飞行前估算(文件、时间、成本)
- 开始前进行健康检查
- 默认情况下为背景模式
- 进度跟踪
- 漂亮的竣工总结
search_code -语义搜索
参数:
query(必填):自然语言搜索查询maxResults(可选):结果数量(默认值:10)minScore(可选):相似性阈值0-1(默认值:0.7)language(可选):按语言筛选pathPattern(可选):按路径正则表达式过滤
特征:
- 混合搜索(矢量+关键字)
- 查询扩展(同义词)
- TF-IDF关键字提取
- 用分数对结果进行排名
get_index_status -检查状态
特征:
- 索引时的实时进度
- 空闲时收集统计信息
- 矢量计数和维度
- 上次更新时间戳
其他工具
reindex_changed_files-增量更新(<10s)enable_git_hooks-git操作的自动重新索引onboard_project-一个命令设置reset_state-紧急清理clear_index-删除所有数据
⚡ 性能提示
优化速度
1.使用OpenAI (大型仓库速度提高2倍)
{ "embedding": { "provider": "openai", "concurrency": 3 } }
2.提高并发性 (如果是Tier 2+)
{ "embedding": { "concurrency": 5 } } // For Tier 2+ (5,000 RPM)
3.选择性索引 (仅索引核心代码)
{
"indexing": {
"include": ["app/models/**", "app/services/**"]
}
}
优化成本
1.使用Olama (完全免费)
{ "embedding": { "provider": "ollama" } }
2.选择性索引 (更少的文件=更低的成本)
3.使用增量更新 (git挂钩,自动!)
优化可靠性
1.较低的并发性 (成功率97-98%)
{ "embedding": { "concurrency": 3 } } // vs 5: more reliable
2.使用Olama (100%成功,无速率限制)
🔧 故障排除
“找不到要索引的文件”
原因: 包含的图案与任何文件都不匹配
解决方案:
{
"indexing": {
"include": ["**/*.ts", "**/*.rb"], // Match all supported files
"exclude": ["node_modules/**"]
}
}
“矢量数据库不可访问”
原因: Milvus不跑
解决方案:
# Check if running
curl http://localhost:19530/healthz
# Start if needed
docker run -d -p 19530:19530 milvusdb/milvus:latest
“嵌入提供程序不可访问”
对于Ollama:
# Check if running
curl http://localhost:11434/api/tags
# Start if needed
ollama serve
对于OpenAI:
# Check API key is set
echo $OPENAI_API_KEY
# Set if missing
export OPENAI_API_KEY="sk-..."
速率限制(OpenAI)
症状: 重试消息多,成功率<95%
解决方案: 降低并发性
{
"embedding": {
"concurrency": 2, // Down from 3 or 5
"batchSize": 64 // Down from 128
}
}
索引速度慢
原因: 文件数量大或设置保守
解决:
- 选择性标引法 -仅索引核心目录
- 提高并发性 -如果没有费率限制
- 使用OpenAI -比Ollama快2倍
- 排除更多 -跳过测试、文档、生成的代码
🎓 高级用法
增量重新索引
自动(推荐):
"Enable git hooks for my-project"
Git挂钩自动更新索引:
- 分支开关(<10s)
- 拉取/合并操作(<10s)
- 新提交(<10s)
手册:
"Re-index changed files in my-project"
多项目设置
独立索引多个项目:
# Project 1
cd /path/to/project1
# Create .semantica/config.json with collectionName: "project1"
# Project 2
cd /path/to/project2
# Create .semantica/config.json with collectionName: "project2"
# Index both
"Index the codebase at /path/to/project1"
"Index the codebase at /path/to/project2"
# Search specific project
"Search for auth in project1"
提供商切换
从Ollama切换到OpenAI:
- 更新配置:
{
"embedding": {
"provider": "openai",
"dimensions": 1536 // Changed from 768!
}
}
- 清除旧索引(维度已更改):
"Clear index for my-project"
- 重新索引:
"Index the codebase at /path/to/my-project"
📚 文档
所有配置选项都记录在本README中。有关开发指导,请参阅 CLAUDE.md.
🤝 贡献
开发设置
git clone <repo-url>
cd semantica-search-mcp
npm install
npm run build
开发流程
npm run watch # Auto-rebuild on changes
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run inspector # MCP debugging
代码质量
- TypeScript:严格模式已启用
- 测试:80%以上的覆盖率目标
- 掉毛:自动格式化
- 建筑:可扩展性的提供者模式
📈 性能指标
索引性能(第2阶段→ 第3阶段)
| 度量 | 第1阶段 | 第2阶段 | 第3阶段(OpenAI) |
|---|---|---|---|
| 成功率 | 94% | 100% | 97-98% |
| 小型存储库(50个文件) | ~42秒 | 5.9秒 | 3.2秒 |
| 大型存储库(8K文件) | 不适用 | 不适用 | 13.1分钟 |
| 增量更新 | N/A | <10s | <10s |
搜索质量
| 指标 | 目标 | 已实现 |
|---|---|---|
| 相关性(前5名) | 90%+ | 92% |
| 延迟 | <2s | <1s |
| “无结果”率 | <10% | <5% |
🔒 安全与隐私
数据处理
Ollama(当地):
- ✅ 100%本地处理
- ✅ 没有数据离开您的机器
- ✅ 完全隐私
OpenAI(云):
- ⚠️ 发送到OpenAI API的代码块
- ⚠️ 仅嵌入(OpenAI无法搜索)
- ⚠️ 为API键使用环境变量(从不提交!)
API密钥管理
永远不要提交API密钥:
{
"openai": {
"apiKey": "${OPENAI_API_KEY}" // ✅ Environment variable
}
}
不是这个:
{
"openai": {
"apiKey": "sk-proj-..." // ❌ NEVER hardcode!
}
}
🎯 常见问题解答
Q: 索引需要多长时间? A: 3s-15分钟,具体取决于尺寸。小项目(<100个文件):<30s。大型项目(5K+文件):10-15分钟。 这是一次性的 -增量更新小于10秒!
Q: OpenAI的价格是多少? A: 初始指数为每个项目0.001-0.20美元。每日更新:<0.10美元。大多数项目的成本比一杯咖啡还低! ☕
Q: 我可以在Ollama和OpenAI之间切换吗? A: 是的!只需更新配置并重新索引(维度更改需要清除旧索引)。
Q: 如果索引中断会发生什么? A: 重新运行。这是一个一次性操作,为了简单起见,不需要检查点。
Q: 它离线工作吗? A: 与Ollama合作:是(100%本地)。OpenAI:NO(需要互联网)。
Q: 这与Cursor或GitHub Copilot相比如何? A: 光标在1-3分钟内索引~500-2K个文件(带缓存)。我们在12-13分钟内对所有文件(8K+)进行索引。考虑到覆盖范围,速度更完整,可比。
🚀 接下来是什么
完成✅
- 第一阶段:TypeScript/Ruby、Ollama、Milvus、AST分块
- 第2阶段:100%成功,自动重新索引,JavaScript,性能
- 第3.1阶段:OpenAI提供商、用户体验改进、测试
进行中🔄
- 第3.2阶段:Qdrant矢量数据库提供程序(更轻便的替代品)
- 第3.3阶段:专业文件
- 第3.4阶段:版本v2.1.0
未来🔮
- Python、Go、Java语言支持
- 嵌入缓存(重新索引速度提高50-70%)
- BM25关键字搜索
- Web仪表板UI
📄 许可证
私人(目前)
🙏 致谢
基于以下研究构建:
问题或议题? 检查 文档 或制造问题。
准备好开始了吗? 跟随 快速开始 上面的向导! 🚀
