回顾 2023 年,可以明显地看到生成式 AI 带给软件工程带来的新思考,每个组织也在探索结合生成式 AI 的可能性。Unit Mesh (https://github.com/unit-mesh) GitHub 组织正是基于我与我的同事的研究,所构建的一系列围绕于生成式 AI 应用于软件研发的开源项目。
在这篇文章里,我们将总结 Unit Mesh 的一系列项目,从国内最早开源的微调 Llama、 ChatGLM 用于研发流程的 Unit Minions 项目、国内(或许在全球也是)功能最丰富的 AI 辅助 IDE 插件 AutoDev 、再到年终的最质量代码数据集构建工具 UnitEval 。探索性的围绕于不同角色的 Copilot 型工具的设计,以及围绕于这些工具的底层基础 SDK 。
PS:其中部分工具成熟度并不高,如果大家有兴趣,欢迎一起来共建。
基于生成式 AI 的能力,我们设计了 Unit Mesh 构架,并此为探索未来的软件架构。在 Unit Mesh 架构下,提示词(prompt)即可执行单元:
用户只需要说一句需求,就会由 AI Agent 将代码上下文与大模型通信,将需求转换为代码单元(Unit)
将代码单元交由代码编译器编译,转变为可执行的单元,如 Web API、前端组件等。
AI Agent 来决定此个单元应该如何部署,需要与哪些组件相结合,向最终用户提供服务。
而受限于现有模型的能力限制,并不能很好地实现如此的架构方式。于是,我们优先探索更好适配现有的软件架构。
在 Unit Mesh 的后端设计是基于 Serverless + Kotlin DSL 生成的,如下的 hello, world 所示:
@RestController
object Pages {
@GetMapping("/")
fun main() = "Hello World!"
}
3 月,为了运行上述的后端代码以及前端 React 部分,我和卷王 @CGQAQ 构建了 Unit Runtime 作为代码运行时,用于一键启动 LLM 的代码,并实时交互,以快速构建和测试 AI 代码。由于 ChatGPT 经常不会按预期,生成适用于 Unit Mesh 架构的代码,所以我们将目标转向了微调。
4 月,我和我的同事 @tianweiliu 创建了 Unit Minions 项目,用来介绍如何训练 LoRA,诸如于:用户故事生成、测试代码生成、代码辅助生成、文本转 SQL、文本生成代码等。随后,我们重构了微调过程中的数据工程相关代码,诞生了 DevTi 项目。
由于,微调需要与各类工具紧密结合,所以我开始思考构建 IDE 的必要性。另外,由于 AI 能力的限制,我们不再执着于 AI Agent 的设计。
如果你想构建基于开源大语言模型的 AI 编码,那么你可以使用 Unit Mesh 提供的国内领先的 IDE 插件 AutoDev,配合对应的代码数据集构建工具 Unit Eval 来完成。
AutoDev 的设计初衷是一个结合需求系统与 IDE 作为上下文的编码 AI Agent,即只需要说一下你的需求,便可以自动完成 CRUD 的所有编码过程。随后,发现即使我们给了 GPT 再好的上下文,编码了 CRUD 的分析过程,GPT 也不能很好完成任务。于是,AutoDev 转为辅助作为一个 AI 编码工具,提供全面的 AI 辅助能力。
AutoDev 基于静态代码分析构建上下文机制,可以比其它使用相近代码算法的插件,生成更准确、更符合期望的业务代码。而除了编码之外,也提供生成文档、编写单元测试、解释代码、生成测试数据等基础能力。
AutoDev 还提供了强大的定制能力:接入自定义 AI 模型、自定义 Action、 自定义规范、团队 AI 等功能。
Unit Eval 是为 AutoDev 所构建的微调数据生成与结果评估工具。即 AutoDev 的上下文生成逻辑,会与 Unit Eval 保持一致:
相关生成数据生成。即根据类的 import 和函数的输入、输出,将相关的代码信息,作为 prompt 的一部分。
相似代码数据生成。即根据函数的路径,计算可能相关的文件(CRUD 不要太明显),再结合光标前的代码计算可能相似的代码。
高质量数据是我们设计 Unit Eval 的主要关注点,我们结合了架构治理、代码治理的经验,将开源架构治理工具 ArchGuard 的各种规则检查结合进来。
在 Unit Eval,我们将数据生成与评估相绑定,你可以从一系列项目中执行代码生成,再放到另外一个真实项目中运行。目前结果评估比较简单,依赖于可编译性,如是否可通过静态分析。
在现有的研发工具链里,我们已经有不同的工具,它们只需要结合 AI 来增强这个过程。于是乎,我们探索如何构建适合不同角色的 Copilot 型工具,以及如何增强现有的工具,即更全面的 AI 编辑器。
ArchGuard 由 Thoughtworks 发起、开源的架构治理平台,旨在辅助开发人员、架构师分析系统间的远程服务依赖情况、数据库依赖、API 依赖等。并根据一些架构治理模型,对现有系统提出改进建议。
ArchGuard Co-mate 便是结合我们在架构治理的经验,探索生成式 AI 作为架构师助手的可能性。与此同时,围绕生成式 AI 来探索架构的未来,诸如于本地语义分析、动态上下文收集 API、架构规范检查等。
在 Co-mate 里,采用 Kotlin 设计一系列围绕于架构、治理等 DSL,传统分析工具生成 DSL 的一部分内容 ,生成式 AI 生成难以静态分析部分,再进行总结。并结合生成式 AI 来生成适合不同项目的 DSL,以更轻松的方式进行定制化架构治理。
Studio B3 的设计初衷是将类似于 AutoDev 的全周期 AI 赋能带到写作领域。即在分析写作过程,在不同阶段为用户提供无缝的 AI 原生 UI 交互体验,可以通过工具栏、快捷键等五种方式触发 AI 能力。并在底层提供可自定义的 prompt 能力,方便于用户自己根据自身模型优化编辑器。
虽然 B3 编辑器模块还没有完全从 Studio B3 抽离出来,但是你可以参考其设计思想,构建自己适用于软件需求、测试用例写作的工具。
在线试玩:https://editor.unitmesh.cc/ 。
为了更好的利用生成式 AI 提升效能,我们的第二个阶段应该是:让生成式 AI 辅助完成协同工作,诸如于:构建多场景知识问答,降低知识检索成本、设计团队 API,打造智能助理。
CoUnit,一个基于 LLM 的虚拟团队接口人(Team API),通过向量化文档、知识库、SDK和 API 等,结合 LLM 智能化团队间对接与协作。
简单来说,CoUnit 将现有的团队、组织内的研发资产向量化,并以 API 的方式暴露出去。你可以在 AutoDev 中集成它,完成诸如于结合上下文和内部 API 生成更适合于开发者场景的代码。
DevOpsGenius 起初是为了探索在如何 IDE 与 DevOps 平台进行 CodeReview 的协同。结合先进的代码分析和静态分析技术(ArchGuard),自动检测潜在的问题、错误和不规范的代码风格,并提供有针对性的建议和改进意见。
后来,我们尝试去结合更多的 DevOps 实践,然后就没有然后了。
在构建上述的一系列 AI 辅助应用开发时,我们发现有部分基础设施是重复的。于是,我们提取了两个 SDK,面向普通应用的 JVM SDK:Chocolate Factory 和面向移动设备、原生桌面应用的:EdgeInfer 。
Chocolate Factory 提供的不仅仅是一个 SDK,更多的是沉淀我们的经验,模式、示例、实践指南。Chocolate Factory 简单来说是一个 JVM 版本的 LangChain,提供了适用于业务场景的模块化能力,并内置了一系列软件研发的基础能力:代码拆分、代码分析、代码解释器等等。
在 UnitEval 中,使用了其提供的代码分析、PromptScript 测试能力。
在 AutoDev 中,使用了其提供的 Git 提交信息分析能力。
在 DevOpsGenius 中,使用了其提供的提交 diff 、代码拆分等能力。
通过持续地内建研发基础设施分析能力,来加速生成式 AI 的应用。
EdgeInfer 是基于我们对 2024 展望所构建的 SDK,主要是由交互体验变革引发的思考:更强的本地 AI 运行能力 + **更小的模型体积。它会引发起智能化端侧的浮现,诸如于连接 “智障设备” 的智能中枢。
于是乎,我们使用 Rust 语言 + 跨平台技术构建了 EdgeInfer,并在 Android 和桌面应用上编写了对应的 demo 来探索可能性。
人生苦短,欢迎一起来挖坑通渠。