跳转到主要内容

由GPT-3驱动的自动代码重构工具。

项目描述

autobot

PyPI version

由GPT-3驱动的自动代码重构工具。类似于GitHub Copilot,适用于您的现有代码库。

Autobot接受一个示例更改作为输入,并通过对您的代码库进行扫描以查找类似的代码块并将该更改“应用”到现有源代码来为您生成补丁。

Sorting class attributes

Twitter上查看更多示例,或阅读博客文章

注意。Autobot是一个原型,不建议用于大型代码库。请参阅:“限制”

入门

Autobot可在PyPI上以autobot-ml的形式获取

pip install autobot-ml

Autobot依赖于OpenAI API,并且特别期望您的OpenAI组织ID和API密钥分别公开为环境变量OPENAI_ORGANIZATIONOPENAI_API_KEY

Autobot还可以从.env文件中读取

OPENAI_ORGANIZATION=${YOUR_OPENAI_ORGANIZATION}
OPENAI_API_KEY=${YOUR_OPENAI_API_KEY}

从这里,您可以使用Autobot的任何内置重构(称为“模式”)

autobot run useless_object_inheritance /path/to/file.py

示例用法

TL;DR:Autobot是一个命令行工具。要生成补丁,请使用autobot run;要审查生成的补丁,请使用autobot review

Autobot的设计基于两步工作流程。

在第一步(autobot run {schematic} {files_to_analyze}),我们指导Autobot指向(1)定义所需更改的“schematic”和(2)应用更改的文件。

在第二步(autobot review),我们审查Autobot生成的补丁,对于每个建议的更改,我们可以将其应用到代码库中,也可以完全拒绝该补丁。

Autobot附带了一些您可以直接使用的schematic。

  • assert_equals
  • convert_to_dataclass
  • numpy_builtin_aliases
  • print_statement
  • sorted_attributes
  • standard_library_generics
  • unnecessary_f_strings
  • use_generator
  • useless_object_inheritance

例如:要删除NumPy已弃用的np.int及其关联别名的任何用法,我们首先运行autobot run numpy_builtin_aliases /path/to/file.py,然后运行autobot review

autobot runschematic参数可以引用schematics目录中的目录(如上例中的numpy_builtin_aliases)或磁盘上用户定义的schematic目录的路径。

实现新的重构(“schematic”)

Autobot提供的每个重构都需要一个“schematic”。Autobot在schematics目录中附带了一些schematic,但它的设计意图是与用户提供的schematic一起使用。

一个schematic是一个包含两个文件的目录

  1. before.py:演示重构“之前”状态的代码片段。
  2. after.py:演示重构“之后”状态的代码片段。

每个文件都应包含一个简短的顶层文档字符串,描述“之前”或“之后”状态,然后是一个函数或类。

例如:在Python 3中,class Foo(object)class Foo等价。要自动从我们的代码库中删除那些无用的对象继承,我们创建一个useless_object_inheritance目录,并添加以下两个文件

# before.py
"""...with object inheritance."""
class Foo(Bar, object):
    def __init__(self, x: int) -> None:
        self.x = x
# after.py
"""...without object inheritance."""
class Foo(Bar):
    def __init__(self, x: int) -> None:
        self.x = x

然后我们运行autobot run ./useless_object_inheritance /path/to/file/or/directory以生成补丁,然后运行autobot review以应用或拒绝建议的更改。

限制

  1. 运行Autobot会消耗OpenAI积分,因此可能会花费您金钱。请小心!
  2. 默认情况下,Autobot使用OpenAI的text-davinci-002模型,尽管autobot run接受一个--model参数,允许您选择替代的OpenAI模型。请注意,OpenAI的Codex模型目前处于私有测试阶段,因此code-davinci-002和类似模型可能会出错。
  3. 为了加快执行速度,Autobot并行调用OpenAI API。如果您没有升级到付费账户,可能会遇到速率限制错误。您可以将--nthreads 1传递给autobot run以禁用多线程。不建议(目前)在大型代码库上运行Autobot。
  4. 根据转换类型,Autobot将尝试为每个函数或每个类生成一个补丁。任何对于GPT-3的最大提示大小“太长”的函数或类都将被跳过。
  5. Autobot还不够聪明,无法处理嵌套函数(或嵌套类),因此嵌套函数可能会被处理两次并显示出来。
  6. 目前,Autobot仅支持Python代码。由于Autobot依赖于解析AST以提取相关代码片段,因此需要扩展AST支持才能支持其他语言。

路线图

  1. 多语言支持。目前,Autobot仅支持Python代码。要将支持扩展到多语言,至少在当前算法中,需要支持额外的AST解析器。最有可能的结果是利用tree-sitter
  2. 支持大型代码库。要运行Autobot处理数十万行代码需要做什么?

许可证

MIT

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

autobot-ml-0.0.16.tar.gz (17.2 kB 查看哈希值)

上传时间

构建分布

autobot_ml-0.0.16-py3-none-any.whl (23.1 kB 查看哈希值)

上传时间 Python 3

支持者