joshembling/laragenie

一个用于命令行的AI机器人,可以读取和理解你的Laravel应用程序中的任何代码库。

v1.2.2 2024-08-05 13:14 UTC

README

Latest Version on Packagist Total Downloads

Laragenie是一个运行在命令行上的AI聊天机器人,它可以从你的Laravel应用程序中读取和理解任何代码库。它只需遵循几个简单步骤即可

  1. 设置你的环境变量 OpenAI 和 Pinecone
  2. 发布和更新Laragenie配置
  3. 索引你的文件和/或整个目录
  4. 提出你的问题

就这么简单!立即加速你的工作流程,与最快的、知识最丰富的‘同事’无缝协作。

这是一个非常有用的CLI机器人,可用于

  • 将开发者引入新项目。
  • 帮助初级和高级开发者理解代码库,提供一种成本效益高的替代方案,无需与其他开发者进行多次一对一会议。
  • 根据需要提供方便和随时可用的支持。

你不仅限于索引基于你的Laravel项目的文件。你可以将其用于monorepo,或者任何语言的任何repo。当然,你也可以使用这个工具来索引非代码文件。

你所要做的就是从Laravel目录中运行这个CLI工具。简单,对吧?!🎉

Demo

注意

如果你是从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账户。您可以设置两种不同类型的账户

  1. 无服务器
  2. 基于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_ENVIRONMENTPINECONE_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个选项

  1. 提问
  2. 索引文件
  3. 删除已索引文件
  4. 其他选项

使用箭头键在选项之间切换,并使用Enter键选择命令。

提问

注意:您只能在将文件索引到您的Pinecone向量数据库后运行此操作(如果您想了解如何开始索引,请跳转到“索引文件”部分)。

当您的向量数据库有索引时,您将能够提出与您的代码库相关的问题。

答案可以以Markdown格式生成,包含代码示例,或者您选择的任何格式。使用bot.instructions配置来编写您需要的详细AI指令。

在每个响应下方,您将看到生成的成本(以美元计),这将帮助您密切跟踪费用。如果启用了迁移,响应的成本将添加到您的数据库中。

成本可能会有所不同,但小型响应将小于0.01美元。更大的响应可能在0.02-0.05美元之间。

强制AI

如前所述,当您启用了迁移时,您的问题将保存到您的数据库中。

但是,如果您对初始答案不满意,您可能希望强制使用AI(防止从数据库中获取)。这将覆盖已保存到数据库中的答案。

要强制AI响应,您需要在所有问题的末尾添加一个--ai标志,例如:

告诉我用户是如何保存到数据库的 --ai.

这将确保AI模型将重新评估您的请求,并输出另一个答案(这可能是相同的答案,具体取决于您使用的GPT模型)。

索引文件

快速索引文件的最快方法是向Laragenie配置中的directoriesfiles数组传递单个值。当您运行'索引文件'命令时,您始终可以选择重新索引这些文件。这将帮助保持您的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项目可能位于包含两个根条目的单仓中,例如frontendbackend。在这种情况下,您可以向上移动一个级别以索引更多目录和文件,例如../frontend/src/../frontend/components/Component.js

您可以将这些添加到Laragenie配置中的directoriesfiles中。

'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配置中的directoriesfiles数组中使用 - 目前这仅用于索引目的。

如果您想删除所有文件,可以选择删除所有分块数据警告:这将截断您的整个向量数据库,且无法恢复。

要删除逗号分隔的文件/目录列表,选择删除与目录或特定文件关联的数据提示作为选项。

严格的删除,即在删除文件之前显示警告消息,可以通过在配置中将'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)。有关更多信息,请参阅许可文件