代码库对话:揭秘如何与你的代码智能互动
在这个数字化时代,我们与机器的对话比与邻居的还多。但如果你尝试过与代码库对话,那可真是“代码界的异次元”了。想象一下,你对着电脑屏幕,轻声细语地问:“嘿,这段代码是干嘛的?”然后,它竟然回答了!没错,这不是科幻小说,这是 repo2vec —— 一个能让你的代码库变得会说话的神奇工具。
那么,为什么要与代码库对话呢?
有时候,你可能只是想学习一个代码库的工作原理以及如何集成它,而不必花费数小时去筛选代码本身。
repo2vec
就像是拥有关于你的代码库最新信息的 GitHub Copilot。
特点:
极其简单的设置。 运行 _两个脚本_,你就拥有了一个功能完备的代码聊天界面。就是这么简单。 文档丰富的答案。 每个回应都显示了答案的上下文是从代码的哪个部分提取的。让我们建立对 AI 的信任。 本地运行或云端运行。 需要隐私?没问题:你可以使用 Marqo[1] 进行嵌入 + 向量存储和 Ollama[2] 进行聊天 LLM。 需要速度和高性能?也没问题。我们支持 OpenAI 批量嵌入 + Pinecone[3] 进行向量存储 + OpenAI 或 Anthropic 进行聊天 LLM。 即插即用。 想要改进驱动代码理解/生成的算法?我们使管道的每个组件都易于替换。谷歌级的工程标准让你可以随心所欲地定制。
如何运行它
索引代码库
我们目前支持两种索引代码库的选项:
本地,使用开源的 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使用外部提供商(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 对话:
访问 ollama.com[7] 下载适合你机器的二进制文件。 拉取所需的模型,例如 ollama pull llama3.1
。启动 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
脚本执行以下步骤:
克隆一个 GitHub 仓库。参见 RepoManager[8]。
确保为私有仓库设置 GITHUB_TOKEN
环境变量。
对于代码文件,我们实现了一个特殊的 CodeChunker
,它考虑了解析树。
Marqo[11] 作为嵌入器,允许你指定你最喜欢的 Hugging Face 嵌入模型,以及 OpenAI 的 批量嵌入 API[12],它比常规的同步嵌入 API 快得多,也便宜得多。
我们目前支持 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 链,该链根据用户对仓库的查询:
根据以前的查询重写查询,使其自包含 使用 OpenAI 嵌入重写后的查询 从向量存储中检索相关文档 调用聊天 LLM 根据检索到的文档回应用户查询。
源代码在聊天中方便地显示,并直接链接到 GitHub。
想要托管你的代码库吗?
该团队正在努力使互联网上的所有代码对开发者可搜索和可理解。你可以查看他们的的早期产品 Code Sage[18]。
如果你是开源仓库的维护者,并且希望在 Code Sage 上有一个专门的页面(例如 sage.storia.ai/your-repo
),那么请发送消息至 founders@storia.ai[19]。我们会免费为你做!
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