随着ChatGPT等通用大模型以及各类垂直领域大模型的出现,各个领域的产品交互模式、用户信息获取模式都在逐步发生改变。但通用大模型自身存在的生成内容不可靠、信息内容不及时、领域任务不完善的问题始终存在,面向DevOps这个对于事实的准确性、信息的及时性、问题的复杂性、数据的安全性要求都比较高的领域,大模型该如何赋能?为此,我们发起并开源DevOps-ChatBot端到端AI智能助手,专为软件开发的全生命周期而设计:通过DevOps垂类知识库 + 知识图谱增强 + SandBox执行环境等技术来保障生成内容的准确性、及时性并让用户交互修改代码编译执行,确保答案的可靠性;通过静态分析技术 + RAG检索增强生成等技术来让大模型感知上下文,实现代码库级别的组件理解、仓库项目级的代码文件修改、生成,不单单只是函数片段级的代码补齐;通过完善链路级的Multi-Agent调度设计、协同知识库、代码库、工具库、沙盒环境,来让大模型可以实现DevOps领域复杂多步骤的任务;并且通过DevOps领域专属的领域模型和评测数据构建支持私有化部署来保障数据的安全性,以及特定任务的高可用性。
我们期望通过本项目逐步改变原有的开发运维习惯,从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,让“天下没有难做的Coder”。
GitHub项目地址:https://github.com/codefuse-ai/codefuse-chatbot
Arxiv论文地址:ICSE投稿中,敬请期待,稍后放出
项目整体架构简图如下:
在上述功能模块的组装协同下,本项目核心差异技术、功能点:
在处理复杂问题时,我们可以通过ReAct过程来选择、调用和执行工具反馈,同时实现多轮工具使用和多步骤执行。但对于更复杂的场景,例如复杂代码的开发,单一LLM Agent难以胜任。因此,社区开始发展出多Agent的组合玩法,比如专注于开发领域的metaGPT、GPT-Engineer、chatDev等项目,以及专注于自动化构建Agent和Agent对话的AutoGen项目。
经过对这些框架的深入分析,发现大多数Agent框架的整体耦合度较高,其易用性和可扩展性较差。在预设场景中实现特定场景,但想要进行场景扩展却困难重重。因此,我们希望构建一个可扩展、易于使用的Multi-Agent框架,通过简易的配置即可辅助完成日常办公、数据分析、开发运维等各种通用任务。
* 本项目的Mutli-Agent框架汲取兼容了多个框架的优秀设计,比如metaGPT中的消息池(message pool)、autogen中的代理选择器(agent selector)等。
以下将从6个方面介绍Multi Agent框架核心要素:
总体来说,这6个核心要素共同组成Multi Agent框架,确保Agent之间的协作更加紧密和高效,同时也能够适应更复杂的任务需求和更多样的交互场景。通过组合多个Agent链路来实现一个完整且复杂的项目上线场景(Dev Phase),如Demand Chain(CEO)、Product Arguement Chain(CPO、CFO、CTO)、Engineer Group Chain(Selector、Developer1~N)、QA Engineer Chain(Developer、Tester)、Deploy Chain(Developer、Deploer)。
现阶段LLM面向开发的主要使用在代码的生成、修复以及组件的理解任务上,通过各类网络文档类&代码类数据(计算机书籍、计算机论坛等)的收集、然后针对模型进行加训以及特定代码类任务微调来实现,以这条思路构建了各种开源/闭源的通用LLM、专有LLM。但这类大模型面临的一个挑战就是训练数据往往只包含某个时间节点之前的公开代码数据,针对频繁更新的开源/私有仓库存在数据信息的不及时以及LLM天然存在的幻觉,同时LLM往往无法感知代码仓库的上下文以及天然的代码库依赖结构,导致生成的结果往往不符合用户的要求。
我们首先通过对于周边开发工程师的调研,归纳开发中遇到的主要问题如下图所示,可以看到在开发的过程中,除开代码逻辑的开发(这往往占用的耗时并不长),现有代码库、依赖包的理解,代码检索、元信息查询等占用的时间也许更长(这里面没有列举需求的理解以及系分文档等的编写,这块也会作为接下来演进的重点):
针对如上问题,我们期望通过结合程序分析获取代码的逻辑结构并存入知识图谱,在此基础上通过RAG迭代查询增强获取必要的上下文信息,并结合multi-agent分角色扮演,来实现大模型和代码库的有机结合,做到让大模型真正成为面向实际业务使用的万能助手,而不仅仅是刷各种benchmark的工具。整体框架如下:
核心模块介绍:
大模型具备强大的生成能力,但在涉及到专业领域知识问答(比如医疗、通讯等),以及私有知识问答(私域数据),容易出现幻觉导致生成的答案不可信。最直观的解决方案是通过将特定/私有领域的数据加训来增强模型相关的知识,但训练大模型开销巨大,且生成结果不稳定&幻觉仍然比较严重,第二条路是结合搜索(比如Bing的做法),但面向海量的私域文档以及领域的限定,单独构建搜索引擎仍然不是一条靠谱的路径。我们最终选择知识库外挂的手段,通过检索增强生成的方式,将与问题相关的数据从数据库中检索出来,作为额外知识输入到大模型中,保障结果的可靠性&实时性,同时避免训练开销。
如果更精准的搜索检索是本模块核心要解决的问题?为此,我们整体的架构图如下:
整个 DocSearch 含有三种检索链路
1. 传统的文档向量数据库查询
文档向量数据库是当前最主流的知识库构建方法。其特点在于每一个原子单位是自然语言文档。在构建知识库时,需结合Text Embedding 模型对文档进行Embedding并在向量数据库中存储。本项目采用私有化Embedding模型,支持其它私有部署和隐私相关场景,并提供其它专有模型接入和选择。在此之后,则需根据不同情况,选择不同的检索策略将知识库中相应的知识抽取出来,后续本项目将结合学术界上下文学习(in-context learning)的最新成果,提供多种数据库检索方式,包括Similarity、Random 、Auto-CoT、Complex-CoT、Meta-CoT等。
2. 知识图谱查询
知识图谱(Knowledge Graph)主要是用于描述现实世界中的实体、概念及事件间的客观关系,擅长处理事物之间的多种复杂关系网络,在搜索/问答/大数据分析中具有重要作用。本项目采用Nebula图数据库对知识图谱进行存储和管理,支持导入现有知识图谱进行进行知识检索。当只有文本数据时,也支持通过大模型的方式自动抽取实体和关系来生成知识图谱,从而挖掘出数据中多种复杂关系。同时我们在实际实验中观测到,在不少场景中,相比纯文本的搜索生成,通过图谱可以获得更精准的问答效果。
3. 知识图谱推理 + 向量数据查询
当用户同时存在文档数据库和知识图谱数据时,本项目也提供两者的融合搜索。具体的,对每篇文档提取tag,然后根据用户的提问,知识图谱上搜索相关的tag同时基于其领域得到扩充到tag集合。最后,基于扩充版本的tag集合以及文档向量数据库中的相似度距离,检索出与原问题相关的文档。这种结合能有效的解决很多“行话”可能只有特定专业领域的人才熟悉,而大模型由于没有这个知识背景而检索出错误的结果,后续我们也会为devOps领域来构建专门的“行话图谱”
用户可以选择自己想要采用的链路,也可以三个都进行选择来获取三种不同的结果。
如2.3章节的介绍,通过知识库外挂的手段可以很好的解决专有/私域知识问答的问题,构建智能助手/智能客服等业务应用。同时,我们介绍了增强检索生成的方案。接下来的核心问题是如何更好的构建知识库。
直接梳理海量数据源并构建知识库时常常会面对以下问题:
基于此,我们的整体架构如下:1)通过Crawler模块实数据的搜集;2)通过Loader模块实现多源异构数据的导入;3)Filter Func模块实现数据的过滤清洗;4)TextAnalyzer模块实现对数据的智能化分析;5)Pipeline模块串联整个过程。整体的架构图如下所示:
模块具体功能为
我们接下来会注重于DevOps领域数据的收集和构建,同时这条标准化的数据获取&清洗能力&智能化处理也期望为更多的私有知识库构建提供帮助。
随着大型语言模型(LLM)的出现,我们不仅见证了问题解决方式的变革,比如智能客服系统从依赖小规模模型微调和固定规则转向更为灵活的智能体交互,而且产品交互模式也正在经历重大的转变。我们期望和周边开源的DevOps平台打通兼容,通过API的注册、管理和执行能够实现对话式交互,驱动完成各种特定任务(数据查询、容器操作等)。
同时我们也该意识到大模型目前并非适用于所有领域。在面对特定的领域任务,尤其是数值计算类任务(如异常检测/智能告警、组合优化/容器调度等),小型模型仍然占有独特的优势。它们在效果、计算效率和资源消耗方面经常领先于大型模型。因此,我们也通过将这些专门的模型以API的形式进行注册、管理和执行,来实现它们的集成和应用。为了能够让本项目快速兼容相关开源组件和运维平台,我们通过python注册模板可快速接入各种Restful API的注册和执行,也可以转换为Swagger结构。
通过继承`BaseToolModel`类,可编写相关的tool_name、tool_description、ToolInputArgs、ToolOutputArgs、run等相关属性和方法即可实现工具的快速注册。
目前已封装工具清单如下:k-sgima异常检测、代码检索、文档检索、duckduckgo搜索、百度ocr识别、股票信息查询、天气查询、时区查询。
ChatGPT面向公众开放将近一年的时间里,涌现了许多优秀的开源与闭源模型及框架。从今年4月份开始,我们团队便深入探索DevOps领域大模型和业务落地,这个过程中我们经历了不少挑战。从最初搜集内部文档、代码以及网络开源数据进行模型的加强训练,到现阶段模型与框架的紧密结合。我们认为大模型在DevOps领域最可靠的落地方式或者说在真正意义上替代人工完成任务,还需结合面向知识库&代码库的RAG(增强事实问答和逻辑推理的能力),解决特定领域任务的专有能力(领域任务微调增强)以及逻辑推理&语义理解的通用能力。这正是我们构建ChatBot的初衷,我们通过完善链路级的Multi-Agent调度设计,协同知识库、代码库、工具库、沙盒环境,来让大模型能够在DevOps领域处理复杂的多步骤任务。
目前我们开源的DevOps框架还处于初期,还有很多不完善的地方,接下来我们会在如下方面做核心演进。
1)Multi-Agent Schedule Core/多智能体调度核心
2) Agent&Prompt工程
3) 知识库构建
4) 知识库检索&知识图谱增强
5) 代码整库分析
* 为了减少本项目非核心工作的开发,避免重复造轮子,对Github上与LLM相关的热门项目进行调研分析后,通过复用以下项目(不局限于下图所展示的内容)来构建本项目的其它非核心组件。
文本知识库管理
知识图谱管理
代码知识库管理
代码知识库展示页面
基于Agent问答
我们通过上述页面去构建文本知识库和代码知识库,在本项目中可采用Multi-Agent框架来构建多种多样的Agent链路,从而实现各种复杂场景的执行。
目前我们提前封装了一些Agent场景,诸如chatPhase、docChatPhase、searchChatPhase、codeChatPhase、toolReactPhase、codeReachPhase,可支撑知识库问答、代码问答、工具调用、代码执行等功能。
同时每一个场景我们支持是否进行知识库检索、代码库检索、信息搜索等配置过程,同时可配置相关的工具以供工具进行调度使用。
我们在构建DevOps-ChatBot的过程中发现这套体系化的能力,除了应用在DevOps领域,任何领域貌似也是适用的!大模型解决问题无外乎通过自身知识、知识库增强事实问答、API解决特定领域任务、代码编程解决计算不足,同时在Multi-Agent的调度下可以延伸出很多有意思的玩法。以下玩法可以通过本项目的模块组装构建完成!
场景描述:上传一个数据文件,自动进行数据分析
演示demo
场景描述:查询某个服务器的基本时序,传入到监控工具中,并进行分析
演示demo
场景描述: 用户希望通过简单的自然语言查询来获取特定股票的详细信息,包括历史股价图表、市场表现和可能的市场走向。例如,用户想要了解贵州茅台的股票历史及未来走势。
演示demo
场景描述:针对代码库中的某个方法生成测试用例。导入代码库、选择检索方式为基于标签检索、询问问题
演示demo
场景描述:回答与具体的网络游戏相关的问题。包含英雄信息、登场时间、所属城邦等。
演示demo
英雄联盟的英雄关系知识图谱
知识图谱问答演示
DevOpsGPT是我们发起的一个针对DevOps领域大模型相关的开源项目,主要分为三个模块。本文介绍的DevOps-ChatBot是其中的问答机器人模块,其目标是基于LLM来实现DevOps 领域LLM行业标准评测。此外,还有DevOps-Model、DevOps-ChatBot两个模块,分别为DevOps领域专属大模型和DevOps领域智能助手。我们的目标是在DevOps领域,包含开发、测试、运维、监控等场景,真正地结合大模型来提升效率、成本节约。我们期望相关从业者一起贡献自己的才智,来让“天下没有难做的coder”,我们也会定期分享对于 LLM4DevOps 领域的经验&尝试。
欢迎使用&讨论&共建
(1)ChatBot - 开箱即用的 DevOps 智能助手:GitHub - codefuse-ai/codefuse-chatbot: An open-sourced AI assistant/agents for the full-life cycle of AI native software developing, supporting chat interactions plus knowledge base, invoking tools, sandbox execution, etc.
(2)Eval - DevOps 领域 LLM 行业标准评测:https://github.com/codefuse-ai/codefuse-devops-eval
(3)Model - DevOps 领域专属大模型:https://github.com/codefuse-ai/CodeFuse-DevOps-Model
(4) CodeFuse官网:
codefuse