在人工智能兴起的当下,AI正在重塑着很多行业。今天介绍的是一款位于github热榜榜首的,可轻松将您的代码库从一个框架或语言迁移到另一个框架或语言的AI应用:GPT-Migrate。
轻松将您的代码库从一个框架或语言迁移到另一个框架或语言。
1.安装 Docker 并确保它正在运行。建议使用至少 GPT-4,最好是 GPT-4-32k。2.设置您的OpenAI API 密钥[1]并安装 Python 的依赖包:export OPENAI_API_KEY=<your key>pip install -r requirements.txt
3.使用您要迁移的目标语言运行主要脚本:python main.py --targetlang nodejs
4.(可选)如果您希望 GPT-Migrate 在对迁移后的应用程序进行测试之前验证所创建的单元测试,请确保您的现有应用程序已暴露,并使用 --sourceport
标志。要针对基准执行此操作,请打开一个单独的终端,导航到 benchmarks/language-pair/source
目录,并在安装所需的依赖后运行 python app.py
。它将在端口 5000 上进行暴露。使用此选项时,请使用 --sourceport
标志。
默认情况下,此脚本将执行 flask-nodejs 基准测试。您可以使用下面的选项指南指定语言、源目录和许多其他内容。
您可以通过将以下选项传递给 main.py
脚本来自定义 GPT-Migrate 的行为:
•--model
:要使用的大型语言模型。默认为 "gpt-4-32k"
。•--temperature
:AI 模型的温度设置。默认为 0
。•--sourcedir
:包含要迁移的代码的源目录。默认为 "../benchmarks/flask-nodejs/source"
。•--sourcelang
:要迁移的代码的源语言或框架。无默认值。•--sourceentry
:相对于源目录的入口文件名。例如,对于 Python,可以是 app.py
或 main.py
文件。默认为 "app.py"
。•--targetdir
:迁移后代码所在的目录。默认为 "../benchmarks/flask-nodejs/target"
。•--targetlang
:迁移的目标语言或框架。默认为 "nodejs"
。•--operating_system
:Dockerfile 的操作系统。常见选项为 'linux'
或 'windows'
。默认为 'linux'
。•--testfiles
:包含要测试函数的文件的逗号分隔列表。例如,对于具有 REST 端点的 Python 应用程序,可以是 app.py
或 main.py
文件。包括完整的相对路径。默认为 "app.py"
。•--sourceport
:(可选)针对原始应用程序进行单元测试的端口。无默认值。如果不包含,GPT-Migrate 将不会尝试针对原始应用程序测试单元测试文件。•--targetport
:针对迁移后应用程序进行单元测试的端口。默认为 8080
。•--guidelines
:在迁移期间希望遵循的风格或小的功能性指南。例如,“使用制表符,而不是空格”。默认为空字符串。•--step
:要运行的步骤。选项为 'setup'
、'migrate'
、'test'
、'all'
。默认为 'all'
。
例如,要将 Python 代码库迁移到 Node.js,您可以运行以下命令:
python main.py --sourcedir /path/to/my-python-app --sourceentry app.py --targetdir /path/to/my-nodejs-app --targetlang nodejs
这将获取 ./my-python-app
中的 Python 代码,将其迁移到 Node.js,并将生成的代码写入 ./my-nodejs-app
。
https://user-images.githubusercontent.com/25165841/250233075-eff1a535-f40e-42e4-914c-042c69ba9195.mp4
对于从 --sourcelang
迁移到 --targetlang
的代码库迁移...
1.GPT-Migrate 首先为 --targetlang
创建一个 Docker 环境,该环境可以通过参数传入,也可以由 GPT-Migrate 自动评估。2.它递归评估您现有的代码,以识别第三方 --sourcelang
依赖项,并选择相应的 --targetlang
依赖项。3.它从指定的 --sourceentry
文件开始,递归重建新的 --targetlang
代码。可以使用 --step migrate
选项启动此步骤。4.它使用新的代码库在 Docker 环境中启动应用程序,并在 --targetport
上公开,根据需要进行迭代调试。5.它使用 Python 的 unittest 框架编写单元测试,并根据需要可选地对这些单元测试进行与现有应用程序的集成测试,前提是现有应用程序正在运行并在 --sourceport
上公开。可以使用 --step test
选项启动此步骤。6.它使用这些单元测试对 --targetport
上的新代码进行测试。7.它使用日志、错误消息、相关文件和目录结构的上下文,为您迭代调试代码。它会选择一个或多个操作(移动、创建或编辑文件)然后执行它们。如果它想要执行任何类型的 shell 脚本(移动文件),它将首先征求许可。最后,如果在任何时候它卡住了或用户结束了调试循环,它将输出用户按照下一步迁移的指示进行操作。8.新的代码库已完成,并存在于 --targetdir
目录中。
子问题以以下方式组织:
•HIERARCHY
:这定义了偏好的概念。有4个偏好级别,每个级别的优先级高于前一个级别。•p1
:偏好级别 1。这些是最通用的提示,包括广泛的准则。•p2
:偏好级别 2。这些是更具体的提示,包括特定类型操作的准则(例如编写代码的最佳实践和理念)。•p3
:偏好级别 3。这些是更具体的提示,包括特定操作的指导(例如创建特定文件、调试、编写测试)。•p4
:偏好级别 4。这些是最具体的提示,包括输出格式。
提示是由多个子提示组合而成。这个标记和可组合性的概念可以扩展到其他属性,使提示更加健壮。这是我们非常感兴趣并积极探索的领域。
在这个存储库中,prompt_constructor()
函数接受一个或多个子提示,并生成一个字符串,该字符串可以用变量格式化。例如,GUIDELINES
是 p1
,WRITE_CODE
是 p2
等:
prompt = prompt_constructor(HIERARCHY, GUIDELINES, WRITE_CODE, DEBUG_TESTFILE, SINGLEFILE).format(targetlang=targetlang,buggyfile=buggyfile)
GPT-Migrate目前处于开发阶段,还未准备好供生产使用。例如,在相对简单的基准测试中,它可以顺利处理像Python或JavaScript这样的"简单"语言的约50%的情况,但在处理C++或Rust等更复杂的语言时,可能需要一些人工辅助。
我们正在积极努力构建一个健壮的基准测试库。如果您有一个代码库想要贡献,请提交一个 PR!目前的基准测试是从头开始构建的:REST API 应用程序,具有一些端点和依赖文件。
以下是待办事项列表中的改进计划。如果您想要完成其中的任何一项或其他任务,请提交一个 PR :)
•根据窗口大小添加限制模型输入大小的逻辑。请参见问题#2[2]。
•为整个项目添加单元测试,以提高可靠性和持续集成/持续交付 (CI/CD)•添加更多的基准测试示例,特别是更大的代码库•添加功能,让LLM在调试过程中能够访问其他文件中的依赖函数•添加对其他LLM的支持
•允许模型在调试过程中进行互联网搜索请求•识别并解决特定语言的问题
我们正在寻找有才华的贡献者。无论您对特定语言或框架有特别的热情,想要帮助创建更强大的测试套件,还是对如何改进项目有有趣的想法,我们都欢迎您的加入!
由于请求的增加,我们决定创建一个标准化的流程来帮助人们进行迁移。如果您是一个需要帮助进行大规模迁移的公司,或者是愿意提供帮助的专家,请访问以下网站:https://gpt-migrate.com/
本文翻译整理自:https://github.com/0xpayne/gpt-migrate,感兴趣的请点赞、收藏。
[1]
OpenAI API 密钥: https://platform.openai.com/account/api-keys
[2]
#2: https://github.com/0xpayne/gpt-migrate/issues/2