joshembling / laragenie
一个用于命令行的AI机器人,可以读取和理解你的Laravel应用程序中的任何代码库。
Requires
- php: ^8.2
- illuminate/contracts: ^10.0|^11.0
- laravel/prompts: ^0.1.13
- openai-php/client: ^0.8.0
- openai-php/laravel: ^0.8.0
- probots-io/pinecone-php: ^1.0.1
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
README
Laragenie是一个运行在命令行上的AI聊天机器人,它可以从你的Laravel应用程序中读取和理解任何代码库。它只需遵循几个简单步骤即可
- 设置你的环境变量 OpenAI 和 Pinecone
- 发布和更新Laragenie配置
- 索引你的文件和/或整个目录
- 提出你的问题
就这么简单!立即加速你的工作流程,与最快的、知识最丰富的‘同事’无缝协作。
这是一个非常有用的CLI机器人,可用于
- 将开发者引入新项目。
- 帮助初级和高级开发者理解代码库,提供一种成本效益高的替代方案,无需与其他开发者进行多次一对一会议。
- 根据需要提供方便和随时可用的支持。
你不仅限于索引基于你的Laravel项目的文件。你可以将其用于monorepo,或者任何语言的任何repo。当然,你也可以使用这个工具来索引非代码文件。
你所要做的就是从Laravel目录中运行这个CLI工具。简单,对吧?!🎉
注意
如果你是从Laragenie版本 ^1.0.63 > 1.1
升级,Pinecone环境变量有所更改。请参阅 OpenAI 和 Pinecone。
内容
最低要求
对于与你的PHP、Laravel和Laragenie版本匹配的特定版本,请参阅下表
此包使用 Laravel Prompts,它支持macOS、Linux和Windows的WSL。由于PHP在Windows版本中的限制,目前无法在WSL之外使用Laravel Prompts在Windows上。
因此,Laravel Prompts支持回退到替代实现,例如Symfony Console Question Helper。
安装
你可以使用composer安装此包
composer require joshembling/laragenie
你可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="laragenie-migrations"
php artisan migrate
如果你不想发布迁移,你必须将你的Laragenie配置中的数据库凭据切换为false。(详见以下配置文件详细信息)。
你可以使用以下命令发布配置文件
php artisan vendor:publish --tag="laragenie-config"
这是发布配置文件的内容
return [ 'bot' => [ 'name' => 'Laragenie', // The name of your chatbot 'welcome' => 'Hello, I am Laragenie, how may I assist you today?', // Your welcome message 'instructions' => 'Write in markdown format. Try to only use factual data that can be pulled from indexed chunks.', // The chatbot instructions ], 'chunks' => [ 'size' => 1000, // Maximum number of characters to separate chunks ], 'database' => [ 'fetch' => true, // Fetch saved answers from previous questions 'save' => true, // Save answers to the database ], 'extensions' => [ // The file types you want to index 'php', 'blade.php', 'js', ], 'indexes' => [ 'directories' => [], // The directores you want to index e.g. ['app/Models', 'app/Http/Controllers', '../frontend/src'] 'files' => [], // The files you want to index e.g. ['tests/Feature/MyTest.php'] 'removal' => [ 'strict' => true, // User prompt on deletion requests of indexes ], ], 'openai' => [ 'embedding' => [ 'model' => 'text-embedding-3-small', // Text embedding model 'max_tokens' => 5, // Maximum tokens to use when embedding ], 'chat' => [ 'model' => 'gpt-4-turbo-preview', // Your OpenAI GPT model 'temperature' => 0.1, // Set temperature between 0 and 1 (lower values will have less irrelevance) ], ], 'pinecone' => [ 'topK' => 2, // Pinecone indexes to fetch ], ];
使用
OpenAI 和 Pinecone
OpenAI
此包使用 OpenAI 处理和生成响应,以及 Pinecone 索引你的数据。
你需要创建一个带有信用额的OpenAI账户,生成API密钥并将其添加到你的 .env
文件中
OPENAI_API_KEY=your-open-ai-key
Pinecone
重要
如果您使用的是1.1版本之前的Laragenie,并且不想升级,请直接跳转到遗留Pinecone。
您需要创建一个Pinecone账户。您可以设置两种不同类型的账户
- 无服务器
- 基于Pod的索引
截至2024年初,Pinecone建议您从无服务器账户开始。您可以设置一个带有付款方式的账户以获得100美元的免费信用额度,但是免费账户允许最多100,000个索引 - 对于任何小型到中型应用来说可能已经足够。
创建一个1536维度的索引,度量标准为'余弦'。然后生成一个API密钥,并将这些详细信息添加到您的.env
文件中
PINECONE_API_KEY=an-example-pinecone-api-key
PINECONE_INDEX_HOST='https://an-example-url.aaa.gcp-starter.pinecone.io'
您的托管信息可以在索引页面上的信息框中看到,包括度量标准、维度、Pod类型、云、区域和环境。
提示
如果您正在升级到Laragenie ^1.1,可以安全地删除遗留环境变量:PINECONE_ENVIRONMENT
和PINECONE_INDEX
。
旧版Pinecone
重要:如果您使用的是Laragenie 1.0.63或更早版本,您必须使用常规Pinecone账户,而不是无服务器账户。在创建账户时被提示选择选项时,请确保选择'继续使用基于Pod的索引'。
创建一个1536维度的环境,并为其命名,生成一个API密钥,并将这些详细信息添加到您的.env
文件中
PINECONE_API_KEY=your-pinecone-api-key
PINECONE_ENVIRONMENT=gcp-starter
PINECONE_INDEX=your-index
在命令行上运行Laragenie
一旦设置好这些,您就可以从根目录运行以下命令
php artisan laragenie
您将得到4个选项
- 提问
- 索引文件
- 删除已索引文件
- 其他选项
使用箭头键在选项之间切换,并使用Enter键选择命令。
提问
注意:您只能在将文件索引到您的Pinecone向量数据库后运行此操作(如果您想了解如何开始索引,请跳转到“索引文件”部分)。
当您的向量数据库有索引时,您将能够提出与您的代码库相关的问题。
答案可以以Markdown格式生成,包含代码示例,或者您选择的任何格式。使用bot.instructions
配置来编写您需要的详细AI指令。
在每个响应下方,您将看到生成的成本(以美元计),这将帮助您密切跟踪费用。如果启用了迁移,响应的成本将添加到您的数据库中。
成本可能会有所不同,但小型响应将小于0.01美元。更大的响应可能在0.02-0.05美元之间。
强制AI
如前所述,当您启用了迁移时,您的问题将保存到您的数据库中。
但是,如果您对初始答案不满意,您可能希望强制使用AI(防止从数据库中获取)。这将覆盖已保存到数据库中的答案。
要强制AI响应,您需要在所有问题的末尾添加一个--ai
标志,例如:
告诉我用户是如何保存到数据库的 --ai
.
这将确保AI模型将重新评估您的请求,并输出另一个答案(这可能是相同的答案,具体取决于您使用的GPT模型)。
索引文件
快速索引文件的最快方法是向Laragenie配置中的directories
或files
数组传递单个值。当您运行'索引文件'命令时,您始终可以选择重新索引这些文件。这将帮助保持您的Laragenie机器人最新。
当提示您想索引配置中保存的目录和文件吗?
时,选择'是'。
'indexes' => [ 'directories' => ['app/Models', 'app/Http/Controllers'], 'files' => ['tests/Feature/MyTest.php'], 'removal' => [ 'strict' => true, ], ],
如果您选择'否',您还可以以以下方式索引文件
- 输入文件名及其命名空间,例如
app/Models/User.php
- 输入完整目录,例如
App
- 如果您传入一个目录,Laragenie只能索引该目录内的文件,而不能索引其子目录。
- 要索引子目录,您必须明确传递路径,例如,要索引所有模型,请传入
app/Models
。
- 输入多个文件或目录的逗号分隔列表,例如
app/Models, tests/Feature, app/Http/Controllers/Controller.php
。 - 使用通配符输入多个目录,例如
app/Models/*.php
。- 请注意,通配符必须仍然匹配您laragenie配置文件中的文件扩展名。
在Laravel项目之外索引文件
您可以使用任何您希望的方式使用Laragenie;您不仅限于索引基于Laravel的文件。
例如,您的Laravel项目可能位于包含两个根条目的单仓中,例如frontend
和backend
。在这种情况下,您可以向上移动一个级别以索引更多目录和文件,例如../frontend/src/
或../frontend/components/Component.js
。
您可以将这些添加到Laragenie配置中的directories
和files
中。
'indexes' => [ 'directories' => ['app/Models', 'app/Http/Controllers', '../frontend/src/'], 'files' => ['tests/Feature/MyTest.php', '../frontend/components/Component.js'], 'removal' => [ 'strict' => true, ], ],
使用此相同的方法,您可以理论上索引服务器或本地机器上可访问的任何文件或目录。
确保您的Laragenie配置中的扩展名与您想要索引的所有文件类型匹配。
'extensions' => [ 'php', 'blade.php', 'js', 'jsx', 'ts', 'tsx', // etc... ],
注意:如果您的目录、路径或文件名更改,如果您稍后决定更新/删除索引,Laragenie将无法找到索引(除非您截断整个向量数据库,或者进入Pinecone手动删除它们)。
删除已索引文件
您可以使用上述相同的方法删除已索引文件,除了不在Laragenie配置中的directories
或files
数组中使用 - 目前这仅用于索引目的。
如果您想删除所有文件,可以选择删除所有分块数据
。 警告:这将截断您的整个向量数据库,且无法恢复。
要删除逗号分隔的文件/目录列表,选择删除与目录或特定文件关联的数据
提示作为选项。
严格的删除,即在删除文件之前显示警告消息,可以通过在配置中将'strict'属性更改为false来打开/关闭。
'indexes' => [ 'removal' => [ 'strict' => true, ], ],
停止Laragenie
您可以使用以下方法停止Laragenie:
- ctrl + c(Linux/Mac)
- 在至少运行了1个提示后,从用户菜单中选择
不,谢谢,再见
。
享受使用Laragenie!🤖
调试
API密钥
- 如果您已正确添加所需的
.env
变量,但收到“您未提供API密钥”之类的错误,您可能需要清除缓存和配置。
php artisan config:clear php artisan cache:clear
- 同样,如果您在尝试四个选项中的任何一个时收到404响应和Saloon异常,那么您可能没有设置非无服务器Pinecone数据库,并且正在使用1.1之前的Laragenie版本。请参阅OpenAI和Pinecone。
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
安全漏洞
有关如何报告安全漏洞,请参阅我们的安全策略。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。