SeaGOAT
一个面向AI时代的代码搜索引擎。SeaGOAT是一款本地搜索工具,利用向量嵌入技术使你能够语义化地搜索你的代码库。
快速开始
安装SeaGOAT
为了安装SeaGOAT,你需要在计算机上事先安装以下依赖项:
- Python 3.11 或更新版本
- ripgrep
- bat(可选,强烈推荐)
当bat
被安装时,只要启用了颜色显示,它就会用于展示结果。当SeaGOAT作为流水线的一部分使用时,会使用grep行输出格式。当启用了颜色但未安装bat
时,SeaGOAT将使用pygments高亮输出。推荐使用bat
。
使用pipx
安装SeaGOAT,可以使用以下命令:
pipx install seagoat
系统需求
硬件
应能在任何不错的笔记本电脑上运行。
操作系统
SeaGOAT设计用于在Linux(已测试 ✅),macOS(部分已测试,需要帮助 🙏)和Windows(需要帮助 🙏)上运行。
启动SeaGOAT服务器
为了在项目中使用SeaGOAT,你需要使用以下命令启动SeaGOAT服务器:
seagoat-server start /path/to/your/repo
搜索你的代码库
如果服务器正在运行,你可以简单地使用gt
或seagoat
命令查询你的代码库。例如:
gt "数字在哪里被四舍五入"
你也可以在查询中使用正则表达式,例如:
gt "处理税收的calc_.*函数"
停止服务器
你可以使用以下命令停止正在运行的服务器:
seagoat-server stop /path/to/your/repo
配置SeaGOAT
SeaGOAT可以通过YAML配置文件根据需要进行定制,无论是全局配置还是项目-specific配置文件,比如.seagoat.yml
。例如:
# .seagoat.yml
server:
port: 31134 # 指定服务器端口
查看文档以获取更多详细信息!
开发
要求:
安装依赖项
克隆代码库后,使用以下命令安装依赖项:
poetry install
运行测试
监听模式(推荐)
poetry run ptw
测试更改的文件
poetry run pytest . --testmon
测试所有文件
poetry run pytest .
手动测试
你可以在本地开发环境中手动测试任何SeaGOAT命令。例如,要测试开发版本的seagoat-server
命令,你可以运行:
poetry run seagoat-server start ~/path/an/example/repository
常见问题
本常见问题中的内容是对SeaGOAT工作原理的说明,但不构成法律合同。SeaGOAT是开源许可的,如果你对SeaGOAT的隐私/安全等有疑虑,欢迎查阅源代码,提出你的关切,或创建拉取请求以修复问题。
SeaGOAT如何工作?它会将我的数据发送到ChatGPT吗?
SeaGOAT不依赖第三方API或任何远程API,所有功能均在你能够在自己机器上运行的SeaGOAT服务器上本地执行。
它使用名为ChromaDB的向量数据库,本地向量嵌入引擎,并默认禁用遥测功能,而不是依赖API或“连接到ChatGPT”。
除此之外,SeaGOAT还使用ripgrep,这是一种基于正则表达式的代码搜索引擎,用以提供正则表达式/关键词的匹配结果,补充基于AI的匹配结果。
当前版本的SeaGOAT不会将你的数据发送到远程服务器,但将来可能会有可选功能可以做到这一点,以便获得更多改进效果。
为什么SeaGOAT需要一个服务器?
SeaGOAT需要一个服务器以提供快速响应。SeaGOAT大量依赖向量嵌入和向量数据库,目前无法用一种即时处理文件的架构来替代这些。
值得注意的是你能够完全在本地运行SeaGOAT服务器,即使没有互联网连接也能工作。这种用例不需要将数据共享给远程服务器,你可以在本地使用自己的SeaGOAT服务器,尽管你也可以运行一个SeaGOAT服务器并允许其他计算机连接到它,如果你希望这样做的话。
SeaGOAT会创建AI生成的工作吗?SeaGOAT是否符合伦理?
如果你对使用AI工具的伦理有忧虑,请记住SeaGOAT不是一个代码生成器,而是一个代码搜索引擎,因此它不会创建AI生成的作品。
话虽如此,一个语言模型确实被用来生成向量嵌入。目前,SeaGOAT使用的是ChromaDB的默认模型来计算向量嵌入,我不知道这会构成伦理问题。
支持哪些编程语言?
当前,SeaGOAT硬编码只处理以下格式的文件:
- 文本文件 (
*.txt
) - Markdown (
*.md
) - Python (
*.py
) - C (
*.c
,*.h
) - C++ (
*.cpp
,*.cc
,*.cxx
,*.hpp
) - TypeScript (
*.ts
,*.tsx
) - JavaScript (
*.js
,*.jsx
) - HTML (
*.html
) - Go (
*.go
) - Java (
*.java
) - PHP (
*.php
) - Ruby (
*.rb
)
为什么SeaGOAT在几乎不使用CPU的情况下处理文件却很慢?
由于处理大代码库的文件可能需要很长时间,SeaGOAT设计为在处理文件时让你能使用计算机。这是一个有意的设计选择,以避免阻塞/减慢你的计算机。
这个设计决策不会影响查询的性能。
**顺便说一句,在处理文件的同时你可以使用SeaGOAT查询你的代码库!**当你发出查询,但文件还未处理完成时,你会收到一个警告,估计结果的准确性。另外,从一开始就会显示基于正则表达式/全文搜索的结果!
支持哪些字符编码?
首选字符编码是UTF-8。大多数其他字符编码也应该可以工作。仅支持文本文件,SeaGOAT忽略二进制文件。
SeaGOAT将其数据库/缓存存储在哪里?
SeaGOAT存储数据库和缓存的位置取决于你的操作系统。为了方便起见,你可以使用seagoat-server server-info
命令来查找这些文件在你的系统上存储的位置。
我可以在不同的计算机上托管SeaGOAT服务器吗?
可以,如果你希望在不在同一台计算机上运行服务器的情况下使用SeaGOAT,你可以简单地在不同的计算机或云上自托管SeaGOAT服务器,并配置 seagoat
/gt
命令通过互联网连接到这个远程服务器。
请记住,SeaGOAT本身不强制执行任何安全措施,因为它主要是设计用来本地运行的。如果你有私有代码不希望泄露,你需要确保只有可信的人可以访问SeaGOAT服务器。这可以通过使其仅通过你的团队成员可以访问的VPN来实现。
我可以忽略文件/目录吗?
SeaGOAT已经忽略了在你的.gitignore
中被忽略的所有文件/目录。如果你希望忽略其他文件但保留在git中,可以使用服务器配置中的ignorePatterns
属性。了解更多