转到文档MCP服务器
Golang中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长MCP(Model Context Protocol)服务器。将文档矢量化PostgreSQL + pgvector中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
特徴
- 📚 文档矢量化: OpenAI Embeddings API或 Ollama(完全无料) 使用
- 🔍 语义搜索:使用余弦相似度的高级搜索功能
- 💾 PostgreSQL+pgvector:支持快速矢量相似度搜索
- 🔧 MCP协议: Claude Code可集成的工具
- 📝 支持多种格式:.md、.txt、.go、.js、.ts、.py、.java、.c、.cpp、.h、.hpp
- 💰 完全免费选项: Ollama如果使用API无需钥匙,完全免费使用
交付工具
MCP服务器提供以下工具:
基本工具
- 搜索文档:在矢量搜索中搜索文档
- 索引文档:索引单个文件
- 索引目录:索引目录中的所有文件
- list_文档:显示索引文档列表
- 删除文档:删除文档
- get_stats:获取统计信息(包括按文件类型统计)
高级功能🆕
- search_with_context:上下文搜索(同时显示上下信息块)
- 搜索与筛选:筛选搜索(通过文件类型或路径进行筛选)
- reindex_document:重新索引文档
- 索引目录增量:增量索引(仅更新更改文件)
- get_document_info:获取文档详细信息
安装,安装
前提条件
- Go 1.21以上
- Docker&Docker编写
安装说明
- 克隆存储库:
git clone
cd go-doc-mcp- 安装依赖关系:
go mod download- 设置环境变量:
cp .env.example .env
# .envファイルを編集(無料で使うならデフォルトのままでOK)- PostgreSQL和Ollama启动:
docker-compose up -d数据库和Ollama进行动态观察时的轴心点
docker-compose logs -f
# "database system is ready to accept connections"が表示されるまで待つ- Ollama下载嵌入式模型(仅第一次):
docker exec -it go-doc-mcp-ollama ollama pull nomic-embed-text单击功能区上Makefile使用:
make ollama-pull构建和运行
# ビルド
go build -o go-doc-mcp main.go
# 実行
./go-doc-mcp或直接运行:
go run main.go选择嵌入式供应商
选项1:Ollama(推荐・完全免费)
优点:
- 完全无料
- API无需按键
- 隐私保护(数据仅限本地)
- 快速(本地运行)
设定(默认值):
EMBEDDING_PROVIDER=ollama
OLLAMA_URL=http://localhost:11434
EMBEDDING_MODEL=nomic-embed-text
EMBEDDING_DIMENSIONS=768推荐型号:
nomic-embed-text:768维,平衡良好(默认)mxbai-embed-large:1024维,更高质量all-minilm: 384次元、軽量・高速
切换模型:
# 別のモデルをダウンロード
docker exec -it go-doc-mcp-ollama ollama pull mxbai-embed-large
# .envファイルで設定を変更
EMBEDDING_MODEL=mxbai-embed-large
EMBEDDING_DIMENSIONS=1024选项2:OpenAI(收费)
优点:
- 高质量嵌入
- 不需要服务器
设定:
EMBEDDING_PROVIDER=openai
OPENAI_API_KEY=your-api-key-here
EMBEDDING_MODEL=text-embedding-3-small
EMBEDDING_DIMENSIONS=1536成本(2024年時点):
- text-embedding-3-small:0.02美元/1M代币
- text-embedding-3-large:0.13美元/1M代币
使用方法
Claude Code中的设置
Claude Code的配置文件(claude_desktop_config.json或claude_code_config.json)中添加以下内容:
Ollama(免费):
{
"mcpServers": {
"go-doc-mcp": {
"command": "/path/to/go-doc-mcp",
"env": {
"EMBEDDING_PROVIDER": "ollama",
"OLLAMA_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "nomic-embed-text",
"EMBEDDING_DIMENSIONS": "768",
"POSTGRES_HOST": "localhost",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "vectordb",
"CHUNK_SIZE": "1000",
"CHUNK_OVERLAP": "200"
}
}
}
}OpenAI(收费):
{
"mcpServers": {
"go-doc-mcp": {
"command": "/path/to/go-doc-mcp",
"env": {
"EMBEDDING_PROVIDER": "openai",
"OPENAI_API_KEY": "your-api-key",
"EMBEDDING_MODEL": "text-embedding-3-small",
"EMBEDDING_DIMENSIONS": "1536",
"POSTGRES_HOST": "localhost",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "vectordb"
}
}
}
}基本用例
- 索引目录(增量更新):
Claude Codeで: "index_directory_incremental ツールを使って ./docs ディレクトリをインデックス化して"*添加新文件,更新变更文件,跳过未变更文件*
- 查找文档:
Claude Codeで: "search_documents ツールで 'authentication' を検索して"- 上下文搜索(建议):
Claude Codeで: "search_with_context ツールで 'database connection' を検索して、前後のコンテキストも表示して"*搜索结果前后的信息块也会显示出来,更容易理解*
- 筛选搜索:
Claude Codeで: "search_with_filter ツールで 'error handling' を .go ファイルのみで検索して"- 重新索引文档:
Claude Codeで: "reindex_document ツールで ./docs/api.md を再インデックス化して"- 查看统计信息:
Claude Codeで: "get_stats ツールでドキュメントの統計を表示して"高级用例
仅搜索特定文件类型:
search_with_filter で "memory management" を [".c", ".cpp", ".h"] で検索仅在特定目录中搜索:
search_with_filter で "API documentation" を paths: ["docs/api/"] で検索查看文档详细信息:
get_document_info で ./src/main.go の情報を表示*显示文件散列、大小、信息块数、更新日期和时间等*
设定
环境变数
|变量名|说明|默认值| |--------|------|--------------| | EMBEDDING_PROVIDER 嵌入式供应商 ollama | | OLLAMA_URL | Ollama API的,之URL | http://localhost:11434 | | OPENAI_API_KEY | OpenAI API密钥(仅在使用openai时必需) | EMBEDDING_MODEL 使用的嵌入模型 nomic-embed-text (奥拉马)/ text-embedding-3-small (openai)| | EMBEDDING_DIMENSIONS |嵌入向量的维数| 768 (奥拉马)/ 1536 (openai)| | POSTGRES_HOST | PostgreSQL主机| localhost | | POSTGRES_PORT | PostgreSQL端口 5432 | | POSTGRES_USER | PostgreSQL用户| postgres | | POSTGRES_PASSWORD | PostgreSQL密码 postgres | | POSTGRES_DB 数据库名称 vectordb | | CHUNK_SIZE 块大小(字符数) 1000 | | CHUNK_OVERLAP 块重叠 200 |
调整区块大小
- CHUNK_SIZE:越大上下文越多,但精度越低
- 大块重叠:越大,块间的连续性越强
推奨设定:
- コード:CHUNK_SIZE=800,CHUNK_OVERLAP=100
- 文档:CHUNK_SIZE=1000, CHUNK_OVERLAP=200
- 長文:CHUNK_SIZE=1500,CHUNK_OVERLAP=300
体系结构
┌─────────────────┐
│ Claude Code │
└────────┬────────┘
│ MCP Protocol
┌────────▼────────┐
│ Go MCP Server │
│ │
│ ┌───────────┐ │
│ │Document │ │
│ │Loader │ │
│ └─────┬─────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │Document │ │
│ │Chunker │ │
│ └─────┬─────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │Embedding │◄─┼─► Ollama (無料) or OpenAI (有料)
│ │Service │ │
│ └─────┬─────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │Vector │ │
│ │Store │ │
│ └─────┬─────┘ │
└────────┼────────┘
│
┌────────▼────────┐
│ PostgreSQL + │
│ pgvector │
└─────────────────┘项目结构
go-doc-mcp/
├── main.go # エントリーポイント
├── go.mod # Go modules
├── docker-compose.yml # PostgreSQL + pgvector + Ollama設定
├── init.sql # データベース初期化SQL
├── .env.example # 環境変数サンプル
├── Makefile # ビルド/開発タスク
├── README.md
└── internal/
├── mcp/
│ ├── server.go # MCPサーバー実装
│ └── tools.go # MCPツール実装
├── vectorstore/
│ ├── store.go # ベクトルストア
│ └── embeddings.go # 埋め込み生成(Ollama/OpenAI対応)
└── document/
├── loader.go # ドキュメント読み込み
└── chunker.go # テキスト分割故障排除
PostgreSQL挂牵
# PostgreSQLが起動しているか確認
docker-compose ps
# ログを確認
docker-compose logs postgres
# 再起動
docker-compose restart postgresOllama挂牵
# Ollamaが起動しているか確認
docker-compose ps
# Ollamaのログを確認
docker-compose logs ollama
# モデルがダウンロードされているか確認
docker exec -it go-doc-mcp-ollama ollama list
# モデルを再ダウンロード
docker exec -it go-doc-mcp-ollama ollama pull nomic-embed-text嵌入生成出错
Ollama使用时:
- Ollama确认是否启动
- 确认是否下载了模型(
ollama list) - OLLAMA_URL确认是否正确
OpenAI使用时:
- OpenAI API确认密钥是否正确设置
- API查看项目中可用的所有族
- 检查网络连接
内存不足错误
- CHUNK_SIZE缩小
- 减少一次索引的文件数
- PostgreSQL调整内存设置
- Ollama类型的多个类型参数的着色器的编译器中可能发生的故障
性能优化
Ollama性能
- nomic嵌入文本:平衡型(推荐)
- mxbai嵌入大质量高,但有点慢
- 所有minilm:虽然速度很快,但精度很低
索引
数据库已包含HNSW(Hierarchical Navigable Small World)正在创建索引。 要索引大量文档,请考虑:
- 使用增量索引 -
index_directory_incremental仅重新索引已修改的文件 - 通过批处理逐步索引
- 使用轻巧的嵌入式模型
- PostgreSQL的,之
work_mem增加
検索速度
- 利用筛选搜索 -
search_with_filter排除不需要的文件类型 - limit正确设置参数(默认值:5)
- 上下文搜索(
search_with_context)比通常的搜索慢一些,但会得到更有用的结果 - 定期删除不需要的文档
重复防止
系统使用文件散列自动检测重复:
- 尝试重新索引同一文件时将自动跳过
- 仅当文件更改时才重新索引
get_document_info查看项目中可用的所有族
Makefile 命令
make help # ヘルプ表示
make deps # 依存関係のダウンロード
make build # ビルド
make run # 実行
make test # テスト実行
make clean # クリーンアップ
make docker-up # Docker起動
make docker-down # Docker停止
make docker-logs # Dockerログ表示
make docker-reset # Dockerデータリセット
make ollama-pull # Ollamaモデルダウンロード
make ollama-list # Ollamaモデル一覧
make dev # 開発環境セットアップ常见问题
Q: 可以免费使用吗?
A: 是!Ollama使用的话完全可以免费使用。API也不需要键。
Q: 我应该选择哪一个嵌入式供应商?
A: 个人使用和小规模项目Ollama(推荐免费)。如果大型项目需要最高质量OpenAI中所述修改相应参数的值。
Q: Ollama的嵌入质量OpenAI比起来怎么样?
A: 很多用途都是足够的质量。特别nomic-embed-text啊mxbai-embed-large提供高质量的结果。
Q: 隐私没问题吗?
A: Ollama将条目添加到文档注册表。OpenAI中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积OpenAI的规格化距离的幂函数。
Q: 可以将现有数据库更改为不同的维数吗?
A: init.sql中所述修改相应参数的值make docker-reset)。
许可证
麻省理工学院
貢献
欢迎拉式点播!
支持
在您查看完详细信息后,单击GitHub的,之Issues请通知我。
