项目简介

VectorOps Know 是一个可扩展的代码智能辅助库,旨在帮助大型语言模型(LLM)更好地理解和利用代码仓库的上下文。它通过扫描代码库,构建语言感知的代码文件、包和符号图谱,并提供高级的搜索、摘要、排名和图谱分析工具。Know 可以作为轻量级的MCP(Model Context Protocol)服务运行,专为聊天/LLM工作流设计,以标准化的方式向LLM客户端提供上下文信息和功能。

主要功能点

  • 多语言代码解析: 支持Python, Go, JavaScript, TypeScript, Java等多种编程语言的代码解析。
  • 本地元数据存储: 使用本地内存或磁盘上的DuckDB作为元数据存储,高效管理代码图谱数据。
  • 可选的语义搜索: 支持通过Sentence-Transformer嵌入模型实现语义搜索功能。
  • 丰富的工具目录: 自动将内置工具(如文件列表、文件摘要、符号搜索、代码库关联图谱、文件读取)导出为OpenAI兼容的JSON Schema,便于LLM调用。
  • 即插即用的MCP服务: 提供零配置的FastMCP服务器,可直接用于LLM应用。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/vectorops/know.git
    cd know
  2. 安装依赖: 项目使用 'uv' 管理依赖。为运行MCP服务器,需额外安装 'mcp' 依赖。
    uv sync --extra mcp

服务器配置 (MCP客户端使用)

MCP客户端需要以下配置来连接到Know MCP服务器。以下是JSON格式的配置信息,请根据您的实际部署环境进行调整。

{
  "server_name": "VectorOpsKnowServer",
  "command": "uv",
  "args": [
    "run",
    "python",
    "tools/mcpserver.py"
  ],
  "env": {
    "KNOW_PROJECT_NAME": "my-org/know",
    "KNOW_REPO_NAME": "know",
    "KNOW_REPO_PATH": ".",
    "KNOW_MCP_HOST": "127.0.0.1",
    "KNOW_MCP_PORT": "8000",
    "KNOW_EMBEDDING_ENABLED": "true",
    "KNOW_EMBEDDING_MODEL_NAME": "BAAI/bge-code-v1"
  },
  "description": "连接到VectorOps Know代码智能服务,提供代码搜索、摘要和分析工具。",
  "capabilities": [
    {
      "type": "tool",
      "name": "vectorops_list_files",
      "description": "返回路径匹配glob模式的项目文件列表。非默认仓库的文件路径会以'.virtual-path/<repo_name>'前缀。",
      "parameters": {
        "patterns": "fnmatch风格的glob模式列表,例如:['**/*.py', 'src/*.ts']。"
      }
    },
    {
      "type": "tool",
      "name": "vectorops_summarize_files",
      "description": "为指定文件生成摘要(包含导入语句和顶级符号定义)。推荐使用'definition'模式获取概览,需要更多细节(如文档字符串)时可请求'documentation'模式。",
      "parameters": {
        "paths": "要摘要的文件的相对路径列表。",
        "summary_mode": "摘要的详细程度:'definition'(默认,只定义)、'documentation'(包含文档字符串)。"
      }
    },
    {
      "type": "tool",
      "name": "vectorops_search",
      "description": "在代码库中搜索代码块(函数、类、变量等),支持模糊查询和过滤。如果文件路径包含'.virtual-path',则表示它不属于当前仓库,应视为外部依赖。",
      "parameters": {
        "symbol_name": "符号的精确短名称(区分大小写)。",
        "kind": "节点类型限制(例如:'function', 'class')。",
        "visibility": "可见性限制('public', 'protected', 'private' 或 'all')。",
        "query": "自然语言搜索字符串,针对文档字符串、注释和代码进行全文本和向量搜索。",
        "limit": "返回的最大结果数量(默认10)。",
        "offset": "跳过的结果数量(用于分页)。",
        "summary_mode": "每个匹配项包含的源代码量('skip', 'definition', 'documentation', 'source')。"
      }
    },
    {
      "type": "tool",
      "name": "vectorops_repomap",
      "description": "通过随机游走算法,根据文件或符号名称找出与给定种子最相关的项目文件。适用于项目探索和文件关联分析。",
      "parameters": {
        "symbol_names": "用作随机游走高优先级种子的符号名称列表。",
        "file_paths": "用作随机游走高优先级种子的文件路径列表。",
        "prompt": "自由文本提示,从中提取额外的符号和文件名称作为种子。",
        "limit": "返回的最大文件数量(默认20)。",
        "summary_mode": "每个文件摘要的详细程度('skip', 'definition', 'documentation', 'source')。",
        "skip_mentioned_summary": "如果为true,则不对在'file_paths'中明确提供的文件生成摘要。",
        "token_limit_count": "所有返回摘要的总Token预算。超出此限制将停止添加摘要。",
        "token_limit_model": "用于计算'token_limit_count'的LLM模型名称。"
      }
    },
    {
      "type": "tool",
      "name": "vectorops_read_files",
      "description": "读取指定项目文件的全部内容。文件路径可以是普通路径(默认仓库)或虚拟路径(以'.virtual-path/<repo_name>/...'为前缀)。二进制文件内容将以base64编码返回。",
      "parameters": {
        "path": "要读取的文件路径。支持虚拟路径,例如:'.virtual-path/<repo_name>/...'"
      }
    }
  ]
}

**参数注释:**
*   'server_name': MCP服务器的名称,用于客户端识别。
*   'command': 启动MCP服务器的可执行文件或命令。
*   'args': 传递给 'command' 的参数列表。请确保 'tools/mcpserver.py' 路径正确。
*   'env': 环境变量,用于配置项目的行为,例如项目名称、仓库路径、MCP服务监听地址和端口、是否启用嵌入以及使用的模型名称。
    *   'KNOW_PROJECT_NAME': 项目的逻辑名称。
    *   'KNOW_REPO_NAME': 仓库的名称。
    *   'KNOW_REPO_PATH': 仓库在本地文件系统的根路径。
    *   'KNOW_MCP_HOST': MCP服务器监听的IP地址。
    *   'KNOW_MCP_PORT': MCP服务器监听的端口。
    *   'KNOW_EMBEDDING_ENABLED': 是否启用嵌入功能(布尔值,'true'或'false')。
    *   'KNOW_EMBEDDING_MODEL_NAME': 用于生成嵌入的Sentence-Transformer模型名称。
*   'description': 对MCP服务器功能的简要说明。
*   'capabilities': MCP服务器提供的能力列表,这里主要包含工具(Tool)。每个工具都包含名称、描述和参数信息。

### 基本使用方法
1.  **启动MCP服务器:**
    在项目根目录运行以下命令以启动生产模式的MCP服务器:
    ```bash
    uv run python tools/mcpserver.py
    ```
    服务器默认将在 'http://localhost:8000' 监听请求。
2.  **(可选)配置环境变量:**
    为方便管理,可以在启动服务器前设置环境变量,替代在 'mcp.json' 文件中配置或命令行参数:
    ```bash
    export KNOW_PROJECT_NAME="my-org/my-project"
    export KNOW_REPO_NAME="my-repo"
    export KNOW_REPO_PATH="/path/to/your/repo"
    export KNOW_EMBEDDING_ENABLED=true
    export KNOW_EMBEDDING_MODEL_NAME="BAAI/bge-code-v1"
    # 其他设置...
    ```
3.  **LLM客户端交互:**
    配置好LLM客户端(例如支持MCP协议的客户端)指向上述启动的MCP服务器地址和端口。LLM将能够通过JSON-RPC协议调用Know提供的工具。

    例如,使用 'curl' 调用 'vectorops_search' 工具:
    ```bash
    curl -X POST http://localhost:8000/vectorops/vectorops_search \
         -H "Content-Type: application/json" \
         -d '{"query":"init_project","limit":5}'
    ```

信息

分类

开发者工具