LLM 赋能的 BizDevOps 工具链:扩大端到端触点,内建流程与规范

在本系列的前两篇文章《LLM 赋能的研发效能》、《LLM 赋能的软件架构》里,介绍了我们在 LLM 结合 BizDevOps、软件架构的一系列试验。围绕于这两大类探索,我们构建了两个开源 LLM 工具:AI 辅助编程工具 AutoDev(IDEA 插件 )、架构治理工具 ArchGuard Co-mate。

先看看,基于我们所理解 LLM + 软件开发的 AutoDev 自动 CRUD 视频:

引子:如何利用 LLM 有限的能力解决复杂问题?

再让我们先看看几个不同的 LLM 使用场景:

特定格式文章总结

作为一个每周写文章总结的开发者,在我过往的文章【AI 总结】里发现一个事实:LLM 对我文章的总结能力是极差的,多数时候非常的鸡肋。在足够长的情况下,总结错误的可能性就更高。

然而,我的文章往往看看大标题、一级标题、二级标题就可以有初步印象。所以如果只把几级标题交给 LLM 去写,效果远远比 LLM 阅读全文要高效得多。

DSL 作为语言接口

作为一个探索过结合 LLM 应用的开发者,我想你也已经尝试过使用 DSL(领域特定语言)来作为 LLM 的 API。诸如于采用 JSON 作为 LLM API 的返回结果,又或者是类似于 Co-mate 采用的内部 DSL,还可能是类似于 LangChain 的流式 DSL 方式:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [introduce_system]
Action Input: the input to the action
...

不论是何种方式,我们都在探索基于特定数据结构的 API 返回。

流程与工序中的 LLM

我们都知道 LLM 的上下文能力(并不单指 token 限制,还有对复杂问题的理解能力)是有限的,它无法一次解决复杂问题 —— 需要先我们做好 Tasking(拆解好步骤),再交由不同的 LLM 去完成。

在工序或者流程不明确的情况下,我们可以构建类似于 AutoGPT 的方式来自动完成 task。但是,由于工序本身的不确定性,以及过程结果的准确率问题,所以结果往往是不可靠的。诸如于,假设我们的问题,需要拆解为 6 步,而LLM 生成的准确率是 80%,而 0.8^6 = 0.262144,也就是只有 1/4 的可能性会生成我们想要的。

而在软件工程领域里,在工序足够规范的情况下,可以通过抽象来解决上下文过长的问题。所以,我们在探索开发者工具时,在不考虑向量数据库能力有限的情况下,我们并不需要类似于 LangChain 工具来动态构建上下文,它会浪费我的 token(钱)。

工序指的是开发过程中的各个环节和步骤,例如需求分析、设计、编码、测试等。将工序融入AIGC触点,意味着在每个工序中都可以使用 LLM 和其他工具来辅助开发。

简单来说,人类如何解决复杂问题,那么就需要 AI 如何解决复杂问题。

要素 1:编码软件工序,扩大 AIGC 触点

224cf12b5d9c04c30cd52ea0f5c83823.png

软件开发是一个复杂的群体智力活动。正如,我们先前在 LLM 结合 BizDevOps 的探索一样,我们需要打开看已有的软件开发流程,并尽可能的细化子任务,将它们与 AI 相结合,才能看到明显的效果。

即,在过去是通过建立标准化的软件工程、开发工序,才摆脱集市的模式 ,走向了大教堂模式。而在标准化的工序/流水线,它是易于被自动化的。

标准化工序的代码化

在 AutoDev 中,为了自动化对于 CRUD 的代码编写,从抽象层面是分为五步的。即代码中的 CrudFlowAction 所描述的:

interface CrudFlowAction {fun getOrCreateStoryDetail(id: String): Stringfun updateOrCreateDtoAndEntity(storyDetail: String)fun fetchSuggestEndpoint(storyDetail: String): TargetEndpointfun updateOrCreateEndpointCode(target: TargetEndpoint, storyDetail: String)fun updateOrCreateServiceAndRepository()
}

同样是写代码,我们需要完整的模拟人的编码过程,拆到足够细的粒度:

  1. 根据需求,更新或者创建新的 DTO

  2. 根据需求,寻找合适的 Controller 作为修改入口(Endpoint)

  3. 根据需求,更新 Controller 代码或者创建新的 Controller

  4. 根据 Controller,创建或者更新对应的 Service 和 Repository 代码。

而这其中最 trick 的一点是,如果现有的工序缺少一环的话,那么就会导致生成的结果出现过多问题。诸如于,我们缺少 DTO 的生成,那么会导致 Controller 无法正确生成,并出现调用错误的 DTO 方法。

扩大工序中的 AIGC 触点

在 AIGC 结合软件开发流程中,我们可以简单划出三个重要的阶段:需求、设计、编码(含自动化测试)。为了实现上述的 AutoDev 自动化,我们需要两个关键输入:实例化需求和 API 接口设计。

  • 实例化需求是指根据具体项目的需求和规范,将需求描述转化为具体的示例、用例或者场景,以便于后续的开发和测试工作。

  • API 接口设计是指根据需求和系统设计,定义和规划系统的接口,包括接口的输入、输出、参数等信息。

为了这两个关键的输入,那么生成的代码的可用性会更高。而其前提是:有人类介入到生成结果中。即在生成实例化需求时,需要有机制来检查结果是否准确;在生成 API 接口设计时,需要有机制来检查 API 是否合理。而这个机制,可以是由人来检查,也可以是 AIGC 结合规范来检查。

而一旦,我们的 AIGC 止步于代码阶段,而没有需求阶段和设计阶段时,那么人类可能因为一天只有 24 小时,而没有给出实例化的需求,或者是 API 接口。导致 AIGC 无法进一步向下生成,所以提升的结果是非常有限的。

要素 2:围绕副驾驶设计,完善开发者体验

回到我们开头介绍的 AutoDev 视频,在起步阶段会去获取在 GitHub 上的 issue,根据 issue ID 如 #1 的内容如下:

用户故事:新建博客
作为一位博客作者
我想在InnoRev网站上新建博客
以便于我可以发布我的文章
AC 1: 新建博客成功
假设用户已经登录,并且填写了正确的博客信息
当用户点击“新建博客”按钮
于是系统创建一个新的博客,并返回博客的id
AC 2: 博客标题过长
假设用户已经登录,并且填写了超过50个字符的博客标题
当用户点击“新建博客”按钮
于是系统返回“博客标题过长”的错误信息
AC 3:...
AC 4:...
// {API Method} POST {API URI} /blogs
// CreateBlogRequest: { "title": "My First Blog", "content": "Hello world!" }
// CreateBlogResponse: { "id": 1, "title": "My First Blog", "content": "Hello world!" }

这个 comments 由用户故事和 API 设计两部分组成。有了 API 设计和 response 作为输入和输出,结果现有的代码作为上下文,这时不论是交给谁来设计代码,最后输入和输出只要是符合要求的,那么 AIGC 就是合格的。

围绕副驾驶(Copilot)设计

不论是开发人员使用的 IDE,还是产品经理、架构师、质量测试的工具,我们都需要围绕于这些研发人员的日常来设计。

在 GitHub Copilot 里,我们会习惯于它提供的 inlays 模式来提供智能的代码填充。而只有这一个核心能力是不够的,在日常的开发中,我们很多的时间是花在 debug 上的,又或者是其它的问题上,我们还需要围绕这些环节设计。

于是,诸如于 GitHub Copilot X,又或者是 JetBrains 的新版本 IDE 里都提供了一系列的 AI 能力:New chat using selection、Write documentation、Explain code、Suggest refactoring、Find potential problems 等等。

5f1e0ae32ac7916f3a0f271125a2511f.png

JetBrains AI Assistant

当然了,在 AutoDev 中我们也提供了相应的能力,并且还有更强大的辅助 CRUD 的功能。

完善开发者体验

现有的很多 LLM 模型厂商是不负责的,他们只提供模型本身的编码能力,而不提供配套的编码工具。在这里,LLM 本身就是一个鸡肋,企业依旧需要构建 IDE 插件来提升开发者的体验。

而如果我们可以自己设计 IDE 工具,那么我们应该尽可能加一些增强开发者体验的功能。诸如于,直接选择开发、运行时的错误日记来问 LLM,以快速修复这个问题。

ff86c44ad1b8b915db15b7224fefdfdf.png

AutoDev Fix issue

又或者是在 AutoDev 里,可以在编写提交信息时,让 LLM 根据代码变更来生成建议。如下是对应的 prompt:

suggest 10 commit messages based on the following diff:
commit messages should:- follow conventional commits- message format should be: <type>[scope]: <description>
examples:- fix(authentication): add password regex pattern- feat(storage): add new test cases

在我们提供了基本的规范和示例之后,它生成的提交信息是越来越标准了。

要素 3:内建开发规范,提升软件质量

众所周知,GitHub Copilot 会根据我们当前的编码习惯,来生成新的代码。这就有可能导致:因为原有的代码是不规范的,所以生成的代码也是不规范的。因此,在那篇《LLM 赋能的软件架构》里,我们提及了架构、编码规范应该内建到 AIGC 工具中。基于此,才能提高软件开发的 AIGC 质量,强化代码的可用性。

1b67bbb14b006a5b6f3a6151f6d3563b.png

在先前的《上下文工程:基于 Github Copilot 的实时能力分析与思考》,我们分享了 GitHub 上下文在实现自动填充的基本策略:

defaultPriorities.json = ["BeforeCursor","SimilarFile","ImportedFile","PathMarker","LanguageMarker"
]

由此,它只会根据用户的行为计算,根据结果带上相关的代码。相似的,我们也可以通过 getMostRecentFiles 来计算相关文件,再通过 tokenLevelJaccardSimilarity,最后生成 SimilarChunkContext 。

而为了写出的代码,也是规范的,我们需要加上一些特定的规则,如针对于业务系统编程时,就可以:

when {isController -> {val spec = PromptConfig.load().spec["controller"]additionContext += mvcContextService.controllerPrompt(file)}isService -> {val spec = PromptConfig.load().spec["service"]additionContext += mvcContextService.servicePrompt(file)}
}

而规范本身应该是可配置的:

{"spec": {"controller": "- 在 Controller 中使用 BeanUtils.copyProperties 进行 DTO 转换 Entity\n- 禁止使用 Autowired\n-使用 Swagger Annotation 表明 API 含义\n-Controller 方法应该捕获并处理业务异常,不应该抛出系统异常。","service": "- Service 层应该使用构造函数注入或者 setter 注入,不要使用 @Autowired 注解注入。","entity": "- Entity 类应该使用 JPA 注解进行数据库映射\n- 实体类名应该与对应的数据库表名相同。实体类应该使用注解标记主键和表名,例如:@Id、@GeneratedValue、@Table 等。","repository": "- Repository 接口应该继承 JpaRepository 接口,以获得基本的 CRUD 操作","ddl": "-  字段应该使用 NOT NULL 约束,确保数据的完整性"}
}

不同的团队根据其团队的业务场景和需求,去稍微修改自己的规范配置。

小结

由 ChatGPT 总结:

LLM 赋能的研发工具通过编码软件工序、完善开发者体验和内建开发规范,提高了软件开发的效率和质量。它们涵盖端到端链路,以自动化和智能化的方式辅助开发人员完成任务。通过细化工序、提供智能代码填充和提示,以及内置规范,这些工具使开发人员能够更高效地编写代码,并确保生成的代码符合规范。LLM赋能的研发工具将人工智能与软件开发流程结合,为开发者提供更好的开发体验和更高质量的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18781.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zilliz @ GOTC:大模型的记忆体——向量数据库的现在与未来

近日&#xff0c;2023 全球开源技术峰会&#xff08;Global Open-source Technology Conference&#xff0c;以下简称 GOTC 2023 &#xff09; 在上海张江科学会堂召开&#xff0c;Zilliz 创始人兼首席执行官星爵、Zilliz 合伙人兼技术总监栾小凡以及 Zilliz 开发者关系及市场运…

大模型更需要大数据,星环科技的跃升之路

针对AI大模型&#xff0c;又一家中国公司果断出手了&#xff01; 在5月26日上海举行的“向星力未来数据技术峰会”&#xff08;FDTC&#xff09;上&#xff0c;星环科技创始人、CEO孙元浩亲自宣布了业界首创的金融大模型“无涯”、大数据分析大模型SoLar“求索”等行业大模型的…

智能仿写软件-智能伪原创改写软件

智能仿写工具&#xff1a;营销创意的必备利器 在当今快节奏和不断发展的商业环境中&#xff0c;企业营销人员需要在短时间内产生大量有创意和高质量的内容。因此&#xff0c;智能仿写工具作为营销策略的一种创新方法而出现&#xff0c;可以帮助企业的写作团队更快速地生成文章…

从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践

本文将为大家分享腾讯音乐内容库数据平台的数据架构演进历程与实践思考&#xff0c;希望所有读者从文章中有所启发。 作者 | 腾讯音乐内容库数据平台 张俊、代凯 责编 | 王子彧 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 腾讯音乐内容库数据平台旨在为…

【企业架构设计实战】6 数据架构

什么是数据架构? 数据架构将业务需求转化为数据和系统需求,并寻求管理数据及其在企业中的流动。 数据架构定义 根据 The Open Group Architecture Framework (TOGAF),数据架构描述了组织的逻辑和物理数据资产和数据管理资源的结构。它是企业架构的一个分支,包括管理组织中数…

数据平台之数仓模型设计

文章目录 前言一、维度建模基本概念1.1 事实表1.2 维度表 二、维度建模三种模式2.1 星型模型2.2 雪花模式2.3 星座模式 三、ChatGPT代替Sql Boy3.1 简单案例3.2 复杂案例 四、总结 前言 看到几篇不错的文章&#xff0c;自己总结合并了分享给小伙伴 金博尔和恩门共同开创的数仓…

数据迁移工具,用这8种就够了!

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…

Kyligence Zen 简直就是一站式指标平台的天花板

一、Kyligence Zen是什么&#xff1f; 1、Kyligence Zen是做啥的&#xff1f; Kyligence Zen是一款指标分析和管理的工具&#xff0c;是基于 Kyligence 核心 OLAP 能力打造&#xff0c;Kyligence Zen 提供集业务模型、指标管理、指标加工、数据服务于一体的一站式服务&#x…

一文讲清数据集市、数据湖、数据网格、数据编织

本文介绍数据仓库、数据集市、数据湖、数据网格和数据编织相关概念和使用案例&#xff0c;帮助你选择并利用好数据的力量来完成明智的决策。 微信搜索关注《Java学研大本营》 在今天的数字时代&#xff0c;企业每天都在应对来自四面八方的海量数据。随着对强大的数据管理和分析…

朱金宝:数据治理产品发展趋势及Datablau产品最新动态

在刚刚结束的2023数据治理新实践峰会上&#xff0c;Datablau数语科技联合创始人&CTO朱金宝先生分享了对数据治理产品发展趋势的深度思考及Datablau新产品预览&#xff0c;并在现场发布了两款最新工具。 以下是朱金宝先生的演讲实录&#xff0c;为了方便阅读&#xff0c;小…

AIGC文生图:stable-diffusion-webui部署及使用

1 stable-diffusion-webui介绍 Stable Diffusion Web UI 是一个基于 Stable Diffusion 的基础应用&#xff0c;利用 gradio 模块搭建出交互程序&#xff0c;可以在低代码 GUI 中立即访问 Stable Diffusion Stable Diffusion 是一个画像生成 AI&#xff0c;能够模拟和重建几乎…

Elastic 发布 Elasticsearch Relevance Engine™ — 为 AI 革命提供高级搜索能力

作者&#xff1a;Matt Riley 今天我们将向大家介绍 Elasticsearch Relevance Engine™&#xff08;ESRE™&#xff09;&#xff0c;这是一种创建高度相关的 AI 搜索应用程序的新功能。ESRE 建立在 Elastic 在搜索领域的领导地位以及超过两年的机器学习研究和开发基础之上。Elas…

人工智能轨道交通行业周刊-第45期(2023.5.15-5.21)

本期关键词&#xff1a;动车洗澡、热备列车、火车司机室、无缝线路、图像分割、自动标注 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道…

利用ChatGPT完成深度学习分类任务

利用ChatGPT完成深度学习分类任务 一、任务背景 ​ 关于早期诊断NEC&#xff08;坏死性小肠结肠炎&#xff08;Necrotizing enterocolitis&#xff0c;NEC&#xff09;&#xff09;和及时干预一直是临床关注的重点和难点问题。现在手上有相关的临床数据集&#xff0c;我们想要…

chatgpt赋能python:如何使用Python绕过反爬虫机制提高SEO排名

如何使用Python绕过反爬虫机制提高SEO排名 在现代互联网时代&#xff0c;网站把自己的内容都用高墙围了起来&#xff0c;就是防止别人复制内容或者爬虫程序对网站造成损害。但是&#xff0c; SEO优化却需要搜索引擎对网站爬取&#xff0c;并且通过搜索引擎渠道引入流量&#x…

识别「ChatGPT造假」,效果超越OpenAI,AI生成检测器来了!

Datawhale干货 AI生成检测器&#xff0c;编辑&#xff1a;机器之心 AI 造假的成功率很高&#xff0c;前几天「10 分钟骗 430万」还上了热搜。在最热门的大语言模型上&#xff0c;研究人员最近探索了一种识别方法。 随着生成式大模型的不断进步&#xff0c;它们生成的语料正逐步…

chatgpt赋能python:Python如何绕过检测封号的技巧

Python如何绕过检测封号的技巧 Python作为目前最受欢迎的编程语言之一&#xff0c;广泛应用于各种领域。在SEO领域中&#xff0c;Python也发挥着重要的作用&#xff0c;但是在不当的使用下&#xff0c;可能会被搜索引擎检测到并封号。在本文中&#xff0c;我们将介绍几种Pytho…

无际Ai官网ChatGPT4和3.5的真实功能测评

生活是我们每个人都必须面对的现实。它涵盖了各种方面&#xff0c;包括我们的工作、家庭、朋友和爱好等等。在这个充满挑战和机遇的世界中&#xff0c;我们必须学会如何平衡自己的需求和责任&#xff0c;并适应不断变化的环境。无论你处于生命的哪个阶段&#xff0c;生活都是一…

2022机器学习阶段性复盘

2022机器学习阶段性复盘 文章目录 2022机器学习阶段性复盘一、业务洞察1.1 业务调研1.2 采样策略 一、特征工程1.1 特征筛选之iv_psi1.2 特征筛选之启发式搜索1.3 时间特征的曲率变换1.4 多重共线性特征的剔除1.5 什么样的特征适合树模型或LR模型1.5 什么样的特征是稳定可泛化特…

音乐推荐算法+ChatGPT歌词创作

不知道有没有小伙伴喜欢这个项目&#xff0c;今天刚完成&#xff0c;哈哈哈。 体验地&#xff1a;http://make.forwardforever.top:614 账号&#xff1a;root 密码&#xff1a;123 账号&#xff1a;root2 密码&#xff1a;456 主页&#xff1a; 曲库: 评论功能&#xff1a; …