当运维遇上LLM:大模型 Agent 在 AIOps 运维场景有哪些新实践
一、为什么要用大模型Agent技术
近期,大模型的迅猛发展为 AI 行业带来了巨大的进步,也有力地推动了 AIOps 的变革。大模型主要通过对话的方式实现智能赋能,Agent 借助多步对话,利用规划、反思以及工具的使用,以目标为驱动,形成能够自治完成复杂任务的智能体。 Agent 对大模型的加持,极大地提升了大模型的智能能力,并且能对 AIOps 任务类场景起到很好的智能增强作用,有助于提升运维的人效和加强自动化程度。 大模型 Agent 在 AIOps 运维场景中,可以解决日常任务,将 SRE 从重复的劳动中解脱出来,提高人效,如日常的巡检,重复故障发现和处置,知识/数据查询分析等;Agent 不再依靠 SRE 针对低级指令和流程的编辑/计划,可完全自驱的进行分析,规划,最终解决问题;而针对一些创新性和探索性的工作,Agent 也可以通过知识探索,流程规划,工具使用等方式实现。 人工交互,主要是针对单/多 Agent 中模型的推理能力和知识信息不足的问题,通过人工介入进行补充。 在 AIOps 运维中,大模型 Agent 对传统场景带来了全新的增强与提升: ChatOps:大模型 Agent 对 ChatOps 的支持较为直接,最直接体现在意图识别和工具使用上,可直接借助大模型和 Agent 的能力来实现并增强,对于知识问答,还可以充分利用 RAG 的方式,实现知识库的引用及回答的生成。 二、如何建设大模型Agent来帮助AIOps场景 Agent 的建设有比较常见架构,包括了重要的组成部分:行动,计划,记忆,工具,同时依赖大模型LLM的能力,角色和环境。各个组成部分根据功能分工,利用sop进行合理编排,形成不同领域或者特性的智能体,在线上环境中通过Agent的制定或者意图的识别,实现调用和执行。如下简单介绍一下各个组件常用的构建方法和落地时间。 大模型是整个Agent的大脑,Agent的运行都需要大脑的反思能力和规划能力来自驱Agent的思考和运行,针对目前商用和开源的大模型的能力上看,在不同的场景和专业领域各有差异,在使用中可根据不同场景进行比对分析选择合适的模型和参数,并需要建立统一的适配器接口,达到方便进行模型调试比对的能力。同时,依赖LLMOps的功能实现模型的训练/微调,实现模型能力的调整和优化。 计划规划,Agent一般对需要多次大模型的交互和工具调用来达到任务目标,整个过程需要通过大模型能力等方式来进行规划计划,其中最常用的方法是反思,通过大模型的批判和思考能力,对于问题,中间回答等进行反思来确定下一步工作,常见的方法如 ReAct,Self-Ask,ReWoo 等。 这里的实践落地中,需要考虑运维的 SOP(Standard Operating Procedures)如何引入规划中,针对重复的有规范的任务,可通过专家经验生成流程驱动规划,针对无法匹配的任务,尝试推理生成规划,并能通过自学习来完善和丰富经验流程。 另外,如在根因定位和故障排查等场景中,可通过启发式算法,搜索问题空间,如 ToT(Tree of Thought),GoT(Graph of Thought) 等。 记忆管理,Agent 的记忆,最常见的是分长记忆和短记忆,长记忆最常用的方法是通过 RAG 的方式从外挂的知识库来获取知识,整个 RAG的过程可以使用固定的流程,更好的方式也使用Agent的规划和反思的能力,选择和调整检索的策略,来提升检索知识的有效性。 短记忆,一般是通过 prompt 的方式,将会话的历史,指令,例子,要求等信息放入,让大模型进行回答,有很多相关的策略和方法,重要的是要控制token数,从生成大模型的主要机制上,整体的 token 数量一般是有限制的,根据注意力机制,prompt 中过多的语义也是会被遗忘的,可通过 chatGPT 等对 prompt 进行生成和压缩,将重要信息放到 prompt 的开头和结尾,通过引号等方式加重关键信息。 工具执行,工具执行是大模型拓展到 Agent 的关键基础能力,很多大模型都通过针对性的预训练和微调将 function calling 的能力加入到模型本身中,通过模型的调用来实现工具调用的决策,当然通过 ReAct 的方式,调用通用大模型也是可行的。在运维领域,相关工具和能力不会在通用的训练数据中,因为领域知识的缺乏导致很多工具决策不够精准,可通过模型的微调,或者训练中小模型来达到精准的工具调用。 环境交互,在 AIOps 的运维场景中,环境主要是通过工具来定义,通过工具的使用来实现 Agent 的对环境的感知,控制以及互动。在建设实践中,原有 AIOps 和运维平台中的相关平台和工具都是可以打包成工具,作为感知和操作的工具,如异常检测的模型,根因分析的工具,运维可观测的数据,日志,告警的信息等,Agent 智能体需要通过这些工具。 角色定义
在 Agent 的协作中,有个比较困难的障碍,就是多 Agent 的协作,多 Agent 的协作有很多的困境需要解决,目前比较明显的问题是角色区分和协作设计控制。角色,需要大模型能深刻理解角色,并在协作交互中,通过角色定义进行交互,在通用场景中,大模型对于角色的理解尚且可以,在运维场景中,相关角色界线相对模糊,如 SRE 中的一线运维,二线运维,我们经常说的业务运维,技术运维,理解有一定的难度,容易理解错误;另外,Agent 之间的协作也很复杂,通过大模型去规划和控制比较困难,容易进入死循环,容易偏离大目标,实践中常用的方法就是减少 Agent 的数量,使用主持人默认进行统一管理协作,并设定协作最大轮数,尽量使用简单的协作策略来提升协作效率、降低协作的复杂度。
三、大模型 Agent 在 AIOps 运维场景的实践 故障总结:根据排查计划和排查结果,进行故障的总结,总结包括故障现象,故障分析过程,故障根因,推荐止损措施,推荐修复措施。相关的总结信息,需要通过 RAG(Retrieval-Augmented Generation) 的方式,检索内部故障库,知识库,以及利用搜索引擎进行知识搜集后,通过大模型进行总结回答,回答后的结果,进行格式整理存入故障库中,在人工审核后形成新的故障知识,为之后的故障排查使用。 总体上来说,故障排查通过固定流程(范围界定->故障排查->故障总结)的生成降低了可能的排查遗漏,复用了历史故障排查,提升了排查效率;通过并发的逐步反思排查的步骤执行,尽可能的分析相关事件,指标,日志等的异常,代替SRE进行故障下钻分析;通过故障总结,自动化利用历史知识和外部知识,进行故障的根因分析和修复推荐,辅助SRE进行相关故障分析,帮助场景实现自学习。 在 Oncall 运维场景中,期望通过智能问答实现一线拦截,提升一线人效的同时,减少二线的介入量,提升 SRE 的人效。知识问答目前主要的实现方法就是通过 RAG 的技术,实现外挂知识库的检索,通过大模型进行回答,其中有些比较有效的实践如下:
针对故障诊断/修复的场景,可使用多 Agent 的方式进行实现,多 Agent 可根据故障依赖的组织结构设计多个 Agent,使用主持人的方式,规划/管理各个角色的协作,并对目标的达成进行判断决策。
针对使用的知识,工具和环境交互,可利用工具箱进行划分,分配给不同的角色,减少一个角色的使用的工具,精简一个角色的职能,提升多 Agent 的协作效率。