首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

探索 prompt 编码范式:如何优雅构建测试代码生成提示词?

从四月份到现在,我们持续为 AutoDev 编写了一系列的功能。尽管开发了三个多月,我们一直在持续思考、并重构我们管理 prompt 的方式。在即将发布的 AutoDev 0.8 里,我们进一下完善了现有的上下文构建方式,以模式化的方式重新思考并设计了新的上下文工程体系。

而测试生成正是我们的第一个新试点,以探索新的 prompt 模式是否更方便?如下是基于新 prompt 编码范式的视频:

详细代码见:https://github.com/unit-mesh/auto-dev

AutoDev 的 prompt 演进

在那篇《Prompt 编写模式:如何将思维框架赋予机器》,我总结了如何更好的编写 prmopt。于是,在 ArchGuard Co-mate 中,我们将这些模式代码化:

在开发 AutoDev 的过程中,我们发现它匹配我们所理解的编程范式:模式化。但是,在引入了规范化的代码生成之后,一部份 prompt 变成了配置,以支持不同团队配置自己的 prompt:

而随着需求的进一步演进,我们又基于 import 与相似性,添加了所需要的代码上下文、技术框架等等。

诸如于:

而随着,我们进一步地迭代我们的功能,类似于如上的代码会变得更得更多复杂。除此,随着我们对于多语言的支持情况越来越好,我们不能再根据一个个语言创建一个复杂的 prompt。所以,我们需要思考一些新的范式。

AutoDev 新 prompt 范式

在结合了先前参考的 JetBrains AI Assistant 的设计思想之后,在编写自动测试生成的 prompt 里,我们重新设计了一部分的 prompt。一个新的 prompt 将由以下几部分构成:

ChatActionType。即起始的指令(instruction),如编写测试、解释代码等。

特定场景要求。基于特定场景下,如 MVC 下不同分层的编写模式。

技术栈上下文。根据不同语言、技术栈,生成的特定 prompt。

代码上下文。精炼代码信息,以注释方式生成。

指令起始提示词。即用来更明确的提示 AI,人类期待的返回格式。

由此,一个最终的 prompt 示例如下(【xxx】只用于解释):

简单来说,一个复杂的 prompt,将通过一系列的依赖注入(Intellij 扩展点)来完善上下文。

ChatActionType

即根据用户的意图而创建的指令,如解释代码、重构代码、编写测试等等:

随后,根据不同的类型,添加对应的指令要求,诸如于 MVC 分层下,代码应该如何编写、命令风格等等。

特定场景要求

再根据不同的场景要求,诸如于在编写 Java 的 Controller 测试时,我们期望以 MockMVC 作为 API 测试框架来生成,而在编写 Service 测试时,我们期望以 Mockito 作为 Mock 的框架来生成测试。于是乎,一个对应的代码便是:

随后,再根据不同的类型,如 Controller、Service 提供对应的 prompt。

技术栈上下文

相似的,为了生成这一句 prompt  ,我们需要从依赖管理工具/构建工具(如 Gradle、Package.json)中获取项目框架,并只列出关键的技术栈,以生成符合项目技术栈的代码。也就是上述 prompt 中的:  。

所以,代码实现起来便类似于:

详细见相关的代码。

代码上下文

即与当前代码相关的代码,为了降低无用 prompt 的影响,我们并没有完全采用与 GitHub Copilot 一致的  方式来构建,而是通过两种策略。

在关键场景下,如 CRUD 代码场景,通过 import + 选择代码的引用代码来呈现,并使用类 UML 的方式来减少上下文。

在其它场景下,参考(复制) JetBrains AI Assistant 的相似 chunk 实现,以作为代码的一部分。

这部分大家都比较熟悉了。唯一差异的点是,如何支持多语言,这一点可以自己去看代码中的实现。

指令起始提示词

在针对于大的新特性时,Java 程序员通常会创建一个新的 Controller 等等的方式实现;而针对于功能点优化时,我们通常会修改现有函数,或者添加新的函数。

所以,在 AutoDev 的自动测试生成里,为了让 LLM 更能理解,我们添加了一个尾提示词。

简单来说,就是让 GPT 知道接下来应该做什么,避免在过程中因为各种 prompt 失焦。

总结

由 ChatGPT 总结

AutoDev 0.8项目在持续开发中不断演进,特别关注prompt的优化与重构。通过模式化的方式重新设计了新的上下文工程体系,实现了更智能、更人性化的代码提示与生成。新的prompt范式结合了ChatActionType、特定场景要求、技术栈上下文、代码上下文和指令起始提示词等元素,使得AutoDev能够更好地理解开发者的意图,根据具体场景和技术栈生成符合期望的代码。该改进不仅提高了开发效率,降低了误差,还增强了AutoDev的智能性和实用性。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OPLQ-wVBR0tS19J5BEz9ID9A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券