在近一年的时间里,ChatGPT 的横空出世带来整个软件开发行业的一系列新变化。不论是个人、团队,还是公司的 CXO 们,都在关注生成式 AI 带来的效率提升。
前排提示,文末有大模型AGI-优快云独家资料包哦!
-
在产品研发方面,生成式 AI(AIGC) 已经开始影响产品生命周期的各个阶段。它可以用于生成候选产品设计,优化产品设计,提升产品测试效率,改进产品质量。
-
在软件开发方面,从项目启动和规划,到系统设计、代码编写、测试和维护,生成式 AI 的应用广泛而多样。它可以帮助开发人员生成基于上下文的代码草稿,甚至生成测试代码。此外,它还有助于优化遗留框架的集成和迁移,并提供自然语言翻译功能, 以将旧的遗留代码转化为现代代码。
对于开发者来说,大型生成式语言模型带来了挑战,但也提供了宝贵的机会。
图 1 企业 AIGC 投资策略
根据我们此前分析的企业 AIGC 投资策略/难度曲线(如图 1 所示),这里也划分了三个阶段:
-
L1:学会与 LLM 相处,提升个人或团队效率。
-
L2:开发 LLM 优先应用架构,探索组织规模化落地。
-
L3:微调与训练大语言模型,深度绑定特定场景。
尽管,可能有一些企业预期生成式 AI 带来的效能提升,而进行了组织结构调整(俗称裁员)。但是,我们可以看到 AIGC 带来了更多的新机遇,它们不仅能够提高开发效率,还可以开创全新的领域和解决方案,为软件开发行业带来划时代的变革。
简单来说,开发者如果想保持自己的竞争力,我们必须掌握 LLM 能力以提升生产力,还可以加入开发 LLM 应用的大军。
L1:学会与 LLM 相处,提升个人或团队效率
在过去一年里,我们看到很多人在使用 LLM 的过程中,遇到了一些问题。但也很显然,它能在许多方面提升我们的效率,特别是在诸多繁琐的事务上,如文档、测试用例、代码等。
LLM 擅长什么,不擅长什么?
首先,我们要建立对于 LLM 的认知。不同的模型,由于训练主料和参数等诸多原因,各有自身的擅长点。如一些微信机器人里,我们使用文心一言询问实时性的资讯内容,再结合国内外的开源、闭源模型(如 ChatGPT 等)进行优化。而一旦想编写一些英文文档、材料邮件时,则会反过来优先考虑国外的模型。
其次,我们要知道 LLM 不擅长什么。LLM 是一个语言模型,它擅长的是生成文本。究其本质它又是一个概率模型,所以它需要借助其他工具来完成自身不擅长的内容(比如数学计算)。因此,我们不应该期望 LLM 能够帮助我们完成一些数学计算,而是应该期望它能根据我们的上下文,生成数学计算的公式、代码等等。
学会与 LLM 交流,提升个人效率
LLM 的交流方式,主要是通过 Prompt,而 Prompt 的构建,是一个需要不断迭代的过程。在这个过程中,要不断地尝试,以找到最适合自己的模式。比如笔者习惯的模式是:
-
角色与任务。告知 LLM 它应该是一个什么角色,需要做什么事情。
-
背景。提供一些必要的上下文,以便于有概率地、更好地匹配到答案。
-
要求。对它提一些要求,诸如返回的格式、内容等等。
-
引导词(可选的)。让 LLM 更好地理解我们的意图。
如下是笔者在开源的 IDE 插件 AutoDev 中的测试生成的 Prompt(部分):
Write unit test for following code. You are working on a project that uses Spring MVC,Spring WebFlux,JDBC to build
RESTful APIs.
You MUST use should_xx style for test method name.
When testing controller, you MUST use MockMvc and test API only.
// class BlogController {
// blogService
// + public BlogController(BlogService blogService)
// + @PostMapping("/blog") public BlogPost createBlog(CreateBlogDto blogDto)
// + @GetMapping("/blog") public List<BlogPost> getBlog()
// }
// 选中的代码信息
Start with `import` syntax here:
最后的 import 会根据用户选中的是类还是方法来决定,如果是一个方法,那么就会变为: Start with @Test syntax here: 。由于大部分的开源代码模型是基于英语的,并且用来训练的代码本身也是“英语”的,所以在效果上用英语的 Prompt 效果会更好。
精炼上下文成本,活用各类工具
笔者在经过与大量的人聊天之后,得到的一个人们使用 AIGC 工具的最大痛点:编