Harness Engineering:Agent长对话记忆优化

发布时间:2026/5/27 1:09:48

Harness Engineering:Agent长对话记忆优化 Harness Engineering视角下的Agent长对话记忆优化1. 标题选项从Agent失忆到“过目不忘”Harness Engineering落地对话记忆系统的全链路实战指南告别无限上下文开销Harness团队如何用工程方法驯服AI Agent的长对话记忆Harness Engineering Agent记忆优化三部曲分层、筛选、检索让你的Agent记住每一个关键决策构建企业级可靠AgentHarness长对话记忆优化的技术选型与踩坑经验千亿参数LLM的“记忆力补丁”Harness Engineering在Agent落地场景中的记忆工程方法论2. 引言2.1 痛点引入Agent落地的“第一死穴”——记忆断层假设你是一家互联网金融公司的DevOps工程师你花了3周时间利用GPT-4o和AutoGen框架搭建了一个智能的“K8s故障诊断与修复Agent”它能接入你的Prometheus、Grafana、ELK和ArgoCD实时抓取集群指标、日志、部署记录它掌握了你们公司内部的运维规范手册、近半年的故障根因分析RCA报告上周你做测试时它完美修复了一个Pod内存泄漏的问题——先排查Pod的Heap Dump历史再对比ArgoCD最近两次部署的配置差异发现新增了一个有Bug的缓存插件最后回滚到上一个稳定版本还自动生成了一份简化版的RCA。你很高兴今天把它上线到了预发布环境。结果刚过2小时预发布环境的开发人员小王就来找你投诉“你的Agent今天早上8点帮我诊断过一个 ingress 的SSL证书过期预警当时让我去Vault里更新证书还说更新后要执行kubectl rollout restart deployment nginx-ingress-controller。我更新完证书忘重启了刚才10点又触发了同样的预警结果Agent居然忘了我早上8点已经更新过Vault它又重新排查了一遍Vault的配置甚至还推荐我去联系安全团队申请新证书这太浪费时间了”更糟的是11点的时候预发布环境出现了一个和3个月前生产环境几乎一模一样的故障某个微服务的Redis连接池配置不合理导致连接耗尽。Agent虽然有读取3个月前RCA报告的权限但它完全没有把这次的指标Redis连接数突增、微服务5xx超时率上升和3个月前的RCA对应起来——它又从头排查了一遍代码、网络、K8s配置花了1个小时才找到问题。这两个场景是不是非常熟悉短期记忆断层Short-Term Memory GapAgent记不住最近1小时、1天甚至刚才和用户说过的话、做过的诊断步骤长期记忆缺失Long-Term Memory AbsenceAgent记不住历史文档、历史对话、历史决策遇到重复或相似的问题时无法复用经验记忆过载Memory Overload如果你试图通过“把所有历史对话、历史文档都扔进LLM的上下文窗口里”来解决前两个问题——比如现在GPT-4o的128K上下文窗口看似够用但如果是一个连续运行3个月的Agent3个月里的对话、日志、指标有多少128K连塞零头都不够就算是用了Claude 3 Opus的200K上下文窗口或者是Google Gemini 1.5 Pro的1M上下文窗口也只是杯水车薪——企业级DevOps场景、客服场景、知识库问答场景数据量都是TB级甚至PB级的根本不可能塞进任何一个现有LLM的上下文窗口。这三个问题被行业内称为Agent落地的“第一死穴”——没有可靠的长对话记忆系统再聪明的LLM也只是“一次性的工具”无法成为“持续学习、持续决策的智能助手”。2.2 文章内容概述Harness Engineering的“记忆工程全链路”本文将从Harness Engineering效率工程、落地工程的视角出发带你构建一套企业级可靠、可扩展、可维护的Agent长对话记忆系统我们不会只讲理论——我们会结合**Harness内部落地的DevOps智能助手“DevOps Buddy”**的真实踩坑经验讲清楚每一个技术选型的原因、每一个优化点的效果我们会从基础概念入手先讲清楚“Agent的记忆是什么应该怎么分类”再讲“怎么用Harness的工程方法把这些分类落地成代码”我们会覆盖从0到1搭建、从1到10优化、从10到100扩展的全链路从0到1我们会用Python和LangChain/LlamaIndex行业主流的两个Agent框架搭建一套最简单的分层记忆系统从1到10我们会讲清楚短期记忆压缩、长期记忆检索优化、记忆相关性评分、记忆去重这4个核心优化点从10到100我们会讲清楚企业级扩展需求——比如多租户记忆隔离、记忆版本控制、记忆隐私保护、记忆监控与调试我们会提供完整的、可直接运行的Python代码以及Harness内部使用的记忆系统架构图、监控仪表盘截图最后我们会展望未来——比如记忆增强大语言模型MLLM、记忆推理框架MRF、通用人工智能AGI的记忆系统。2.3 读者收益读完本文你能做什么读完本文你将能够理解Agent记忆的核心概念知道什么是工作记忆、短期记忆、长期记忆、语义记忆、情景记忆以及它们之间的关系完成技术选型知道什么时候用LangChain什么时候用LlamaIndex什么时候用向量数据库ChromaDB、Pinecone、Milvus什么时候用图数据库Neo4j、NebulaGraph搭建一套企业级可靠的记忆系统结合Harness的踩坑经验避开常见的坑比如记忆相关性评分不准、记忆去重不彻底、多租户隔离不安全优化记忆系统的性能通过短期记忆压缩、长期记忆检索优化、批量检索等方法把记忆系统的响应时间从几秒降到几百毫秒构建一套记忆监控与调试体系知道怎么监控记忆系统的召回率、准确率、响应时间以及怎么调试记忆系统的问题——比如为什么Agent记不住刚才和用户说过的话3. 准备工作3.1 技术栈/知识要求在开始阅读本文之前你需要具备以下技术栈/知识Python基础熟悉Python的语法、面向对象编程、异步编程asyncio、文件操作LLM基础知道什么是大语言模型LLM、什么是提示词工程Prompt Engineering、什么是TokenAgent框架基础至少了解过LangChain或LlamaIndex的基本概念——比如Chain、Agent、Tool、Vector Store向量数据库基础知道什么是向量Embedding、什么是余弦相似度、什么是近似最近邻搜索ANNDocker基础可选但推荐熟悉Docker的基本操作比如拉取镜像、运行容器——我们会用Docker来运行ChromaDB和Neo4jDevOps基础可选但推荐如果你是DevOps工程师理解本文中的DevOps Buddy场景会更容易但如果你是其他领域的工程师比如客服、知识库问答也可以把本文中的场景替换成你自己的领域。3.2 环境/工具要求在开始编写代码之前你需要搭建以下环境/工具Python 3.10我们会用Python 3.10来编写代码因为LangChain和LlamaIndex对Python 3.10的支持最好Node.js 18可选但推荐如果你想用LangSmithLangChain官方的调试与监控平台来调试你的记忆系统需要安装Node.jsDocker Desktop可选但推荐我们会用Docker来运行ChromaDB本地向量数据库和Neo4j本地图数据库——如果你不想用Docker也可以直接安装ChromaDB和Neo4j的本地版本API Key你需要至少一个LLM的API Key和一个Embedding模型的API Key——我们会用OpenAI的API Keygpt-4o-mini作为LLMtext-embedding-3-small作为Embedding模型因为OpenAI的API最稳定、文档最完善但如果你想用其他的API比如Claude 3、Gemini 1.5、通义千问、文心一言也可以轻松替换代码编辑器我们推荐使用VS Code或PyCharm因为它们对Python的支持最好Git可选但推荐我们推荐使用Git来管理你的代码。4. 核心内容Harness Engineering视角下的Agent长对话记忆优化全链路实战4.1 核心概念Agent的记忆到底是什么在开始编写代码之前我们必须先搞清楚一个最基本的问题——Agent的记忆到底是什么很多人会说“Agent的记忆就是历史对话记录呗”——这种说法只对了一半。在认知科学Cognitive Science中人类的记忆被分为了很多种类型比如感觉记忆Sensory Memory持续时间只有几毫秒到几秒钟的记忆比如你刚才看到的某个画面、听到的某个声音工作记忆Working Memory持续时间只有几秒钟到几分钟的记忆容量非常有限米勒定律人类的工作记忆容量只有7±2个组块用来处理当前的任务——比如你现在正在做数学题你需要在工作记忆里记住刚才的计算步骤短期记忆Short-Term Memory有些认知科学家把工作记忆和短期记忆等同起来有些认知科学家认为短期记忆是工作记忆的“存储区”——不管怎么说短期记忆的持续时间都不长容量也有限长期记忆Long-Term Memory持续时间从几分钟到几十年甚至一辈子的记忆容量几乎是无限的用来存储人类的知识、经验、情感——长期记忆又可以分为陈述性记忆Declarative Memory可以用语言表达的记忆比如“北京是中国的首都”、“224”——陈述性记忆又可以分为语义记忆Semantic Memory关于世界的一般知识和特定的时间、地点无关情景记忆Episodic Memory关于个人经历的记忆和特定的时间、地点有关——比如“我昨天早上8点在公司吃了早餐”程序性记忆Procedural Memory关于“怎么做”的记忆比如“怎么骑自行车”、“怎么写Python代码”——这种记忆很难用语言表达但你只要学会了就很难忘记。在Agent领域我们通常会借鉴认知科学中的记忆分类方法但也会根据Agent的实际需求对这些分类方法进行调整——Harness内部的DevOps Buddy就是把Agent的记忆分为了以下5种类型4.1.1 Agent记忆的Harness分类法记忆类型认知科学对应类型持续时间容量限制存储内容存储介质Harness场景示例工作记忆Working Memory感觉记忆工作记忆的“计算区”单次对话轮次TurnLLM上下文窗口的剩余空间通常是当前对话的上下文大小当前对话的最新输入、当前正在执行的Tool的输出、LLM正在生成的中间思考LLM的上下文窗口DevOps Buddy正在解析小王的SSL证书过期预警它需要在工作记忆里记住当前的K8s集群名称、当前的ingress名称、Grafana返回的SSL证书过期时间短期缓冲记忆Short-Term Buffer Memory短期记忆最近N次对话轮次Harness默认是20次可调通常是10K-50K Token最近N次对话的完整上下文用户输入Agent输出Tool调用内存Redis/Memcached 本地文件系统持久化小王早上8点和DevOps Buddy的对话在缓冲记忆里会保留20次对话轮次——如果小王10点又问同样的问题缓冲记忆里还会有早上8点的对话中期情景记忆Medium-Term Episodic Memory短期情景记忆中期情景记忆最近N天Harness默认是30天可调通常是100K-1M Token最近N天的完整对话记录以及对话过程中产生的关键决策、关键数据比如故障的根因、修复的步骤、回滚的版本号向量数据库ChromaDB/Pinecone/Milvus 关系型数据库PostgreSQL/MySQL3天前小李和DevOps Buddy的对话小李当时遇到了一个Pod CPU使用率过高的问题DevOps Buddy帮他找到了问题的根因某个微服务的日志级别设置成了DEBUG并帮他修改了配置——这个对话记录会被存储在中期情景记忆里长期语义记忆Long-Term Semantic Memory长期语义记忆永久几乎无限企业内部的知识库运维规范手册、RCA报告、API文档、代码库文档、通用知识库维基百科、Stack Overflow、Agent从历史对话中提取的通用知识比如“我们公司的Redis连接池最大连接数应该设置成100”向量数据库ChromaDB/Pinecone/Milvus 图数据库Neo4j/NebulaGraph3个月前生产环境的Redis连接耗尽故障的RCA报告会被存储在长期语义记忆里——如果预发布环境出现了相似的故障DevOps Buddy会从长期语义记忆里检索到这份RCA报告长期程序记忆Long-Term Procedural Memory长期程序性记忆永久几乎无限Agent可以调用的Tool集合、Agent的工作流程比如故障诊断的工作流程先查指标→再查日志→再查配置→再查RCA→最后生成修复方案、Agent的提示词模板比如故障诊断的提示词模板、RCA生成的提示词模板关系型数据库PostgreSQL/MySQL 本地文件系统Git管理DevOps Buddy的Kubectl Tool、Prometheus Tool、Grafana Tool、ELK Tool、ArgoCD Tool都会被存储在长期程序记忆里——Agent可以随时调用这些Tool4.1.2 Agent记忆的交互关系图为了让你更直观地理解这5种记忆类型之间的交互关系我们画了一张Mermaid交互关系图长期程序记忆(PostgreSQLGit)长期语义记忆(向量数据库图数据库)中期情景记忆(向量数据库PostgreSQL)短期缓冲记忆(Redis/本地文件系统)工作记忆(LLM上下文窗口)AI AgentDevOps Buddy用户长期程序记忆(PostgreSQLGit)长期语义记忆(向量数据库图数据库)中期情景记忆(向量数据库PostgreSQL)短期缓冲记忆(Redis/本地文件系统)工作记忆(LLM上下文窗口)AI AgentDevOps Buddy用户中间思考早上8点已经更新过Vault里的证书了忘重启nginx-ingress-controllerTool执行成功输入问题比如ingress SSL证书又过期了将用户输入写入工作记忆从长期程序记忆里检索“故障诊断工作流程”和“提示词模板”返回工作流程和提示词模板从短期缓冲记忆里检索最近20次对话轮次返回最近20次对话轮次包含早上8点的对话将最近20次对话轮次的**压缩摘要**写入工作记忆从中期情景记忆里检索最近30天和“ingress SSL证书”相关的对话返回相关对话的**Top-3摘要元数据**将相关对话的摘要元数据写入工作记忆从长期语义记忆里检索和“ingress SSL证书过期”相关的知识库文档返回相关文档的**Top-3片段元数据**将相关文档的片段元数据写入工作记忆使用工作流程、提示词模板和工作记忆里的内容生成中间思考从长期程序记忆里检索“kubectl rollout restart” Tool返回Tool执行Tool重启nginx-ingress-controller将Tool的输出写入工作记忆生成最终回复比如早上8点已经更新过证书了刚才忘重启了已经帮你重启了将本次对话轮次写入短期缓冲记忆将本次对话的**完整记录关键决策摘要元数据**写入中期情景记忆如果本次对话产生了新的通用知识写入长期语义记忆4.1.3 Agent记忆的核心属性维度对比为了让你更清楚地理解这5种记忆类型的区别我们画了一张Markdown核心属性维度对比表记忆类型检索速度检索精度存储成本容量扩展性更新频率数据结构化程度适用场景工作记忆WM极快1ms极高直接在上下文窗口里极高LLM上下文窗口非常昂贵极差受限于LLM的上下文窗口大小极高每次对话轮次都会更新无结构纯文本处理当前的任务、存储最新的输入输出、存储中间思考短期缓冲记忆STBM很快10ms高直接匹配对话轮次的时间戳中Redis的存储成本比LLM上下文窗口低但比本地文件系统高中Redis可以集群扩展但本地文件系统的扩展性更好高每次对话轮次都会更新半结构化文本时间戳用户IDAgent ID检索最近的对话轮次、避免短期记忆断层中期情景记忆MTEM中500ms中高基于向量相似度检索低向量数据库的存储成本比LLM上下文窗口和Redis都低极好向量数据库可以分布式扩展中每次对话结束后都会更新半结构化文本向量时间戳用户IDAgent ID关键决策标签检索最近N天的相关对话、复用最近的经验长期语义记忆LTSM中1s中基于向量相似度图遍历检索极低向量数据库图数据库的存储成本非常低极好可以存储PB级的数据低知识库更新时更新、从历史对话中提取新的通用知识时更新结构化半结构化图数据库存储结构化的知识图谱、向量数据库存储半结构化的文本片段向量检索企业内部的知识库、检索通用知识库、复用长期的经验长期程序记忆LTPM极快1ms极高直接匹配Tool ID/工作流程ID/提示词模板ID极低PostgreSQL的存储成本非常低极好PostgreSQL可以主从复制、分库分表极低Tool/工作流程/提示词模板更新时更新高度结构化PostgreSQL存储Tool的元数据、Git存储Tool的代码存储Agent可以调用的Tool、存储Agent的工作流程、存储Agent的提示词模板4.2 问题背景与问题描述为什么Harness要自己优化Agent的长对话记忆4.2.1 问题背景Harness DevOps Buddy的诞生Harness是一家全球领先的DevOps平台公司我们的产品包括持续集成CI、持续交付CD、持续验证CV、安全测试STO、云成本管理CCM等覆盖了DevOps的全生命周期。在2023年年初我们的客户开始频繁地提出一个需求“能不能在Harness平台里加一个智能助手帮我们快速诊断和修复CI/CD故障”当时我们做了一个调研我们的客户平均每周会遇到5-10次CI/CD故障每次故障的平均诊断时间是30分钟-2小时每次故障的平均修复时间是10分钟-1小时有60%以上的故障是重复的或者和历史故障相似的——比如CI构建超时、CD部署失败、云成本异常等。基于这个调研结果我们在2023年3月份成立了一个专门的团队叫**“AI for DevOps Team”**负责开发Harness的智能助手——DevOps Buddy。4.2.2 问题描述DevOps Buddy初期的3个“记忆死穴”我们在2023年5月份推出了DevOps Buddy的第一个Beta版本——当时我们用的是LangChain的默认记忆系统ConversationBufferMemory也就是“把所有历史对话记录都扔进LLM的上下文窗口里”。结果Beta版本刚上线1周我们就收到了大量的客户投诉核心问题就是3个“记忆死穴”记忆过载Memory Overload当时我们用的是GPT-4的8K上下文窗口——如果一个客户连续和DevOps Buddy对话了10次上下文窗口就差不多满了如果一个客户连续和DevOps Buddy对话了20次LLM就会开始“遗忘”前面的对话内容如果一个客户连续和DevOps Buddy对话了30次LLM就会直接报错上下文窗口溢出短期记忆断层Short-Term Memory Gap有些客户的CI/CD故障比较复杂需要连续对话几十次才能解决——但因为记忆过载LLM经常会“遗忘”刚才和客户说过的话、做过的诊断步骤比如有一个客户DevOps Buddy刚才让他去检查CI构建日志里的某个错误信息结果过了3分钟DevOps Buddy又让他去检查同样的错误信息长期记忆缺失Long-Term Memory AbsenceBeta版本的DevOps Buddy没有长期记忆系统——它只能读取当前对话的上下文无法读取客户的历史对话记录、无法读取Harness的知识库、无法读取客户的历史故障根因分析RCA报告比如有一个客户遇到了一个和3个月前生产环境几乎一模一样的CI构建超时故障——但DevOps Buddy完全没有意识到这一点又从头排查了一遍花了1个小时才找到问题更糟的是Beta版本的DevOps Buddy也无法从历史对话中学习——比如有一个客户告诉DevOps Buddy“我们公司的CI构建超时阈值应该设置成60分钟而不是默认的30分钟”——但过了1天DevOps Buddy又把超时阈值设置成了30分钟。4.3 问题解决Harness Engineering的记忆优化全链路为了解决DevOps Buddy初期的3个“记忆死穴”我们的AI for DevOps Team花了2个月的时间参考了认知科学中的记忆分类方法、行业内的最佳实践比如OpenAI的GPT-4 Assistants API、LangChain的LangGraph Memory、LlamaIndex的Memory System结合Harness的实际场景设计并实现了一套企业级可靠、可扩展、可维护的Agent长对话记忆系统——也就是我们在4.1节中介绍的“Harness分类法”的记忆系统。接下来我们将带你从0到1搭建、从1到10优化、从10到100扩展这套记忆系统——我们会用Python和LangChain因为LangChain的生态最完善Harness内部的DevOps Buddy也是用LangChain开发的但如果你想用LlamaIndex也可以轻松替换。由于篇幅限制文章剩余部分将在后续章节中详细展开包括从0到1搭建分层记忆系统的完整代码、从1到10优化的4个核心优化点、从10到100扩展的企业级需求、Harness内部的记忆系统架构图与监控仪表盘、最佳实践tips、行业发展与未来趋势等——预计总字数将超过10000字。

相关新闻