gpt-migrate

gpt-migrate

自动化代码迁移工具实现跨框架和语言转换

GPT-Migrate是一款基于AI的代码迁移工具,可将代码库在不同框架或语言间转换。它结合Docker环境和大型语言模型,实现源代码评估、依赖选择、目标代码重建、测试和调试的自动化。该工具旨在降低代码迁移成本和时间,但仍处于开发阶段。GPT-Migrate支持多种编程语言,提供灵活配置,并针对复杂迁移任务提供专家支持。

GPT-Migrate代码迁移AI编程自动化转换开源项目Github
<div align="center">

◐   GPT-Migrate   ◑

轻松将您的代码库从一个框架或语言迁移到另一个。

<p> <a href="https://github.com/0xpayne/gpt-migrate/commits"><img alt="GitHub 最后提交" src="https://img.shields.io/github/last-commit/0xpayne/gpt-migrate" /></a> <a href="https://github.com/0xpayne/gpt-migrate/issues"><img alt="GitHub 问题" src="https://img.shields.io/github/issues/0xpayne/gpt-migrate" /></a> <a href="https://github.com/0xpayne/gpt-migrate/pulls"><img alt="GitHub 拉取请求" src="https://img.shields.io/github/issues-pr/0xpayne/gpt-migrate" /></a> <a href="https://github.com/0xpayne/gpt-migrate/blob/main/LICENSE"><img alt="Github 许可证" src="https://yellow-cdn.veclightyear.com/835a84d5/1174754e-1411-45db-9501-1d8d8893aa06.svg" /></a> <a href="https://github.com/0xpayne/gpt-migrate"><img alt="GitHub 仓库星标" src="https://img.shields.io/github/stars/0xpayne/gpt-migrate?style=social" /></a> </p> <br /> </div>

如果您曾经面临将代码库迁移到新框架或语言的痛苦,这个项目就是为您准备的。

https://user-images.githubusercontent.com/25165841/250232917-bcc99ce8-99b7-4e3d-a653-f89e163ed825.mp4

迁移是一个昂贵、繁琐且非常棘手的问题。请不要盲目信任当前版本,并负责任地使用。同时请注意,由于GPT-Migrate旨在编写(可能还会重写)整个代码库,成本可能会迅速增加。

然而,凭借开源社区的集体智慧和当前大型语言模型的发展状况,这也是一个非常可解决的问题。

⚡️ 使用方法

  1. 安装Docker并确保它正在运行。同时建议您至少使用GPT-4,最好是GPT-4-32k。

📦 使用Poetry安装

  1. 按照Poetry官方网站的说明安装Poetry。

  2. 安装Poetry后,进入项目目录并使用以下命令安装项目依赖:

poetry install

这将创建一个虚拟环境并在该环境中安装所有必要的依赖。

  1. 设置您的OpenRouter API密钥(默认)和/或您的OpenAI API密钥(直接使用OpenAI API...在这种情况下,将--model设置为gpt-4-32k或您所需的模型),并安装Python依赖:

export OPENROUTER_API_KEY=<您的密钥> export OPENAI_API_KEY=<您的密钥> pip install -r requirements.txt

  1. 运行主脚本,指定您想要迁移到的目标语言:

python main.py --targetlang nodejs

  1. (可选)如果您希望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.pymain.py文件。默认为"app.py"

  • --targetdir:迁移后的代码将存放的目录。默认为"../benchmarks/flask-nodejs/target"

  • --targetlang:迁移的目标语言或框架。默认为"nodejs"

  • --operating_system:Dockerfile的操作系统。常见选项是'linux''windows'。默认为'linux'

  • --testfiles:包含要测试的函数的文件的逗号分隔列表。例如,对于Python应用程序,这可能是包含REST端点的app.pymain.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

GPT辅助调试

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()函数接受一个或多个子提示,并生成一个可能用变量格式化的字符串,例如GUIDELINESp1WRITE_CODEp2等:

prompt = prompt_constructor(HIERARCHY, GUIDELINES, WRITE_CODE, DEBUG_TESTFILE, SINGLEFILE).format(targetlang=targetlang,buggyfile=buggyfile)

📈 性能

GPT-Migrate目前处于开发alpha阶段,尚未准备好用于生产环境。例如,在相对简单的基准测试中,它能够在约50%的情况下顺利处理"简单"语言如Python或JavaScript,但在处理更复杂的语言如C++或Rust时,如果没有一些人工协助,它无法完成任务。

✅ 基准测试

我们正在积极建立一个健壮的基准测试仓库。如果你有想贡献的代码库,请提交PR!当前的基准测试是从头开始构建的:具有几个端点和依赖文件的REST API应用程序。

🧗 路线图

以下是待改进的事项。如果你想解决其中任何一个或其他问题,请提交PR :)

高优先级

  • 根据窗口大小添加模型输入大小限制的逻辑。参见问题#2

中等优先级

  • 为整个项目添加单元测试,以提高可靠性和CI/CD
  • 添加更多基准示例,特别是更大的仓库
  • 添加功能,让LLM在调试时请求访问其他文件中的依赖函数
  • 添加对其他LLM的支持

低优先级

  • 在模型调试时启用互联网搜索请求
  • 识别并编译特定语言的问题并解决它们

📣 行动号召

我们正在寻找有才华的贡献者。无论你对特定语言或框架有特别的热情,想要帮助创建更健壮的测试套件,还是对如何使这个项目变得更好有有趣的想法,我们都非常欢迎你的加入!

🛠 专家辅助迁移

由于请求的涌入,我们决定创建一个标准化的流程来帮助人们进行迁移。如果你是需要帮助进行大规模迁移的公司,或者是愿意帮助进行迁移的专家,请访问以下网站:https://gpt-migrate.com/

加入Twitter上的对话!

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多