代码库对话:揭秘如何与你的代码智能互动

文摘   2024-09-03 00:58   江苏  

代码库对话:揭秘如何与你的代码智能互动

在这个数字化时代,我们与机器的对话比与邻居的还多。但如果你尝试过与代码库对话,那可真是“代码界的异次元”了。想象一下,你对着电脑屏幕,轻声细语地问:“嘿,这段代码是干嘛的?”然后,它竟然回答了!没错,这不是科幻小说,这是 repo2vec —— 一个能让你的代码库变得会说话的神奇工具。

那么,为什么要与代码库对话呢?

有时候,你可能只是想学习一个代码库的工作原理以及如何集成它,而不必花费数小时去筛选代码本身。

repo2vec 就像是拥有关于你的代码库最新信息的 GitHub Copilot。

特点:

  • 极其简单的设置。 运行 _两个脚本_,你就拥有了一个功能完备的代码聊天界面。就是这么简单。
  • 文档丰富的答案。 每个回应都显示了答案的上下文是从代码的哪个部分提取的。让我们建立对 AI 的信任。
  • 本地运行或云端运行。
    • 需要隐私?没问题:你可以使用 Marqo[1] 进行嵌入 + 向量存储和 Ollama[2] 进行聊天 LLM。
    • 需要速度和高性能?也没问题。我们支持 OpenAI 批量嵌入 + Pinecone[3] 进行向量存储 + OpenAI 或 Anthropic 进行聊天 LLM。
  • 即插即用。 想要改进驱动代码理解/生成的算法?我们使管道的每个组件都易于替换。谷歌级的工程标准让你可以随心所欲地定制。

如何运行它

索引代码库

我们目前支持两种索引代码库的选项:

  1. 本地,使用开源的 Marqo 向量存储[4]。Marqo 既是嵌入器(你可以选择 Hugging Face 上你最喜欢的嵌入模型),也是一个向量存储。

    你可以使用 Docker 启动 Marqo 实例:

    docker rm -f marqo
    docker pull marqoai/marqo:latest
    docker run --name marqo -it -p 8882:8882 marqoai/marqo:latest

    然后,要索引你的代码库,运行:

    pip install -r requirements.txt

    python src/index.py
        github-repo-name \  # 例如 Storia-AI/repo2vec
        --embedder_type=marqo \
        --vector_store_type=marqo \
        --index_name=your-index-name
  2. 使用外部提供商(OpenAI 进行嵌入和 Pinecone[5] 进行向量存储)。要索引你的代码库,运行:

    pip install -r requirements.txt

    export OPENAI_API_KEY=...
    export PINECONE_API_KEY=...

    python src/index.py
        github-repo-name \  # 例如 Storia-AI/repo2vec
        --embedder_type=openai \
        --vector_store_type=pinecone \
        --index_name=your-index-name

    我们计划很快添加更多提供商,让你可以混合搭配它们。也欢迎贡献!

与代码库对话

我们提供了一个 gradio 应用,你可以在其中与你的代码库对话。你可以使用本地 LLM(通过 Ollama[6]),或者像 OpenAI 或 Anthropic 这样的云提供商。

要与本地 LLM 对话:

  1. 访问 ollama.com[7] 下载适合你机器的二进制文件。
  2. 拉取所需的模型,例如 ollama pull llama3.1
  3. 启动 gradio 应用:
    python src/chat.py \
        github-repo-name \  # 例如 Storia-AI/repo2vec
        --llm_provider=ollama
        --llm_model=llama3.1
        --vector_store_type=marqo \  # 或 pinecone
        --index_name=your-index-name

要与基于云的 LLM 对话,例如 Anthropic 的 Claude:

export ANTHROPIC_API_KEY=...

python src/chat.py \
    github-repo-name \  # 例如 Storia-AI/repo2vec
    --llm_provider=anthropic \
    --llm_model=claude-3-opus-20240229 \
    --vector_store_type=marqo \  # 或 pinecone
    --index_name=your-index-name

要为你的聊天应用获取公共 URL,设置 --share=true

深入了解内部

索引仓库

src/index.py 脚本执行以下步骤:

  1. 克隆一个 GitHub 仓库。参见 RepoManager[8]
  • 确保为私有仓库设置 GITHUB_TOKEN 环境变量。
  • 分块文件。参见 Chunker[9]
    • 对于代码文件,我们实现了一个特殊的 CodeChunker,它考虑了解析树。
  • 批量嵌入分块。参见 Embedder[10]。我们目前支持:
    • Marqo[11] 作为嵌入器,允许你指定你最喜欢的 Hugging Face 嵌入模型,以及
    • OpenAI 的 批量嵌入 API[12],它比常规的同步嵌入 API 快得多,也便宜得多。
  • 将嵌入存储在向量存储中。参见 VectorStore[13]
    • 我们目前支持 Marqo[14]Pinecone[15],但你可以轻松地插入你自己的。

    注意你可以指定你想要索引的文件扩展名的包含或排除集。要指定扩展名包含集,你可以添加 --include 标志:

    python src/index.py repo-org/repo-name --include=/path/to/file/with/extensions

    相反,要指定扩展名排除集,你可以添加 --exclude 标志:

    python src/index.py repo-org/repo-name --exclude=src/sample-exclude.txt

    扩展名必须逐行指定,形式为 .ext

    通过 RAG 对话

    src/chat.py 启动了一个带有聊天界面的 Gradio 应用[16],如上图所示。我们使用 LangChain[17] 定义了一个 RAG 链,该链根据用户对仓库的查询:

    1. 根据以前的查询重写查询,使其自包含
    2. 使用 OpenAI 嵌入重写后的查询
    3. 从向量存储中检索相关文档
    4. 调用聊天 LLM 根据检索到的文档回应用户查询。

    源代码在聊天中方便地显示,并直接链接到 GitHub。

    想要托管你的代码库吗?

    该团队正在努力使互联网上的所有代码对开发者可搜索和可理解。你可以查看他们的的早期产品 Code Sage[18]

    如果你是开源仓库的维护者,并且希望在 Code Sage 上有一个专门的页面(例如 sage.storia.ai/your-repo),那么请发送消息至 founders@storia.ai[19]。我们会免费为你做!

    参考资料
    [1]

    Marqo: https://github.com/marqo-ai/marqo

    [2]

    Ollama: ollama.com

    [3]

    Pinecone: https://www.pinecone.io/

    [4]

    Marqo 向量存储: https://github.com/marqo-ai/marqo

    [5]

    Pinecone: https://www.pinecone.io/

    [6]

    Ollama: https://ollama.com

    [7]

    ollama.com: https://ollama.com

    [8]

    RepoManager: src/repo_manager.py

    [9]

    Chunker: src/chunker.py

    [10]

    Embedder: src/embedder.py

    [11]

    Marqo: https://github.com/marqo-ai/marqo

    [12]

    批量嵌入 API: https://platform.openai.com/docs/guides/batch/overview

    [13]

    VectorStore: src/vector_store.py

    [14]

    Marqo: https://github.com/marqo-ai/marqo

    [15]

    Pinecone: https://pinecone.io

    [16]

    Gradio 应用: https://www.gradio.app/

    [17]

    LangChain: https://langchain.com

    [18]

    Code Sage: https://sage.storia.ai

    [19]

    founders@storia.ai: mailto:founders@storia.ai


    编程悟道
    自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
     最新文章