微信扫码
与创始人交个朋友
我要投稿
现在,我估计,99.99% 的程序员都在使用 GPT 写代码,但是,我相信很多人碰到了和我一样的问题,就是 GPT 生成的代码,他不一定是可用的,有时候,他可能会漏掉一些分支逻辑,这就导致了我们在使用 GPT 生成代码的时候,需要自己手动检查代码的质量,这个过程是非常耗时的。
为了解决这个问题,我思考了一种方式,那就是让 GPT 自己验证自己生成的代码,如果发现有错误,自己修复这些错误,这样就可以大大提高我们使用 GPT 生成代码的效率。
这不就是妥妥的,打败魔法的终极方法就是靠魔法吗?整个实现的源码在此:
https://github.com/brhoollynodeStudy/AutoCodeGenTestFix/blob/main/main.py ,
下面我们称之为 AutoCodeGenTestFix
。
AutoCodeGenTestFix 是一个基于大模型的自动代码生成、测试和修复工具。该项目旨在通过自动化流程,帮助开发者快速生成代码、编写测试用例、执行测试并修复代码,从而提高开发效率和代码质量。项目基于 langchain
这个库构建,简化了很多工程化的操作。
这个项目解决的问题,上面已经提到过了,就是让 GPT 自己验证自己生成的代码,如果发现有错误,自己修复这些错误,目的就是保证代码的质量。
项目基于以下几个主要组件:
• CodeGenerationAgent:生成初始代码。
• TestGenerationAgent:生成相应的单元测试用例。
• TestExecutionAgent:执行测试用例并获取测试结果。
• TestResultAgent:分析测试结果。
• CodeFixAgent:根据测试结果修复代码。
以下是项目的架构图:
+----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+
| | | | | | | | | |
| CodeGenerationAgent | ---> | TestGenerationAgent | ---> | TestExecutionAgent | ---> | TestResultAgent | ---> | CodeFixAgent |
| | | | | | | |
+----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+
他的工作流程如下:其中最核心的是 TestResultAgent
,它会根据测试结果,判断代码的质量,如果发现有错误,会调用 CodeFixAgent
来修复代码,这样保证了代码的质量。
# 定义 CodeGenerationAgent,用于生成初始代码
code_generation_template = PromptTemplate(
input_variables=["requirement"],
template="根据以下需求生成 Python 代码,只返回代码部分,不包含任何说明或解释:\n\n需求:{requirement}\n\n代码:"
)
code_generation_chain = code_generation_template | llm
# 定义 TestGenerationAgent,用于生成测试用例
test_generation_template = PromptTemplate(
input_variables=["code"],
template="根据以下代码生成 Python 的单元测试用例,只返回测试代码,不包含任何说明或解释:\n\n{code}\n\n测试代码:"
)
test_generation_chain = test_generation_template | llm
这就是左右互搏的核心部分,通过这个核心部分,我们可以实现代码的生成、测试、修复。
首先,确保安装好必要的库:
pip install langchain langchain_openai pytest
将你的 OpenAI API 密钥设置为环境变量,或在代码中直接设置:
import openai
openai.api_key = 'your-openai-api-key' # 替换为你的 OpenAI API 密钥
以下是一个简单的示例,展示如何使用 AutoCodeGenTestFix
解决 LeetCode 上的最长公共子串问题:
python main.py "实现一个函数,输入两个字符串 s1 和 s2,返回它们的最长公共子串的长度。"
这个项目目前还在开发中,我会继续完善它,增加更多功能,比如目前可能写一个具体的功能函数是可以胜任的,但是如果是一个前端组件呢?那么自动化测试就是一个非常大的挑战,我会继续努力,让这个项目更加完善。
以下是一些可能的改进方向:
• 更多大模型支持:支持更多的大模型,提供更多的选择。
• 前端组件生成:支持生成前端组件代码,并自动生成测试用例。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-08-21
2024-08-13
2024-04-11
2024-07-09
2024-07-18
2024-10-25
2024-07-01
2024-06-16