
CodeCompass 帮助开发者处理遗留或现有代码库,通过提供AI编码助手所需的上下文来给出精准建议。遗留代码对AI来说很难处理——它通常混乱、过时且缺乏清晰的文档。CodeCompass 通过使用 Qdrant 向量存储分析代码库,并利用 Ollama(本地)或像 DeepSeek 这样的云代理(其Agentic RAG特性)来使建议更智能和相关。这就像给你的AI一个代码地图,让你可以轻松地与代码互动。
agent_query工具智能地协调内部能力以收集全面的上下文。这包括分析git diff信息(如果很大则进行总结),动态总结广泛的文件列表或代码片段等,确保AI建议高度相关。agent_query工具允许AI规划并执行多步骤任务。它可以主动使用一系列内部能力:
capability_searchCodeSnippets)capability_getFullFileContent),对于大文件进行总结。capability_listDirectory)。capability_getAdjacentFileChunks)。capability_getRepositoryOverview)。capability_fetchMoreSearchResults)或更多处理时间,如果查询复杂。当前状态: CodeCompass 已成功实现其核心功能,包括:
llama3.1:8b,nomic-embed-text:v1.5)和基于云的LLM如DeepSeek进行灵活集成。该项目正在积极维护,并认为其当前功能集是稳定的。
未来改进(考虑中): 虽然核心功能已经很强大,但潜在的未来方向包括:
我们欢迎社区贡献和对未来发展的建议!请参阅我们的CONTRIBUTING.md。
nomic-embed-text:v1.5(默认)llama3.1:8b(默认)安装Ollama:
curl -fsSL https://ollama.com/install.sh | sh
ollama serve)。ollama pull nomic-embed-text:v1.5 # 默认嵌入模型
ollama pull llama3.1:8b # 默认Ollama建议模型
你可以使用ollama list验证已安装的模型。安装Qdrant:
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
安装CodeCompass:
npx -y @alvinveroy/codecompass@latest
这会全局安装CodeCompass。然后可以从任何目录运行它。
CodeCompass 可以在两种主要模式下运行:作为服务器(默认)或作为客户端来针对正在运行的服务器执行特定工具。
1. 运行CodeCompass服务器:
要启动CodeCompass服务器,请导航到git仓库的根目录并运行:
codecompass [repoPath] [--port <number>]
[repoPath](可选):CodeCompass要分析的仓库路径。如果省略,默认为当前目录(.)。--port <number>(可选):指定服务器的HTTP端口。这会覆盖HTTP_PORT环境变量和默认端口(3001)。示例:
# 在默认端口上启动当前目录的服务器
codecompass
# 启动特定仓库的服务器
codecompass /path/to/your/project
# 在端口3005上启动当前目录的服务器
codecompass --port 3005
一旦启动,CodeCompass将开始索引你的仓库(如果尚未索引)。MCP通信主要通过stdio处理。还会在配置的端口(默认3001)上运行一个实用HTTP服务器,用于健康检查、索引状态和接收来自Git钩子的仓库更新通知。
实用HTTP服务器端口冲突:
如果配置的实用HTTP端口被另一个CodeCompass实例占用,新实例将禁用自己的实用HTTP服务器并仅使用stdioMCP。其实用相关的MCP工具(如get_indexing_status,trigger_repository_update)将自动将请求转发到现有实例的HTTP实用端点。如果该端口被非CodeCompass服务占用,新实例将记录错误并退出。Git钩子应一般指向主运行CodeCompass实例的HTTP端口。
2. 通过CLI客户端模式执行工具:
要执行特定工具,CodeCompass CLI会启动一个专用服务器实例并通过stdio使用模型上下文协议(MCP)与其通信。
codecompass <tool_name> [json_parameters] [--repo <path>] [--json] [--port <number>]
<tool_name>:要执行的工具名称(见下文列表)。[json_parameters](可选):包含工具参数的JSON字符串。对于不接受参数的工具,可以省略或使用空的JSON对象{}。--repo <path>或-r <path>(可选):指定工具上下文的仓库路径。默认为当前目录(.)。启动的服务器将使用此仓库。--json或-j(可选):输出工具的原始JSON响应。适用于脚本或调试。--port <number>(可选):指定启动服务器实例的实用HTTP端口。主要用于一致性,如果启动的服务器需要与其他实例交互或其实用端口需要特定,尽管工具的核心MCP通信是通过stdio进行的。可用于CLI客户端执行的工具:
agent_query <json_params>:协调能力以回答复杂查询。
codecompass agent_query '{"query": "用户认证是如何处理的?", "sessionId": "my-session-123"}'codecompass agent_query '{"query": "显示用户模型"}' --jsonsearch_code <json_params>:执行语义代码搜索。
codecompass search_code '{"query": "数据库连接设置"}'get_changelog:检索项目的CHANGELOG.md。
codecompass get_changelogget_indexing_status:获取仓库索引的当前状态。(如果另一个CC实例为主实例,可能会转发)
codecompass get_indexing_status --jsontrigger_repository_update:触发仓库的重新索引。(可能会转发)
codecompass trigger_repository_updateswitch_suggestion_model <json_params>:切换建议模型/提供商。
codecompass switch_suggestion_model '{"model": "deepseek-coder", "provider": "deepseek"}'get_session_history <json_params>:检索会话ID的历史记录。(需要参数中的sessionId)。
codecompass get_session_history '{"sessionId": "my-session-123"}'generate_suggestion <json_params>:生成代码建议。
codecompass generate_suggestion '{"query": "优化这个数据库查询"}'get_repository_context <json_params>:提供仓库上下文的高层次概述。
codecompass get_repository_context '{"query": "主要API组件"}'通用CLI命令:
codecompass --help 或 codecompass -h:显示帮助消息。codecompass --version 或 codecompass -v:显示CodeCompass版本。codecompass changelog [--verbose]:显示项目变更日志。设置好CodeCompass后,可以在Cursor或其他AI工具中使用自然语言提示来与代码库直观互动。由Qdrant和Ollama/DeepSeek驱动的Agentic RAG特性确保AI理解代码的上下文以获得精确的结果。CLI客户端模式提供了另一种直接与CodeCompass工具互动的方式。
CodeCompass依赖于环境变量进行配置。这些变量可以通过多种方式设置:
mcp.json)中定义环境变量。这在“使用Cursor设置”部分中有详细说明。.env文件:为了方便,特别是在本地开发期间,你可以在使用CodeCompass分析的仓库根目录放置一个.env文件。CodeCompass将从该文件加载变量。以下是直接在shell或系统范围内设置环境变量的说明,随后是一个常见变量的列表。
对于Linux和macOS:
你可以在当前终端会话中使用export命令设置环境变量:
export VAR_NAME="值"
例如:
export LLM_PROVIDER="deepseek"
export DEEPSEEK_API_KEY="your_deepseek_api_key_here"
这些设置仅在当前会话中有效。要使其永久化,将这些export行添加到shell的配置文件中:
~/.bashrc或~/.bash_profile~/.zshrc
编辑完文件后,重新加载它(例如source ~/.bashrc或source ~/.zshrc)或打开一个新的终端。对于Windows:
使用命令提示符(cmd.exe):
set VAR_NAME="值"
例如:
set LLM_PROVIDER="deepseek"
set DEEPSEEK_API_KEY="your_deepseek_api_key_here"
这仅设置当前命令提示符会话中的变量。
使用PowerShell:
$Env:VAR_NAME = "值"
例如:
$Env:LLM_PROVIDER = "deepseek"
$Env:DEEPSEEK_API_KEY = "your_deepseek_api_key_here"
这仅设置当前PowerShell会话中的变量。
要在Windows上永久设置环境变量:
LLM_PROVIDER)和值(例如deepseek)。或者,要永久设置用户环境变量(从命令提示符需要新的命令提示符才能看到效果):
setx VAR_NAME "值"
例如:
setx LLM_PROVIDER "deepseek"
setx DEEPSEEK_API_KEY "your_deepseek_api_key_here"
这里是一些重要的环境变量列表。如果你选择使用.env文件,可以复制这种结构。
# --- 通用配置 ---
# LOG_LEVEL: 日志级别(例如,error,warn,info,verbose,debug,silly)。默认:info
# LOG_LEVEL=info
# --- Qdrant配置 ---
# QDRANT_HOST: Qdrant向量存储服务器的URL。
QDRANT_HOST=http://localhost:6333
# COLLECTION_NAME: 此仓库的Qdrant集合名称。
# 如果管理多个仓库,最好为每个仓库使用唯一名称。
# COLLECTION_NAME=codecompass_default_collection
# QDRANT_SEARCH_LIMIT_DEFAULT: 标准搜索期间从Qdrant获取的结果数量。默认:10
# QDRANT_SEARCH_LIMIT_DEFAULT=10
# --- Ollama配置(用于本地LLM和嵌入)---
# OLLAMA_HOST: Ollama服务器的URL。
OLLAMA_HOST=http://localhost:11434
# --- LLM提供商配置 ---
# LLM_PROVIDER: 指定生成建议的主要LLM提供商。
# 支持的值:"ollama","deepseek","openai","gemini","claude"。默认:"ollama"
LLM_PROVIDER=ollama
# SUGGESTION_MODEL: 用于建议的具体模型。
# 如果LLM_PROVIDER="ollama",例如:"llama3.1:8b","codellama:7b"
# 如果LLM_PROVIDER="deepseek",例如:"deepseek-coder"
# 如果LLM_PROVIDER="openai",例如:"gpt-4-turbo-preview","gpt-3.5-turbo"
# 如果LLM_PROVIDER="gemini",例如:"gemini-pro"
# 如果LLM_PROVIDER="claude",例如:"claude-2","claude-3-opus-20240229"
# 默认为Ollama:"llama3.1:8b"
SUGGESTION_MODEL=llama3.1:8b
# EMBEDDING_PROVIDER: 指定生成嵌入的提供商。
# 目前,"ollama"是主要支持的嵌入提供商。默认:"ollama"
EMBEDDING_PROVIDER=ollama
# EMBEDDING_MODEL: 通过Ollama使用的嵌入具体模型。
# 默认:"nomic-embed-text:v1.5"
EMBEDDING_MODEL=nomic--embed-text:v1.5
# --- 云提供商API密钥(仅在使用相应提供商时需要)---
# DEEPSEEK_API_KEY: 你的DeepSeek API密钥。
# DEEPSEEK_API_KEY=your_deepseek_api_key_here
# OPENAI_API_KEY: 你的OpenAI API密钥。
# OPENAI_API_KEY=your_openai_api_key_here
# GEMINI_API_KEY: 你的Google Gemini API密钥。
# GEMINI_API_KEY=your_gemini_api_key_here
# CLAUDE_API_KEY: 你的Anthropic Claude API密钥。
# CLAUDE_API_KEY=your_claude_api_key_here
# --- DeepSeek特定(可选)---
# DEEPSEEK_API_URL: 如果不使用默认值,自定义DeepSeek API URL。
# 默认:"https://api.deepseek.com/chat/completions"
# DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions
# DEEPSEEK_RPM_LIMIT: DeepSeek的每分钟请求限制。默认:20
# DEEPSEEK_RPM_LIMIT=20
# --- 代理配置 ---
# MAX_FILES_FOR_SUGGESTION_CONTEXT_NO_SUMMARY: 在尝试使用LLM总结文件列表之前,直接列出在generate_suggestion工具上下文中的最大文件数。默认:15
# MAX_FILES_FOR_SUGGESTION_CONTEXT_NO_SUMMARY=1
# MAX_SNIPPET_LENGTH_FOR_CONTEXT_NO_SUMMARY: 包含在上下文中而不进行总结的最大代码片段长度。
# 超过此长度的片段将被LLM总结(如果可用)。默认:1500
# MAX_SNIPPET_LENGTH_FOR_CONTEXT_NO_SUMMARY=1500
# MAX_DIFF_LENGTH_FOR_CONTEXT_TOOL: 包含在上下文中而不进行总结的最大git diff长度。
# 超过此长度的diff将被LLM总结(如果可用)。默认:3000
# MAX_DIFF_LENGTH_FOR_CONTEXT_TOOL=3000
# AGENT_DEFAULT_MAX_STEPS: 代理将采取的默认最大步骤数(工具调用或LLM响应)。默认:10
# AGENT_DEFAULT_MAX_STEPS=10
# AG