开源AI研发提效方案UnitMesh总结

代码为聘礼 2024-02-20 03:46:26

回顾 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:其中部分工具成熟度并不高,如果大家有兴趣,欢迎一起来共建。

Unit Mesh 架构的初衷

基于生成式 AI 的能力,我们设计了 Unit Mesh 构架,并此为探索未来的软件架构。在 Unit Mesh 架构下,提示词(prompt)即可执行单元:

用户只需要说一句需求,就会由 AI Agent 将代码上下文与大模型通信,将需求转换为代码单元(Unit)

将代码单元交由代码编译器编译,转变为可执行的单元,如 Web API、前端组件等。

AI Agent 来决定此个单元应该如何部署,需要与哪些组件相结合,向最终用户提供服务。

而受限于现有模型的能力限制,并不能很好地实现如此的架构方式。于是,我们优先探索更好适配现有的软件架构。

Unit Mesh 的代码运行时:Unit Runtime

在 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 架构的代码,所以我们将目标转向了微调。

Unit Mesh 的微调试验:Unit Minions

4 月,我和我的同事 @tianweiliu 创建了 Unit Minions 项目,用来介绍如何训练 LoRA,诸如于:用户故事生成、测试代码生成、代码辅助生成、文本转 SQL、文本生成代码等。随后,我们重构了微调过程中的数据工程相关代码,诞生了 DevTi 项目。

由于,微调需要与各类工具紧密结合,所以我开始思考构建 IDE 的必要性。另外,由于 AI 能力的限制,我们不再执着于 AI Agent 的设计。

私有化 AI 编码:AutoDev + Unit Eval

如果你想构建基于开源大语言模型的 AI 编码,那么你可以使用 Unit Mesh 提供的国内领先的 IDE 插件 AutoDev,配合对应的代码数据集构建工具 Unit Eval 来完成。

自定义 AI 能力 IDE 插件:AutoDev

AutoDev 的设计初衷是一个结合需求系统与 IDE 作为上下文的编码 AI Agent,即只需要说一下你的需求,便可以自动完成 CRUD 的所有编码过程。随后,发现即使我们给了 GPT 再好的上下文,编码了 CRUD 的分析过程,GPT 也不能很好完成任务。于是,AutoDev 转为辅助作为一个 AI 编码工具,提供全面的 AI 辅助能力。

AutoDev 基于静态代码分析构建上下文机制,可以比其它使用相近代码算法的插件,生成更准确、更符合期望的业务代码。而除了编码之外,也提供生成文档、编写单元测试、解释代码、生成测试数据等基础能力。

AutoDev 还提供了强大的定制能力:接入自定义 AI 模型、自定义 Action、 自定义规范、团队 AI 等功能。

高质量微调代码生成与评估:Unit Eval

Unit Eval 是为 AutoDev 所构建的微调数据生成与结果评估工具。即 AutoDev 的上下文生成逻辑,会与 Unit Eval 保持一致:

相关生成数据生成。即根据类的 import 和函数的输入、输出,将相关的代码信息,作为 prompt 的一部分。

相似代码数据生成。即根据函数的路径,计算可能相关的文件(CRUD 不要太明显),再结合光标前的代码计算可能相似的代码。

高质量数据是我们设计 Unit Eval 的主要关注点,我们结合了架构治理、代码治理的经验,将开源架构治理工具 ArchGuard 的各种规则检查结合进来。

在 Unit Eval,我们将数据生成与评估相绑定,你可以从一系列项目中执行代码生成,再放到另外一个真实项目中运行。目前结果评估比较简单,依赖于可编译性,如是否可通过静态分析。

Copilot 型工具:Co-mate 和 Studio B3

在现有的研发工具链里,我们已经有不同的工具,它们只需要结合 AI 来增强这个过程。于是乎,我们探索如何构建适合不同角色的 Copilot 型工具,以及如何增强现有的工具,即更全面的 AI 编辑器。

架构师 Copilot:ArchGuard Co-mate(探索性)

ArchGuard 由 Thoughtworks 发起、开源的架构治理平台,旨在辅助开发人员、架构师分析系统间的远程服务依赖情况、数据库依赖、API 依赖等。并根据一些架构治理模型,对现有系统提出改进建议。

ArchGuard Co-mate 便是结合我们在架构治理的经验,探索生成式 AI 作为架构师助手的可能性。与此同时,围绕生成式 AI 来探索架构的未来,诸如于本地语义分析、动态上下文收集 API、架构规范检查等。

在 Co-mate 里,采用 Kotlin 设计一系列围绕于架构、治理等 DSL,传统分析工具生成 DSL 的一部分内容 ,生成式 AI 生成难以静态分析部分,再进行总结。并结合生成式 AI 来生成适合不同项目的 DSL,以更轻松的方式进行定制化架构治理。

AI 编辑器:Studio B3 - 需求与测试用例写作

Studio B3 的设计初衷是将类似于 AutoDev 的全周期 AI 赋能带到写作领域。即在分析写作过程,在不同阶段为用户提供无缝的 AI 原生 UI 交互体验,可以通过工具栏、快捷键等五种方式触发 AI 能力。并在底层提供可自定义的 prompt 能力,方便于用户自己根据自身模型优化编辑器。

虽然 B3 编辑器模块还没有完全从 Studio B3 抽离出来,但是你可以参考其设计思想,构建自己适用于软件需求、测试用例写作的工具。

在线试玩:https://editor.unitmesh.cc/ 。

Integrator 型工具:CoUnit 和 DevOps Genius

为了更好的利用生成式 AI 提升效能,我们的第二个阶段应该是:让生成式 AI 辅助完成协同工作,诸如于:构建多场景知识问答,降低知识检索成本、设计团队 API,打造智能助理。

团队 API 工具:CoUnit(探索性)

CoUnit,一个基于 LLM 的虚拟团队接口人(Team API),通过向量化文档、知识库、SDK和 API 等,结合 LLM 智能化团队间对接与协作。

简单来说,CoUnit 将现有的团队、组织内的研发资产向量化,并以 API 的方式暴露出去。你可以在 AutoDev 中集成它,完成诸如于结合上下文和内部 API 生成更适合于开发者场景的代码。

研发过程工具:DevOps Genius(探索性)

DevOpsGenius 起初是为了探索在如何 IDE 与 DevOps 平台进行 CodeReview 的协同。结合先进的代码分析和静态分析技术(ArchGuard),自动检测潜在的问题、错误和不规范的代码风格,并提供有针对性的建议和改进意见。

后来,我们尝试去结合更多的 DevOps 实践,然后就没有然后了。

基础设施:Chocolate Factory 和 EdgeInfer

在构建上述的一系列 AI 辅助应用开发时,我们发现有部分基础设施是重复的。于是,我们提取了两个 SDK,面向普通应用的 JVM SDK:Chocolate Factory 和面向移动设备、原生桌面应用的:EdgeInfer 。

JVM SDK:Chocolate Factory

Chocolate Factory 提供的不仅仅是一个 SDK,更多的是沉淀我们的经验,模式、示例、实践指南。Chocolate Factory 简单来说是一个 JVM 版本的 LangChain,提供了适用于业务场景的模块化能力,并内置了一系列软件研发的基础能力:代码拆分、代码分析、代码解释器等等。

在 UnitEval 中,使用了其提供的代码分析、PromptScript 测试能力。

在 AutoDev 中,使用了其提供的 Git 提交信息分析能力。

在 DevOpsGenius 中,使用了其提供的提交 diff 、代码拆分等能力。

通过持续地内建研发基础设施分析能力,来加速生成式 AI 的应用。

跨平台 SDK:EdgeInfer(探索性)

EdgeInfer 是基于我们对 2024 展望所构建的 SDK,主要是由交互体验变革引发的思考:更强的本地 AI 运行能力 + **更小的模型体积。它会引发起智能化端侧的浮现,诸如于连接 “智障设备” 的智能中枢。

于是乎,我们使用 Rust 语言 + 跨平台技术构建了 EdgeInfer,并在 Android 和桌面应用上编写了对应的 demo 来探索可能性。

总结

人生苦短,欢迎一起来挖坑通渠。

0 阅读:4

代码为聘礼

简介:感谢大家的关注