由GPT-3驱动的自动代码重构工具。
项目描述
autobot
由GPT-3驱动的自动代码重构工具。类似于GitHub Copilot,适用于您的现有代码库。
Autobot接受一个示例更改作为输入,并通过对您的代码库进行扫描以查找类似的代码块并将该更改“应用”到现有源代码来为您生成补丁。
注意。Autobot是一个原型,不建议用于大型代码库。请参阅:“限制”。
入门
Autobot可在PyPI上以autobot-ml
的形式获取
pip install autobot-ml
Autobot依赖于OpenAI API,并且特别期望您的OpenAI组织ID和API密钥分别公开为环境变量OPENAI_ORGANIZATION
和OPENAI_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 run
的schematic
参数可以引用schematics
目录中的目录(如上例中的numpy_builtin_aliases
)或磁盘上用户定义的schematic目录的路径。
实现新的重构(“schematic”)
Autobot提供的每个重构都需要一个“schematic”。Autobot在schematics
目录中附带了一些schematic,但它的设计意图是与用户提供的schematic一起使用。
一个schematic是一个包含两个文件的目录
before.py
:演示重构“之前”状态的代码片段。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
以应用或拒绝建议的更改。
限制
- 运行Autobot会消耗OpenAI积分,因此可能会花费您金钱。请小心!
- 默认情况下,Autobot使用OpenAI的
text-davinci-002
模型,尽管autobot run
接受一个--model
参数,允许您选择替代的OpenAI模型。请注意,OpenAI的Codex模型目前处于私有测试阶段,因此code-davinci-002
和类似模型可能会出错。 - 为了加快执行速度,Autobot并行调用OpenAI API。如果您没有升级到付费账户,可能会遇到速率限制错误。您可以将
--nthreads 1
传递给autobot run
以禁用多线程。不建议(目前)在大型代码库上运行Autobot。 - 根据转换类型,Autobot将尝试为每个函数或每个类生成一个补丁。任何对于GPT-3的最大提示大小“太长”的函数或类都将被跳过。
- Autobot还不够聪明,无法处理嵌套函数(或嵌套类),因此嵌套函数可能会被处理两次并显示出来。
- 目前,Autobot仅支持Python代码。由于Autobot依赖于解析AST以提取相关代码片段,因此需要扩展AST支持才能支持其他语言。
路线图
- 多语言支持。目前,Autobot仅支持Python代码。要将支持扩展到多语言,至少在当前算法中,需要支持额外的AST解析器。最有可能的结果是利用
tree-sitter
。 - 支持大型代码库。要运行Autobot处理数十万行代码需要做什么?
许可证
MIT
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
autobot-ml-0.0.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95c87ab3822d5f2459f27bf51c3a0210fc523d5324600f686153940acb787b18 |
|
MD5 | 942e6a9441b217fc27472901f32495d9 |
|
BLAKE2b-256 | 34903c1be71bc87fff08142fe847f60cebeb33856064a7bb1b2ce158ccacbff7 |
autobot_ml-0.0.16-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fdf163fac23ef1be073b45bf33014f4a5d194a83595b8e47b36b9143be2e9e76 |
|
MD5 | e1c48f41a9389e9c8103787534e70060 |
|
BLAKE2b-256 | e7c594ea096e493f446285fe93261ff4019bed8b94ecf4a1ef6d00fbf0f59c5c |