从设计、编码到测试、部署,甚至是运维……软件开发的整个流程,可以通通交给AI了!
一款覆盖软件开发全生命周期的端到端AI智能助手,让分散的软件开发操作变得集成化、智能化。
这款AI助手专门针对开发领域设计,避免了通用大模型不可靠、信息不及时、领域任务不完善等问题。
这个AI助手名为DevOps-ChatBot,由蚂蚁Codefuse项目组研发,安装过程简单快速,还可通过docker完成一键部署。
DevOps-ChatBot具体都有哪些功能,表现又是如何,请看作者投稿。
解决通用大模型缺陷
随着ChatGPT等通用大模型以及各类垂直领域大模型的出现,各个领域的产品交互模式、用户信息获取模式都在逐步发生改变。
但DevOps对于事实的准确性、信息的及时性、问题的复杂性、数据的安全性要求都比较高,通用大模型生成内容不可靠、信息不及时、领域任务不完善的问题始终存在。
于是,Codefuse团队发起并开源DevOps-ChatBot端到端AI智能助手,专为软件开发的全生命周期而设计:
- 通过DevOps垂类知识库 + 知识图谱增强 + SandBox执行环境等技术来保障生成内容的准确性、及时性并让用户交互修改代码编译执行,确保答案的可靠性;
- 通过静态分析技术 + RAG检索增强生成等技术来让大模型感知上下文,实现代码库级别的组件理解、仓库项目级的代码文件修改、生成,不单单只是函数片段级的代码补齐;
- 通过完善链路级的Multi-Agent调度设计、协同知识库、代码库、工具库、沙盒环境,来让大模型可以实现DevOps领域复杂多步骤的任务;
- 通过DevOps领域专属的领域模型和评测数据构建支持私有化部署来保障数据的安全性,以及特定任务的高可用性。
Codefuse团队期望通过本项目逐步改变原有的开发运维习惯,从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,让“天下没有难做的Coder”。
五大核心模块
DevOps-ChatBot项目整体架构简图如下:
具体来说,它包含了以下9个功能模块:
- ? Multi Source Web Crawl:网络爬虫,提供对指定url爬取相关信息的能力
- ?️ Data Process:数据处理模块,提供文档加载器、数据清洗、文本切分的功能,处理和整合多源格式的数据文档
- ?️ Text Embedding Index:文档分析核心,通过文档上传即可实现文档检索
- ? Vector Database & Graph Database:向量数据库和图数据库,用于数据管理
- ? Multi-Agent Schedule Core:多智能体调度核心,通过简易配置即可构建所需交互智能体
- ? Prompt Control:Prompt控制与管理模块,定义Agent的上下文管理
- ? SandBox:沙盒模块,提供代码编译执行和动作执行的环境
- ? LLM:智能体大脑,可支持多种开源模型和LLM接口范围
- ?️ API Management:API管理组件,快速兼容相关开源组件和运维平台
除了上述功能模块的组装协同,DevOps-ChatBot项目还具有以下核心差异技术和功能点:
- 智能调度核心:体系链路完善的调度核心、多模式一键配置
- 代码整库分析:仓库级代码理解、项目文件级代码编写生成
- 文档分析增强:文档知识库结合知识图谱的检索、推理增强
- 垂类专属知识:DevOps专属知识库、垂类知识库自助一键构建
- 垂类模型兼容:DevOps领域小模型、DevOps周边平台兼容
智能调度核心
在处理复杂问题时,我们可以通过ReAct过程来选择、调用和执行工具反馈,实现多轮工具使用和多步骤执行。
但对于更复杂的场景,例如复杂代码的开发,单一LLM Agent难以胜任。
研究团队希望构建一个可扩展、易于使用的多智能体(Multi-Agent)框架,通过简易的配置即可辅助完成日常办公、数据分析、开发运维等各种通用任务。
本项目的多智能体框架汲取兼容了多个框架的优秀设计,比如metaGPT中的消息池(message pool)、autogen中的代理选择器(agent selector)等。
DevOps-ChatBot中多智能体框架的核心要素包括了以下6个方面:
- 智能体信息交互(Agent Communication):Agent之间有效的信息交流对于上下文管理以及问答效率提升至关重要。包含两种通信模式:简洁直观易于理解的链式对话、借鉴metaGPT的消息池框架;
- 标准操作过程(Standard Operation Process,SOP):定义智能体的输入和输出范围和定义SOP标识,如Tool、Planning、Coding、Answering、finished等,对LLM的生成结果进行标准化解析和处理;
- 计划与执行器(Plan and Executor):增加大模型的工具使用、智能体调度、代码的生成;
- 长-短期记忆管理(Long-short term memory Management):为了模拟人类团队协作过程,增加一个专门负责内容总结(类似于会议助理)的Agent,对长期记忆总结并提取更有效的信息进行传递;
- 人-智能体交互(Human-agent interaction):面对复杂场景,由人类介入智能体交互过程并提供反馈,使大模型能准确理解人类的意图,从而更有效地完成任务;
- Prompt控制与管理(Prompt Control and Management):负责协调和管理智能体间的Prompt交互,提升系统的复杂性控制和交互效率。输入和输出采用Markdown结构化设计,实现清晰规范的结果展示,方便阅读和解析。
实际操作过程中,用户可通过组合多个智能体来实现一个完整且复杂的项目上线场景(Dev Phase),如需求链(CEO)、产品论证链(CPO、CFO、CTO)、工程组链(选择者、开发者1~N)、部署链(开发者、部署者)等。
代码整库分析
现阶段大模型主要用于代码生成、修复以及组件理解的任务,面临以下挑战:
- 代码训练数据存在滞后性,频繁更新的开源/私有仓库存在数据信息的不及时。
- 大模型无法感知代码上下文和代码库依赖结构。
研究团队归纳了开发中遇到的主要问题,从下图中可以看到在开发的过程中,现有代码库、依赖包的理解,代码检索、元信息查询等占用的时间更长:
针对如上问题,团队通过程序分析获取代码的逻辑结构并存入知识图谱,然后通过RAG迭代查询增强获取必要的上下文信息,又结合多智能体角色扮演,实现了大模型和代码库的有机结合。
这一部分的整体框架如下:
- 代码结构分析:针对代码原文进行清洗和去重来保留住有价值的代码部分。然后通过静态分析的手段,从代码库中挖掘到代码之间的依赖图,同时借助于大模型的理解能力来针对代码进行解读,在生成的结构化信息图谱中作为重要的补充。
- 代码检索生成:提供三种不同的检索模式。Cypher检索生成主要面向用户对于代码库结构的理解(比如查询类的数量等需求),图谱检索主要面向用户的问题含有具体的类和方法名的时候来检索代码。
同时,团队也在探索通过多智能体的模式,迭代搜索代码仓库获取上下文信息,同时由其他智能体来负责阶段性提炼总结信息以及结果生成等其他任务。
文档分析增强
大模型在涉及到专业领域知识问答(比如医疗、通讯)、私有知识问答(私域数据),容易出现幻觉导致生成的答案不可信。
最直观的解决方案是将特定/私有领域的数据进行加训来增强模型知识,但训练大模型的开销巨大。
于是研究团队选择知识库的手段和检索增强生成的方式,将与问题相关的数据从知识库中检索出来,作为额外知识输入到大模型中,保障结果的可靠性&实时性,同时避免训练开销。
如何更精准的搜索检索,是本模块核心要解决的问题,为此研究团队提出了这样的架构:
整个DocSearch含三种检索链路,用户可自行选择检索链路,也可以三个都选择以获取不同的结果。
- 传统的文档向量数据库查询:文档向量数据库是当前最主流的知识库构建方法。使用Text Embedding 模型对文档进行向量化并在向量数据库中存储,结合上下文学习的成果,本项目可选择不同的检索策略抽取知识库中相应知识。
- 知识图谱查询:本项目采用Nebula图数据库对知识图谱进行存储和管理,支持导入现有知识图谱进行知识检索;也支持通过大模型自动抽取实体和关系,挖掘出数据中多种复杂关系。
- 知识图谱推理+向量数据查询:本项目也提供两者的融合搜索。先对每篇文档提取标签,同时结合用户提问建设图谱中的相关标签。最后,基于标签集合在文档向量数据库中检索出与原问题相关的文档。
知识库构建与DevOps知识库
如前文介绍,通过知识库和增强检索生成的手段可以很好的解决专有/私域知识问答的问题,接下来的核心问题是如何更好的构建知识库。
构建知识库时常常会面对以下问题:
- 不同的数据源之间格式不一致、质量参差不齐
- 如何自动化地识别和剔除错误、重复或无关紧要的数据
- 知识库构建需要依赖于专业知识
- 知识库需要定期更新,保持信息的准确性和时效性
基于此,研究团队提出了这样的整体架构:
- 爬虫(Crawler):实现数据的搜集,保障数据更新的及时性;
- 文档加载器(Loader):实现多源异构数据的导入,灵活应对多样化的数据需求;
- 清洗过滤(Filter Func):实现数据的过滤清洗,确保后续分析的准确性和高效性;
- 文本分析器(TextAnalyzer):实现对数据的智能化分析,将复杂的文本数据转化为结构化(包含知识图谱)、易于理解的信息;
- 管道(Pipeline):串联整个过程,实现了数据输入到清洗完毕输出的端到端自动化;
研究团队接下来会注重于DevOps领域数据的收集和构建,同时也期望为这条标准化的数据获取、清洗能力&智能化处理流程为更多的私有知识库构建提供帮助。
平台与模型兼容
随着大型语言模型(LLM)的出现,我们见证了问题解决方式的变革,比如智能客服系统从依赖小规模模型微调和固定规则转向更为灵活的智能体交互。
研究团队期望和周边开源的DevOps平台打通兼容,通过API的注册、管理和执行能够实现对话式交互驱动完成各种特定任务(数据查询、容器操作等)。
为了能够让本项目快速兼容相关开源组件和运维平台,我们通过python注册模板BaseToolModel类,编写Tool_name、Tool_description、ToolInputArgs、ToolOutputArgs、run等相关属性和方法即可实现工具的快速接入:
- 通过FastChat启动私有模型的推理服务或者其它Restful风格的API,如Qwen2.0、文心一言等,即可完成注册给到LLM进行调度使用
- 也可注册蚂蚁集团相关开源项目和运维平台的API,实现LLM简单对话即可完成相关运维操作
目前已封装工具清单如下:k-sgima异常检测、代码检索、文档检索、duckduckgo搜索、百度ocr识别、股信息查询、天气查询、时区查询。
未来展望
目前DevOps框架还处于初期,还有很多不完善的地方,接下来研究团队计划在如下方面做核心演进:
- 多智能体调度核心:自动化构建智能体链路
- 文档分析增强:提供多种修正方式和知识图谱检索方式
- 代码整库分析:细化代码解析提取功能,丰富代码图谱schema
- 知识库构建:构建面向不同垂直领域的知识库数据
- 平台&模型兼容:与相关开源项目和运维平台的API打通
功能展示
在这五大核心模块的驱动下,DevOps-ChatBot具有如下这些功能。
首先是文本知识库管理:
- 文本载入、文本向量化服务、知识库的向量检索服务
- 提供多个知识库的创建、管理、下载等功能
- 支持爬虫进行实时url内容爬取功能
除了文本知识库,DevOps-ChatBot还支持知识图谱、代码知识库文件的上传和管理。
此外,研发团队还封装了一些Agent场景,诸如chatPhase、docChatPhase、searchChatPhase、codeChatPhase等,可支撑知识库问答、代码问答、工具调用、代码执行等功能。
除了应用在DevOps当中,DevOps-ChatBot在其他领域也是适用的!
在多智能体的调度下,DevOps-ChatBot可以延伸出很多有意思的玩法。
以下玩法可以通过本项目的模块组装构建完成:
代码解释器(Code Interpreter)
只要上传一个数据文件,DevOps-ChatBot就会自动进行数据分析:
工具使用
例如:查询某个服务器的基本时序,传入到监控工具中,并进行分析
智能股分析(工具+代码解释器)
用户通过简单的自然语言查询,就可以获取特定股的详细信息,包括历史股价图表、市场表现和可能的市场走向。
生成测试用例
DevOps-ChatBot可以针对代码库中的某个方法生成测试用例。
玩家拯救者(知识库问答)
除了这些应用场景,DevOps-ChatBot还可以回答与具体的网络游戏相关的问题。包含英雄信息、登场时间、所属城邦等。
例如:英雄联盟的英雄关系知识图谱
One More Thing
Codefuse团队发布了一个针对DevOps领域大模型相关的开源项目DevOpsGPT,主要分为三个模块,本文中的DevOps-ChatBot就是其中之一。
除此之外,还有DevOps-Model、DevOps-ChatBot两个模块,分别为DevOps领域专属大模型和DevOps领域智能助手。
团队的目标是在DevOps领域,包含开发、测试、运维、监控等场景,真正地结合大模型来提升效率、成本节约。
团队期望相关从业者一起贡献自己的才智,来让“天下没有难做的coder”,也会定期分享对于LLM4DevOps领域的经验&尝试。