ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
ChatGPT代码生成飙升10%!北大华人一作:细化prompt,大幅改进大模型代码能力
4629点击    2023-11-16 13:18


在大模型时代,高质量的代码生成已经强大到,让人惊叹。


从通过HumEval中67%测试的GPT-4,到近来各种开源大模型,比如CodeLlama,有望成为码农编码利器。



然而,现实中,程序员们不会精炼表达需求,因此误导、限制了LLM生成优秀代码的能力。


说白了,大模型代码能力行不行,取决于你的提示妙不妙。


对此,来自北大实验室的研究团队提出了,通过与LLM聊天来细化需求的方法——ChatCoder。



论文地址:https://arxiv.org/pdf/2311.00272.pdf


具体来说,他们设计了一种聊天方案,大模型引导用户细化需求表达,进而比以前更精确、更完整,同时提高了大模型的性能。


大模型是「码农」,你就是「产品经理」


这里先举个例子,如下图,用户提出了需求:


数据集#MBPP/443,要求ChatGPT编写一个python函数从给定的列表中找到「最大的负数」。


基于原始需求,ChatGPT生成一个程序,该程序可以正确提取实际值最大的负数。


然而,sanitized-MBPP的作者认为「最大负数」应该是指「绝对值最大的数」。



因此由于「最大」这个表达不明确,导致LLM生成了错误的代码。


而这里,可以通过需求细化(requirements refinement)来解决这个问题。


需求细化就是揭示需求中的隐含依赖和隐藏结构的过程。通过提供更多细节,在需求细化的过程中可以补充不完整的信息,消除模糊不清的地方。




在前面举的例子中,我们可以简单地向大语言模型说明「最大的」在这里特指「绝对值最大的」,揭示了「最大」这个词的隐藏结构。


有了这一改进后的需求,大模型就可以生成符合MBPP作者期望的代码。


不得不提的是,需求细化,需要人类用户和大模型的协作。


一般来说,在需求工程的背景下,需求细化是通过软件供应商(编码人员)和软件客户(用户)之间的一系列交互来执行的。


软件供应商分析客户需求的初始表达,并提出细化点。软件客户则需要根据这些点来作出响应,供应商才能完成一轮需求细化。


无论是软件客户还是软件供应商,任何一方都不具备单独进行需求细化的资格。


这样的劣势在于,客户通常不够了解软件设计和开发过程,无法撰写可用的需求说明;而供应商通常也不够了解客户的问题和业务领域,无法为满意的系统制定需求。




而现在,在大模型时代,人类用户是客户,LLM是「供应商」。


为了通过需求细化让大模型生成更好地满足用户需求的代码,就需要研发人类和LLM协作的方法。


ChatCoder:聊天细化,生成代码


北大提出了ChatCoder,这是通过聊天进行需求细化的大模型代码生成的新方法。


整体框架如下图,非常简洁,通过聊天来辅助LLM和人类在需求细化方面的协作。


关键是,如何与大型语言模型聊天。


ChatCoder便提供了一个全新的聊天模式,其设计灵感来自IEEE SRS。



接下来,我们具体看下ChatCoder这个框架。


其整体结构是一个两轮的对话。


第一阶段:Paraphrase和Exend


由于人类用户表达需求可能语意模糊、不完整,ChatCoder使用提示要求LLM从几个角度解释用户的原始需求,即完整的需求规范必须清晰。


对于需要改进的遗漏或有野心的论点,ChatCoder让大语言模型基于它从训练数据中获得的假设来扩展它们。


人类用户需要查看细化的规范并纠正其中的错误。


第二阶段:Going-deep和Loop-back


在这一轮中,ChatCoder要求LLM询问人类用户,关于第一轮Paraphrase和Exend中信息损失,以及需要进一步改进的规范方面的困惑。


人类用户需要回答这些问题,并回环纠正细化后的规范。


经过两轮细化后,得到细化后的需求,然后发送给大型语言模型,得到用户想要的程序。



ChatGPT代码能力10%


实验设置


数据集:Sanitized-MBPP、HumanEval。


基准:gpt-3.5-turbo、gpt-4。


研究问题


为了评估ChatCoder,研究人员提出并测试了以下研究问题:


1)与现有代码生成模型相比,ChatCoder的表现如何?


2)ChatCoder是LLM和人类用户交流以进行需求细化的有效方法吗?


3)人类参与ChatCoder带来了多少改进?


ChatCoder性能表现


首先我们来看第一个问题,主要是为了评估ChatCoder与基线相比的整体代码生成性能。


如表1所示,ChatCoder通过大幅细化的需求,成功帮助LLM提高了其生成程序的执行精度。


例如,对于gpt-3.5-turbo,其在Saniticed-MBPP上的pass@1从57.04%提高到71.25%,提升了14%。


横向比较,对于gpt-3.5-turbo和gpt-4,Saniticed-MBPP上的性能改进比HumEval上的更突出。



沟通效率的表现


第二个问题是,评估ChatCoder是否是大模型和人类进行需求细化交流的有效方式。


根据表2,所有3种与LLM进行需求细化的通信方法都有助于LLM改进其代码生成结果。


这一发现指出,任何形式的需求细化在应用LLM生成代码时都是有用和重要的。


与ChatCoder相比,Free Paraphrase和Free QA不会指示LLM执行某些类型的细化,从而导致较低的改进。



人工干预评估


如下评估了人工干预对ChatCoder的重要性,结果见表3。


由于ChatCoder利用需求细化来提高大语言模型的代码生成性能,因此人工干预是必要的,也是不可忽视的。


ChatCoder的过程是从给定的角度揭示需求的内部结构,这些角度没有明确表达,即使有歧义。解决歧义的答案只有人类用户知道。



案例研究


如下,作者提出了几个真实的测试用例,说明ChatCoder如何帮助LLM生成具有细化需求的代码。


由于页面限制,研究人员从MBPP中选择了3个案例,涵盖了关于输入、输出和目的的细化,因为它们直接影响功能需求。



参考资料:

https://arxiv.org/abs/2311.00272



文章来自微信公众号 “ 新智元 ”






关键词: HumEval , GPT-4 , CodeLlama