CodeDox 是一个强大的系统,可用于爬取文档网站、提取代码片段,并通过 MCP(模型上下文协议)集成提供快速搜索功能。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Web UI │────▶│ FastAPI │────▶│ PostgreSQL │
│ (React + Vite) │ │ Server │ │ (Full-Text) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
┌─────────────────┐ │
│ MCP Client │────▶│ MCP Tools │
│ (AI Assistant) │ │ │
└─────────────────┘ └───────────┘
│
▼
┌─────────────────┐
│ Crawl4AI │
│ (Web Crawler) │
└─────────────────┘
git clone https://github.com/yourusername/codedox.git
cd codedox
uv venv
source .venv/bin/activate # 在 Windows 上:.venv\Scripts\activate
uv pip install -r requirements.txt
# 安装 Playwright 浏览器(网页爬取所需)
crawl4ai-setup
# 创建数据库
createdb codedox
# 初始化数据库架构(仅首次需要)
python cli.py init
# 重置并重新创建所有表(警告:会删除所有数据)
python cli.py init --drop
cp .env.example .env
# 使用你的设置编辑 .env 文件
# 创建并激活虚拟环境(如果尚未完成)
uv venv
source .venv/bin/activate # 在 Windows 上:.venv\Scripts\activate
# 初始化数据库(仅首次需要)
python cli.py init
# 启动所有服务(API + Web UI)
python cli.py all
这将:
⚠️ 重要提示
Web UI 为所有操作提供了用户友好的界面,无需记忆 CLI 命令!
# 仅启动 API 服务器
python cli.py run
# 仅启动 Web UI(在另一个终端中)
python cli.py ui
# 仅启动 API 服务器(另一种方式)
python cli.py api
CodeDox 支持两种 MCP 模式:
当运行 API 服务器(python cli.py api 或 python cli.py all)时,MCP 工具可通过 HTTP 端点自动使用,无需单独的 MCP 服务器。
MCP 协议端点(推荐给 AI 助手):
POST /mcp - 可流式传输的 HTTP 传输(MCP 2025 - 03 - 26 规范) - 最新且推荐POST /mcp/v1/sse - 服务器发送事件传输(旧版支持)旧版 REST 端点:
GET /mcp/health - 健康检查GET /mcp/tools - 列出可用工具及其架构POST /mcp/execute/{tool_name} - 执行特定工具POST /mcp/stream - 用于简单集成的流式端点使用示例:
对于使用 MCP 协议(可流式传输的 HTTP - 推荐)的 AI 助手:
# 配置你的 AI 助手使用最新的可流式传输的传输方式:
# URL: http://localhost:8000/mcp
# 传输方式: 可流式传输的 HTTP
# 请求头: Accept: application/json, text/event-stream
对于使用 MCP 协议(SSE - 旧版)的 AI 助手:
# 配置你的 AI 助手使用 SSE 传输方式:
# URL: http://localhost:8000/mcp/v1/sse
# 传输方式: 服务器发送事件(SSE)
对于直接使用 API:
# 列出可用工具
curl http://localhost:8000/mcp/tools
# 从库中获取代码片段(使用库名)
curl -X POST http://localhost:8000/mcp/execute/get_content \
-H "Content-Type: application/json" \
-d '{"library_id": "nextjs", "query": "authentication"}'
# 或者使用 UUID
curl -X POST http://localhost:8000/mcp/execute/get_content \
-H "Content-Type: application/json" \
-d '{"library_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "query": "authentication"}'
对于需要传统基于 stdio 的 MCP 通信的 AI 助手:
# 运行独立的 MCP 服务器
python cli.py mcp
此模式仅适用于不支持 HTTP 端点的特定 AI 集成。
init_crawl - 开始文档爬取
name:库/框架名称(可选 - 如果未提供则自动检测)start_urls:要爬取的 URL 列表max_depth:爬取深度(0 - 3)domain_filter:可选的域名限制url_patterns:可选的要包含的 URL 模式列表(例如,["docs", "guide"])max_concurrent_crawls:最大并发页面爬取数(默认:20)metadata:额外的元数据(可选)search_libraries - 按名称搜索可用的库
query:库名称的搜索查询(例如,'react', 'nextjs', 'django')max_results:返回的最大结果数(1 - 50,默认:10)get_content - 从库中获取代码片段
library_id:库 ID(UUID)或库名称(例如,'nextjs', 'react')query:可选的搜索词,用于过滤结果max_results:限制结果数(1 - 50,默认:10)get_snippet_details - 获取特定代码片段的详细信息
snippet_id:代码片段的 ID(来自 get_content 的结果)POST /crawl/init - 启动新的爬取任务,可选择进行 URL 模式过滤GET /crawl/status/{job_id} - 检查爬取状态POST /crawl/cancel/{job_id} - 取消正在运行的任务POST /search - 搜索代码片段GET /search/languages - 列出可用的语言GET /search/recent - 获取最近的代码片段GET /sources - 列出文档来源GET /snippets/{id} - 获取特定的代码片段GET /export/{job_id} - 导出爬取结果POST /upload/markdown - 上传 Markdown 内容POST /upload/file - 上传 Markdown 文件CodeDox 包含一个基于 React 和 TypeScript 构建的现代响应式 Web 界面。在运行开发服务器时,可通过 http://localhost:5173 访问。
Web UI 为所有主要操作提供了一个用户友好的替代 CLI 的方式,无需记忆命令即可轻松管理文档管道。
为了在本地 LLM 服务器上获得最佳性能,请在 .env 文件中配置并行请求设置:
# LLM 配置
LLM_ENDPOINT=http://localhost:8080
LLM_MODEL=gpt-4
LLM_API_KEY=your-api-key-here
LLM_MAX_TOKENS=1000
LLM_TEMPERATURE=0.1
# 并行请求设置(根据你的 LLM 服务器能力进行调整)
LLM_MAX_CONCURRENT_REQUESTS=20 # 向 LLM 发送的最大并行请求数
LLM_REQUEST_TIMEOUT=30.0 # 请求超时时间(秒)
LLM_RETRY_ATTEMPTS=3 # 失败时的重试次数
寻找最佳值: 使用包含的配置测试来确定适合你 LLM 设置的最佳配置:
# 快速测试以找到最佳设置(推荐)
python scripts/test_llm_config.py
# 或者运行全面的性能分析
python tests/performance/test_llm_concurrency_performance.py
python tests/performance/visualize_concurrency_results.py
配置指南:
LLM_MAX_CONCURRENT_REQUESTS = 5 - 10 开始LLM_MAX_CONCURRENT_REQUESTS = 15 - 30LLM_MAX_CONCURRENT_REQUESTS = 20 - 50LLM_MAX_CONCURRENT_REQUESTS 保持在 2 - 5 以避免系统过载监控你的 LLM 服务器的资源使用情况并相应调整。更高的并发度可以提高爬取速度,但可能会增加延迟或导致超时。
支持自动检测以下语言:
codedox/
├── src/
│ ├── api/ # FastAPI 端点
│ ├── crawler/ # 网页爬取逻辑
│ ├── database/ # 模型和搜索
│ ├── language/ # 语言检测
│ ├── mcp_server/ # MCP 服务器实现
│ └── parser/ # 代码提取
├── tests/ # 测试套件
├── config.yaml # 配置文件
└── requirements.txt # 依赖项
pytest tests/
数据库连接失败
.env 文件中的凭据git checkout -b feature/amazing)git commit -m 'Add amazing feature')git push origin feature/amazing)Chris Scott - 初始工作和开发
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。