Cody 是一个 AI 编程助手,旨在让开发者通过自然语言交互式查询代码库。它利用向量嵌入、分块和 OpenAI 的语言模型,帮助用户高效、直观地浏览代码。
主要能力
- 文件监控:实时监控项目目录及子目录中的所有文件,每次保存文件时自动更新知识库。
- 基于嵌入的知识库:使用 OpenAI Embeddings 创建知识库,收集所有文本和 JSON 文件的内容并加入知识库。
- 交互式问答:监听用户输入,用户提问后 Cody 利用知识库生成回答。
- 可定制:可通过 ignore_list 指定监控时要忽略的文件或目录。
使用方式
- (可选)在终端中从项目根目录运行
pip install -m venv .venv设置虚拟环境,然后运行pip install -r requirements.txt。 - 将
.local.env文件重命名为.env,并将YOUR_API_KEY_HERE替换为你的 OpenAI API 密钥。 - 修改脚本顶部的
IGNORE_THESE全局变量,指定要排除监控的目录和文件(应注释掉大型文件,如虚拟环境、缓存、已下载的 JS 库等)。 - 使用 Python 运行脚本:
python cody.py,并按照终端提示进行设置。它会询问你希望使用文本聊天(终端)还是对话(语音输入/输出)。如果你从忽略列表中移除了.env,它也会发出警告。 - 要停止脚本,输入 'exit' 或说出 'exit' 并按回车,Cody 将优雅地终止程序。
配置忽略列表
Cody 允许指定在文件监控期间应忽略的文件和目录,这对于排除频繁更改、与查询无关或可能包含敏感信息的文件特别有用。
- 忽略特定文件:添加
*.env到忽略列表,例如IGNORE_THESE = ['*.env']。 - 忽略目录:添加目录名,例如
IGNORE_THESE = ['node_modules', '.venv']。 - 忽略文件扩展名:使用通配符,例如
IGNORE_THESE = ['*.log', '*.tmp']。 - 复杂模式:组合目录名和通配符,例如忽略 docs 目录下所有 .md 文件:
IGNORE_THESE = ['docs/*.md']。 建议定期审查和更新忽略列表,谨慎使用通配符,并在更新后测试更改。
依赖库
- dotenv:从 .env 文件加载变量到环境。
- langchain-community:用于嵌入和向量存储的语言处理库。
- langchain_openai:提供 OpenAIEmbeddings 功能,将 OpenAI 模型与 langchain 架构集成。
- litellm:使用 OpenAI 格式调用所有 LLM API。
- watchdog:实时监控文件系统事件。
- openai:使用 OpenAI 语言模型生成智能响应。
- speech_recognition:将语音转换为文本以进行语音交互。
- gtts:Google 文本转语音库,用于从文本生成音频。
- pygame:用于播放音频文件的库。
注意事项与提示
- Cody 使用 FAISS 库进行高效的相似性搜索来存储向量。请确保有足够的内存,尤其是在监控大量文件时。
- 请监控 OpenAI API 使用量。建议在 OpenAI 账户中设置每月支出限额,以防止意外情况。此外,它会在每次调用时打印使用的 token 数量。
- 为了充分发挥“实时”编码问答的潜力,建议打开单独的终端或命令提示符,cd 到项目目录,然后启动
python cody.py。然后将其与代码分屏显示,这样你可以使用另一个终端实际运行代码,而无需担心 Cody 或每次都要运行它。它仍会在每次保存文件时持续更新,始终使用最新数据。
适用场景
适用于开发者需要快速理解、导航或查询代码库的场景,尤其适合在编码过程中实时获取代码相关问题的解答。
限制
- 需要 OpenAI API 密钥,并可能产生 API 使用费用。
- 需要足够的内存,尤其是大型项目。
- 仅支持文本和 JSON 文件的内容收集。
- 语音交互依赖 speech_recognition 和 gtts 等库,可能受环境限制。
欢迎贡献。请提交拉取请求或打开问题以报告错误或请求功能。