AI Agent Harness状态管理:长对话上下文维护
AI Agent Harness状态管理长对话上下文维护一、引言 (Introduction)1.1 钩子 (The Hook)想象你正在用一个号称“全知全能”的AI Agent助手规划一场为期14天的欧洲蜜月旅行——这是2024年第三季度GitHub上Star数突破150k的热门开源旅行Agent「VoyagerLite」。第一天的对话很顺利你告诉它你们是刚毕业两年的程序员情侣预算合计€8000不含购物偏好自然风光、中世纪小镇和工业遗迹类的极客打卡点不会开车时间定在明年4月15日-28日避开复活节高峰前后的尾期又能赶上南法薰衣草田初开的预热、荷兰郁金香的末班车残株展——因为早10天全价票残株展荷兰人自己更爱逛体验感好3倍是「极客精打细算」里的知识点住店标准是四星但必须带独立阳台晾洗冲锋衣蜜月不想手洗大件也不想天天扛去洗衣店阳台刚需吃不吃辣完全无所谓但要避开生牛肉和太腥的海鲜。VoyagerLite噼里啪啦打了2000字的初稿第二天你补了一句“哦对了忘了说我女朋友有轻微花粉过敏预热期薰衣草还好但南法小镇路边夹竹桃、4月荷兰农场附近的毛茛是重灾区行程里绝对不能有露天农场、夹竹桃密集的街道还有我昨天忘带冲锋衣的具体尺寸但没关系住店有洗衣烘干一体阳台刚需可以降为四星民宿有烘干机就行——冲锋衣速干面料薄烘干机15分钟搞定预算紧张€8000可以砍€500买个荷兰工业设计的复古耳机当纪念品「极客纪念品指南」第一期推荐过Urbanears的 Plattan 2复刻工业黑胶版本残株展海牙有快闪店打7折还送同色系收纳盒海牙本来就在工业遗迹清单里对吧昨天初稿里列了海牙皇家造船厂对吧能不能把皇家造船厂和快闪店安排在同一天下午逛上午逛美术馆避开美术馆周末——哦对时间是15-28中间有20-21是周六日昨天初稿美术馆居然安排在周六赶紧调整周末全户外但避花粉避夹竹桃避残株展以外的露天郁金香田哦对海牙附近有一个Kinderdijk风车村是残株展配套能不能把Kinderdijk安排在周日还有女朋友有轻度恐高昨天安排的科隆大教堂登顶一定要取消科隆大教堂只逛一层的玻璃彩绘馆就行还有科隆有没有四星带烘干的民宿科隆附近的亚琛有工业遗迹对吧能不能调整科隆只住一晚玻璃彩绘馆加亚琛半日游当天走哦对还有€8000砍€500之后是€7500对吧Urbanears的快闪店记得标7折收纳盒记得标哦对残株展快闪店Urbanears Plattan 2复刻黑胶版本的收纳盒是用废弃造船厂钢板做的对吧太符合极客工业遗迹主题了一定要强调一定要把钢板收纳盒加到蜜月愿望清单的第一位冲锋衣晾洗阳台刚需彻底取消彻底取消科隆的四星带烘干民宿要选离玻璃彩绘馆步行10分钟以内的亚琛工业遗迹选废弃的RWTH亚琛工业大学的老实验室对吧昨天的极客打卡清单里有女朋友花粉过敏能不能戴海牙快闪店Urbanears Plattan 2复刻黑胶送的防尘耳塞当临时花粉面罩不行不行还要买专用的无香N95口罩能不能在€7500预算里再挤€50买三天的专用口罩€7500砍€50是€7450对砍砍砍极客蜜月就是要极致性价比加极致工业遗迹体验加极致复古耳机加极致无香N95还有科隆能不能不吃当地著名的烤猪肘烤猪肘太腻了女朋友最近在减肥能不能换成亚琛工业大学老实验室附近的素食三明治店那家店在TripAdvisor上评分4.9老板也是前RWTH的程序员素食三明治里面有海藻类不怕腥吧昨天女朋友说避开太腥的海鲜海藻应该不算太腥吧对不算不算老板还是前程序员一定要和他聊聊开源旅行Agent的开发哦对VoyagerLite能不能在日程里加一个「和素食三明治店老板聊开源」的备注备注优先级最高优先级最高备注标红备注加时间戳时间戳2025年4月20日下午5点10分-5点40分刚好三明治店下班前10分钟不用排队备注加老板的GitHub账号假设假设老板GitHub账号是aachen_programmer_vegan对加进去加进去加进去预算€7450绝对不能超绝对不能避花粉避夹竹桃避露天农场避太腥的海鲜避烤猪肘避复活节避周末美术馆避科隆大教堂登顶加Urbanears快闪店加钢板收纳盒加无香N95加素食三明治店老板聊开源加RWTH老实验室加Kinderdijk风车村残株展调整科隆只住一晚调整科隆到亚琛当日往返预算€7450一分不能多一分不能一分”好了现在问题来了——如果你用的不是一个有完善状态管理的AI Agent而是普通的GPT-4 Turbo、Claude 3 Opus甚至Gemini Pro 1.5 Flash单轮或简单记忆拼接的对话你这段话发出去之后会发生什么大概率是这样的模型失忆第一弹它会把你第一天说的€8000预算全忘了直接给你推荐€12000的方案。模型失忆第二弹它会把女朋友的花粉过敏全忘了把Kinderdijk风车村安排在夹竹桃盛开的街道附近。模型失忆第三弹它会把科隆大教堂登顶取消的要求全忘了标成周六上午必须的行程。模型失忆第四弹它会把素食三明治店老板聊开源的要求全丢了。模型崩溃就算它记住了一部分简单的滑动窗口Sliding Window记忆机制比如只保留最近的2000个Token对话也会把第一天的核心信息预算范围、旅行时间、偏好自然风光/中世纪小镇/工业遗迹、不会开车、速干面料冲锋衣可以取消阳台等全部挤出去。极端情况它可能会反过来问你“请问您是要规划一场旅行吗预算多少时间什么时候”——完全把你前一天的2000字对话当空气。这就是没有完善状态管理的长对话的痛点——模型的记忆像金鱼的尾巴游过7秒就忘得一干二净。1.2 定义问题/阐述背景 (The “Why”)1.2.1 核心背景Agent时代的到来长对话是刚需2023年被称为“AI大模型元年”而2024年则是**“AI Agent元年”——从OpenAI的GPT-4o推出的Assistants API内置了Retrieval、Code Interpreter、Function Calling三大能力还有原生的「Threads」「Messages」「Runs」状态管理体系到Anthropic的Claude 3 Workbench**再到国内的智谱AI的智谱Agent、百度文心一言的文心Agent Studio、阿里通义千问的通义千问Agent Platform再到开源界的LangChain LangGraph、AutoGen、CrewAI、VoyagerMinecraft全自动挖矿打怪Agent鼻祖、GPT-EngineerAI Agent已经从2023年的“玩票性质”比如AutoGPT早期版本每天只能挖几块石头还会经常迷路撞墙变成了2024年的“实用工具”——GitHub上Star数超过100k的Agent相关项目已经超过5个企业级的Agent应用场景已经覆盖了客户服务、智能运维、代码生成与调试、法律文书审查、医疗健康咨询、金融投资分析、旅行规划、教育辅导等几乎所有领域。而所有这些实用的Agent应用场景几乎都离不开「长对话上下文维护」——比如客户服务Agent用户可能会连续咨询3天的退款流程、物流追踪、商品退换货规则甚至第一天说“我买了一台iPhone 16 Pro Max昨天刚收到但是摄像头有划痕”第三天说“能不能换成银色的iPhone 16 Pro Max 2TB版本我昨天没仔细看划痕其实很严重”——如果Agent没有记住第一天的iPhone型号、颜色、存储、摄像头划痕的问题第三天的对话就会彻底崩盘。智能运维Agent运维工程师可能会连续和Agent沟通24小时的服务器故障排查——第一天凌晨2点说“服务器192.168.1.100的CPU使用率突然飙升到99%持续了5分钟现在恢复正常了”第一天上午9点说“能不能帮我查一下凌晨2点CPU使用率飙升的原因从系统日志来看当时有一个Python脚本在跑PID是12345”第一天下午3点说“哦对了那个Python脚本是我昨天下午部署的用来做日志分析的有没有可能是日志文件太大了”第一天晚上8点说“日志分析脚本我已经优化了能不能帮我监控192.168.1.100的CPU使用率再超过80%就发邮件给我”——如果Agent没有记住之前的所有信息服务器IP、故障时间、PID、脚本用途、优化动作、监控阈值就不可能完成这么复杂的运维任务。代码生成与调试Agent程序员可能会连续和Agent沟通1周的代码开发——第一天说“能不能帮我写一个Python脚本用来爬取GitHub上Star数超过10k的Python项目的README.md文件”第二天说“哦对了要加上反爬虫机制比如设置User-Agent、设置延迟、设置代理IP池”第三天说“代理IP池能不能用免费的比如从https://www.free-proxy-list.net/ 爬取”第四天说“哦对了还要加上异常处理如果代理IP失效了就自动切换下一个如果爬取失败了就重试3次”第五天说“能不能帮我调试一下刚才跑的时候报错了错误信息是‘Connection refused by proxy’”第六天说“哦对了还要加上数据存储把爬取到的README.md文件保存到MongoDB数据库里”第七天说“能不能帮我优化一下性能现在爬取100个项目要花10分钟太慢了”——如果Agent没有记住之前的所有代码修改、错误信息、需求变更就不可能完成这么复杂的代码开发任务。1.2.2 核心问题单轮对话、简单记忆拼接、滑动窗口记忆都不够用那现在市面上的大模型和简单的Agent框架是怎么处理长对话上下文的呢主要有以下三种方式方式一单轮对话Stateless这是最原始的方式——模型根本不记住之前的任何对话每一轮对话都是独立的。比如你用GPT-3.5 Turbo的单轮API接口不使用Messages数组只使用Prompt参数你发“11等于几”它回“2”你接着发“再加2等于几”它回“什么加2请明确你的问题”——完全失忆。这种方式的优点是实现简单、成本极低不需要存储任何状态、Token消耗可控每一轮对话只消耗当前Prompt的Token。缺点是只能处理非常简单的单轮任务完全无法满足长对话的刚需——现在除了一些非常简单的工具类应用比如翻译、文本摘要的单轮调用几乎没有人用这种方式了。方式二简单记忆拼接Full History Concatenation这种方式稍微先进一点——模型会把之前的所有对话历史用户输入模型输出全部拼接成一个超长的Prompt然后一起发给大模型。比如你用GPT-3.5 Turbo的Messages数组接口把所有之前的Messages都放进去模型就能记住之前的所有对话了。这种方式的优点是实现也比较简单、只要大模型的上下文窗口Context Window足够大就能记住所有的对话历史。缺点是Token消耗极高、上下文窗口有限制、大模型处理超长Prompt的速度会变慢、大模型可能会出现「注意力分散」Attention Dilution的问题——也就是模型虽然看到了所有的对话历史但会忽略掉一些早期的、但非常重要的信息。比如GPT-3.5 Turbo的上下文窗口是16k Token约12000个汉字Claude 3 Haiku是200k Token约150000个汉字Claude 3 Opus是200k Token约150000个汉字Gemini Pro 1.5 Flash是1M Token约750000个汉字Gemini Pro 1.5 Ultra是12M Token约9000000个汉字——虽然现在Gemini Pro 1.5 Ultra的上下文窗口已经非常大了但Token消耗极高比如Gemini Pro 1.5 Ultra的输入Token价格是$1.25/1M输出Token价格是$5/1M如果你每次都把1M Token的对话历史发过去输入一次就要花$1.25输出一次哪怕只有1000 Token也要花$0.005——如果是企业级的应用每天有1000个用户每个用户每天有10轮对话那每天的输入Token消耗就是1000101M10000M输入成本就是10000*$1.25$12500输出成本就算是1000101000*$0.005/1M $0.05——每天总成本就是$12500.05每月就是$375001.5每年就是$4500018——这对大多数中小企业来说都是不可承受的而且大模型处理超长Prompt的速度会非常慢比如Gemini Pro 1.5 Ultra处理12M Token的Prompt要花几分钟甚至几十分钟还有注意力分散的问题——就算你把1M Token的对话历史发过去模型也可能会忽略掉一些早期的、但非常重要的信息比如你第一天说的€8000预算、女朋友的花粉过敏等。方式三滑动窗口记忆Sliding Window这种方式是对简单记忆拼接的优化——模型只会保留最近的N个Token或最近的M轮对话历史把早期的对话历史全部丢弃。比如你设置滑动窗口为最近的20轮对话或最近的4k Token模型就只会记住最近的那一部分对话。这种方式的优点是实现也比较简单、Token消耗可控、大模型处理速度快。缺点是会丢弃早期的、但非常重要的信息——也就是我们开头说的“模型的记忆像金鱼的尾巴游过7秒就忘得一干二净”。比如你用滑动窗口为最近的20轮对话规划欧洲蜜月旅行的时候前15轮对话都是核心信息预算、时间、偏好、过敏、恐高等后5轮对话都是细节调整滑动窗口就会把前15轮核心信息全部挤出去模型就会彻底失忆。1.2.3 核心解决方案AI Agent Harness的状态管理体系既然单轮对话、简单记忆拼接、滑动窗口记忆都不够用那我们需要什么样的解决方案呢答案就是——AI Agent Harness的状态管理体系。什么是AI Agent Harness简单来说AI Agent Harness就是一个用来「管理、协调、监控AI Agent」的基础设施层——它就像汽车的“线束Harness”一样把汽车的各个部件发动机、变速箱、刹车、灯光、空调等连接起来让它们协同工作AI Agent Harness则把AI Agent的各个核心组件大模型、工具集、知识库、状态存储器、调度器等连接起来让它们协同工作。而状态管理体系是AI Agent Harness的核心中的核心——它就像汽车的“行车电脑ECU”一样记录着汽车的所有状态车速、油耗、水温、胎压、故障码等AI Agent Harness的状态管理体系则记录着AI Agent的所有状态对话历史、用户画像、任务状态、工具调用结果、知识库检索结果等并且能够根据任务的需要智能地从状态存储器中检索出相关的信息组合成一个“精简但完整”的上下文发送给大模型——既不会消耗太多的Token也不会出现注意力分散的问题更不会丢弃早期的、但非常重要的信息。1.3 亮明观点/文章目标 (The “What” “How”)1.3.1 亮明观点本文的核心观点是要实现AI Agent的长对话上下文维护必须建立一个「分层、分类、结构化、可检索、可更新、可压缩」的AI Agent Harness状态管理体系——这个体系不能是单一的记忆存储方式而是要结合短期记忆Short-Term Memory、长期记忆Long-Term Memory、工作记忆Working Memory、情景记忆Episodic Memory、语义记忆Semantic Memory等多种认知科学中的记忆模型同时结合向量数据库Vector Database、关系型数据库Relational Database、图数据库Graph Database、键值对数据库Key-Value Database等多种数据库技术再加上智能检索Intelligent Retrieval、智能压缩Intelligent Compression、智能更新Intelligent Updating、**智能关联Intelligent Association**等多种算法才能真正满足长对话上下文维护的需求。1.3.2 文章目标读完这篇文章你将能够理解认知科学中的记忆模型包括短期记忆、长期记忆、工作记忆、情景记忆、语义记忆等以及它们如何应用到AI Agent的状态管理中。理解AI Agent Harness状态管理体系的核心组成部分包括状态定义、状态存储、状态检索、状态更新、状态压缩、状态关联等。掌握AI Agent Harness状态管理体系的实现技术包括向量数据库ChromaDB、Milvus、Pinecone、关系型数据库PostgreSQL、MySQL、图数据库Neo4j、Amazon Neptune、键值对数据库Redis、Memcached、智能检索算法语义搜索、混合搜索、重排序、智能压缩算法摘要压缩、实体提取压缩、重要性评分压缩等。通过一个实战案例从零开始构建一个有完善状态管理的AI Agent我们将使用Python语言结合LangChain LangGraphAI Agent编排框架、ChromaDB向量数据库、PostgreSQL关系型数据库、Redis键值对数据库、OpenAI GPT-4o Mini大模型构建一个能够规划欧洲蜜月旅行的AI Agent——这个Agent将能够记住所有的早期核心信息智能地检索相关信息不会出现注意力分散的问题也不会消耗太多的Token。掌握AI Agent Harness状态管理体系的最佳实践包括常见陷阱与避坑指南、性能优化、成本考量、安全防护等。了解AI Agent Harness状态管理体系的行业发展与未来趋势包括问题演变发展历史、当前主流的开源与商业方案、未来的发展方向等。二、基础知识/背景铺垫 (Foundational Concepts)2.1 核心概念定义认知科学中的记忆模型要构建一个好的AI Agent状态管理体系我们不能只从计算机科学的角度出发——我们还需要从认知科学的角度出发学习人类大脑的记忆模型因为人类大脑的记忆系统是目前已知的最强大、最灵活、最节能的长对话上下文维护系统——比如你和你的朋友聊了10年前的一件小事你还能记得清清楚楚而你的大脑消耗的能量只有约20W相当于一个小灯泡的功率。认知科学中的记忆模型有很多种其中最经典、最常用的是Atkinson-Shiffrin记忆模型阿特金森-希弗林记忆模型和Baddeley工作记忆模型巴德利工作记忆模型以及Tulving的长时记忆分类模型图尔文长时记忆分类模型——下面我们就来逐一介绍这些模型以及它们如何应用到AI Agent的状态管理中。2.1.1 Atkinson-Shiffrin记忆模型阿特金森-希弗林记忆模型Atkinson-Shiffrin记忆模型是由美国认知心理学家Richard Atkinson和Richard Shiffrin于1968年提出的——这是认知科学中第一个系统的记忆模型至今仍然被广泛使用。2.1.1.1 模型核心结构Atkinson-Shiffrin记忆模型将人类的记忆系统分为三个相互独立但又相互关联的阶段感觉记忆Sensory Memory也叫“瞬时记忆”——是记忆系统的第一个阶段负责接收和暂时存储来自感官视觉、听觉、嗅觉、味觉、触觉的信息。感觉记忆的存储时间非常短视觉感觉记忆约为0.25-1秒听觉感觉记忆约为2-4秒存储容量非常大几乎可以存储所有来自感官的信息但如果不经过注意Attention信息就会很快消失。短期记忆Short-Term Memory, STM也叫“工作记忆”后来Baddeley对这个概念进行了扩展我们后面会讲——是记忆系统的第二个阶段负责暂时存储和处理来自感觉记忆的、经过注意的信息以及从长期记忆中检索出来的信息。短期记忆的存储时间也比较短约为15-30秒如果不经过复述Rehearsal信息就会很快消失存储容量非常有限根据Miller的“神奇数字7±2”理论短期记忆的存储容量约为7±2个组块Chunk——比如你可以记住7个单独的数字也可以记住7个由多个数字组成的组块比如“13800138000”可以拆成“138”“0013”“8000”三个组块。长期记忆Long-Term Memory, LTM是记忆系统的第三个阶段负责永久存储经过复述和编码Encoding的信息。长期记忆的存储时间非常长可以是几分钟、几小时、几天、几年甚至一辈子存储容量几乎是无限的目前没有发现人类长期记忆的存储上限。2.1.1.2 模型的信息流动过程Atkinson-Shiffrin记忆模型的信息流动过程如下感觉输入来自感官的信息首先进入感觉记忆。注意只有经过注意的信息才会从感觉记忆进入短期记忆没有经过注意的信息会很快消失。复述只有经过复述的信息才会从短期记忆进入长期记忆没有经过复述的信息会很快从短期记忆中消失。检索当需要使用长期记忆中的信息时会从长期记忆中检索出来进入短期记忆进行处理。遗忘感觉记忆中的信息会因为没有经过注意而遗忘短期记忆中的信息会因为没有经过复述而遗忘长期记忆中的信息虽然几乎不会永久消失但可能会因为**干扰Interference或提取失败Retrieval Failure**而暂时无法检索出来。2.1.1.3 如何应用到AI Agent的状态管理中Atkinson-Shiffrin记忆模型给AI Agent的状态管理提供了非常重要的启发——我们可以把AI Agent的状态管理体系也分为三个相互独立但又相互关联的存储层感觉记忆层对应Redis等键值对数据库用来存储AI Agent刚刚接收到的、还没有经过处理的信息——比如用户的最新输入、工具的最新调用结果、知识库的最新检索结果。感觉记忆层的存储时间非常短比如只存储最近的1分钟或最近的10条信息存储容量非常大可以存储所有刚刚接收到的信息但如果不经过“注意”也就是AI Agent的调度器判断这些信息是否重要就会很快被删除。短期记忆层对应Redis等键值对数据库PostgreSQL等关系型数据库的临时表用来存储AI Agent正在处理的、经过“注意”的信息——比如当前的对话上下文、当前的任务状态、当前的用户需求、从长期记忆中检索出来的相关信息。短期记忆层的存储时间也比较短比如只存储当前的任务会话任务结束后就会被归档到长期记忆层存储容量有限比如只存储最近的100轮对话或最近的16k Token的信息或者根据任务的重要性动态调整如果需要长期保存就会被“复述”也就是AI Agent的状态管理器将这些信息进行编码存储到长期记忆层。长期记忆层对应ChromaDB等向量数据库PostgreSQL等关系型数据库Neo4j等图数据库用来存储AI Agent永久保存的、经过“编码”的信息——比如用户的所有历史对话、用户的画像、所有的任务历史、所有的工具调用结果、所有的知识库内容。长期记忆层的存储时间非常长可以永久存储除非手动删除存储容量几乎是无限的当需要使用这些信息时会被“检索”也就是AI Agent的状态管理器根据当前的任务需求从长期记忆层中智能地检索出相关的信息出来进入短期记忆层进行处理。2.1.2 Baddeley工作记忆模型巴德利工作记忆模型Atkinson-Shiffrin记忆模型将短期记忆和工作记忆视为同一个概念但后来的研究发现短期记忆不仅仅是一个“暂时存储信息的容器”它还是一个“处理信息的工作台”——也就是工作记忆。Baddeley工作记忆模型是由英国认知心理学家Alan Baddeley和Graham Hitch于1974年提出的——这个模型对Atkinson-Shiffrin记忆模型中的短期记忆进行了扩展将工作记忆分为四个相互独立但又相互关联的子系统语音回路Phonological Loop也叫“听觉-语言工作记忆”——负责暂时存储和处理语言、声音类的信息。语音回路又分为两个部分语音存储Phonological Store也叫“内耳”——负责暂时存储语言、声音类的信息存储时间约为1.5-2秒。发音复述装置Articulatory Rehearsal System也叫“内嘴”——负责通过默默复述的方式将语音存储中的信息保持下来或者将视觉类的信息转换成语音类的信息存储到语音存储中。视觉空间模板Visuospatial Sketchpad也叫“视觉-空间工作记忆”——负责暂时存储和处理视觉、空间类的信息比如图像、地图、物体的位置等。情景缓冲器Episodic Buffer这是Baddeley于2000年后来添加的子系统——负责暂时存储和整合来自语音回路、视觉空间模板、长期记忆的信息形成一个连贯的“情景”比如你正在回忆昨天和朋友一起去看电影的情景情景缓冲器会整合来自语音回路的电影台词、来自视觉空间模板的电影院画面、来自长期记忆的朋友的名字、电影院的位置等信息。中央执行系统Central Executive这是工作记忆的“指挥中心”——负责分配注意力、协调语音回路、视觉空间模板、情景缓冲器的工作、从长期记忆中检索信息、将信息编码存储到长期记忆中。2.1.2.1 如何应用到AI Agent的状态管理中Baddeley工作记忆模型给AI Agent的状态管理提供了更深入的启发——我们可以把AI Agent的短期记忆层工作记忆层也分为四个相互独立但又相互关联的子系统语言处理子系统对应语音回路负责暂时存储和处理语言类的信息——比如用户的最新输入、模型的最新输出、工具调用的文本结果、知识库检索的文本结果。视觉空间处理子系统对应视觉空间模板负责暂时存储和处理视觉、空间类的信息——比如用户上传的图片、地图API返回的地图、知识库中的图像内容。情景整合子系统对应情景缓冲器负责暂时存储和整合来自语言处理子系统、视觉空间处理子系统、长期记忆层的信息形成一个连贯的“当前任务情景”——比如规划欧洲蜜月旅行的当前任务情景会整合来自语言处理子系统的最新需求调整、来自视觉空间处理子系统的欧洲地图、来自长期记忆层的用户画像、第一天的核心信息、之前的所有细节调整等信息。中央调度子系统对应中央执行系统这是AI Agent状态管理的“指挥中心”——负责判断哪些信息是重要的注意、分配各个子系统的工作、从长期记忆层中智能检索相关信息、将信息编码存储到长期记忆层、将当前的任务情景组合成一个“精简但完整”的上下文发送给大模型。2.1.3 Tulving的长时记忆分类模型图尔文长时记忆分类模型Atkinson-Shiffrin记忆模型和Baddeley工作记忆模型都对长时记忆进行了定义但没有对长时记忆进行分类——后来的研究发现长时记忆可以分为两种不同的类型陈述性记忆Declarative Memory和程序性记忆Procedural Memory。而陈述性记忆又可以进一步分为两种类型情景记忆Episodic Memory和语义记忆Semantic Memory——这是由加拿大认知心理学家Endel Tulving于1972年提出的也就是Tulving的长时记忆分类模型。2.1.3.1 模型核心分类Tulving的长时记忆分类模型将长时记忆分为三个层次第一层陈述性记忆 vs 程序性记忆陈述性记忆Declarative Memory也叫“外显记忆Explicit Memory”——是指可以有意识地回忆出来的、关于“是什么What”的记忆比如事实、事件、概念等。陈述性记忆可以用语言表达出来。程序性记忆Procedural Memory也叫“内隐记忆Implicit Memory”——是指不需要有意识地回忆出来的、关于“怎么做How”的记忆比如骑自行车、游泳、打字、编程等。程序性记忆很难用语言表达出来只能通过实践来掌握。第二层陈述性记忆的进一步分类——情景记忆 vs 语义记忆情景记忆Episodic Memory是指关于个人经历的、有时间和空间标记的、“自传体式”的记忆比如“我昨天和朋友一起去看了《复仇者联盟5》电影院在朝阳区万达广场电影票是35块钱一张我们买了爆米花和可乐电影很好看最后钢铁侠复活了”——情景记忆有明确的“时间戳”和“地点戳”是关于“我在什么时候、什么地方、经历了什么事情”的记忆。语义记忆Semantic Memory是指关于客观世界的、没有时间和空间标记的、“百科全书式”的记忆比如“地球是圆的”“北京是中国的首都”“Python是一种编程语言”“11等于2”——语义记忆没有明确的“时间戳”和“地点戳”是关于“这个世界是什么样子的”的记忆。2.1.3.2 如何应用到AI Agent的状态管理中Tulving的长时记忆分类模型给AI Agent的状态管理提供了最核心的启发——我们可以把AI Agent的长期记忆层也分为三个相互独立但又相互关联的存储区域并且使用不同的数据库技术来存储不同类型的记忆程序性记忆存储区域对应PostgreSQL等关系型数据库的存储过程/触发器、或者LangChain的Tools库用来存储AI Agent关于“怎么做”的记忆——比如“如何调用天气API”“如何调用地图API”“如何调用酒店预订API”“如何规划旅行路线”“如何进行文本摘要”“如何进行实体提取”等。程序性记忆一般是AI Agent的开发者预先定义好的或者AI Agent通过强化学习Reinforcement Learning自己学到的——这部分记忆一般不需要经常更新使用关系型数据库的存储过程/触发器或者专门的Tools库来存储就可以了。情景记忆存储区域对应ChromaDB等向量数据库PostgreSQL等关系型数据库Neo4j等图数据库用来存储AI Agent关于“个人经历”的记忆——比如“用户张三在2025年4月1日咨询了欧洲蜜月旅行的规划预算合计€8000时间定在2025年4月15日-28日偏好自然风光、中世纪小镇和工业遗迹类的极客打卡点不会开车住店标准是四星但必须带独立阳台晾洗冲锋衣吃不吃辣完全无所谓但要避开生牛肉和太腥的海鲜第二天又补了女朋友有轻微花粉过敏、科隆大教堂登顶要取消、预算可以砍€500买Urbanears的复古耳机等信息”——情景记忆有明确的“时间戳”“用户ID戳”“任务ID戳”“地点戳”等需要能够根据时间、用户、任务、地点等多个维度进行检索因此需要结合向量数据库用来进行语义搜索、关系型数据库用来存储结构化的元数据比如时间戳、用户ID、任务ID、地点戳等、图数据库用来存储情景记忆之间的关联关系比如“用户张三的第一次欧洲蜜月旅行咨询”和“第二次欧洲蜜月旅行咨询”之间的关联关系“Urbanears的复古耳机”和“海牙的快闪店”之间的关联关系。语义记忆存储区域对应ChromaDB等向量数据库PostgreSQL等关系型数据库的知识表用来存储AI Agent关于“客观世界”的记忆——比如“荷兰的残株展是每年4月中下旬举办的”“Urbanears的Plattan 2复刻工业黑胶版本在海牙的皇家造船厂附近有快闪店每年残株展期间打7折还送同色系废弃造船厂钢板收纳盒”“Kinderdijk风车村是荷兰的世界文化遗产每年残株展期间有配套活动”“科隆大教堂的玻璃彩绘馆非常有名但是周末人很多建议工作日去”——语义记忆没有明确的“时间戳”“用户ID戳”“任务ID戳”但需要能够根据语义进行检索因此需要结合向量数据库用来进行语义搜索、关系型数据库用来存储结构化的元数据比如知识的类别、来源、更新时间等。2.2 相关工具/技术概览在上一节中我们介绍了认知科学中的记忆模型以及它们如何应用到AI Agent的状态管理中——在这一节中我们将介绍实现AI Agent Harness状态管理体系所需要的核心工具/技术包括AI Agent编排框架用来协调、管理AI Agent的各个核心组件大模型、工具集、状态存储器、调度器等。大模型用来理解用户的需求、生成对话内容、调用工具、进行信息编码和摘要等。向量数据库用来存储和检索语义信息比如情景记忆的文本内容、语义记忆的文本内容、用户的最新输入的向量表示等。关系型数据库用来存储和检索结构化的元数据比如情景记忆的时间戳、用户ID、任务ID、地点戳等语义记忆的类别、来源、更新时间等程序性记忆的存储过程/触发器等。图数据库用来存储和检索信息之间的关联关系比如情景记忆之间的关联关系、语义记忆之间的关联关系、用户和任务之间的关联关系等。键值对数据库用来存储和检索短期记忆、感觉记忆的信息比如用户的最新输入、工具的最新调用结果、当前的任务状态等。下面我们就来逐一介绍这些工具/技术的主流开源与商业方案以及它们的优缺点对比。2.2.1 AI Agent编排框架AI Agent编排框架是AI Agent Harness的“骨架”——没有它AI Agent的各个核心组件就无法协同工作。目前主流的AI Agent编排框架有以下几种框架名称开发公司/组织开源/商业核心特点优缺点适用场景LangChain LangGraphLangChain开源MIT许可证1. 基于状态机State Machine的编排方式非常适合处理复杂的、有状态的任务比如长对话、任务规划、多步骤工具调用2. 支持循环Loop、条件分支Conditional Branch、并行Parallel等多种控制流3. 支持持久化状态Persistence可以将状态保存到Redis、PostgreSQL、SQLite等数据库中4. 与LangChain的其他组件比如LangChain Core、LangChain Community、LangChain Text Splitters、LangChain Embeddings、LangChain Vector Stores等无缝集成5. 支持多种大模型OpenAI、Anthropic、Google、智谱AI、百度文心一言、阿里通义千问等6. 有非常活跃的社区和丰富的文档、教程、示例。优点1. 基于状态机的编排方式非常直观容易理解和调试2. 支持持久化状态非常适合处理长对话3. 与LangChain生态无缝集成开发效率高4. 社区活跃文档丰富遇到问题容易解决。缺点1. 学习曲线相对较陡尤其是对于没有接触过状态机的开发者2. 性能相对较低尤其是对于非常复杂的、有很多循环和并行的任务3. 目前还处于早期阶段截至2024年10月最新版本是0.2.xAPI还不够稳定。1. 长对话AI Agent2. 任务规划AI Agent3. 多步骤工具调用AI Agent4. 复杂的业务流程自动化AI Agent。AutoGenMicrosoft开源MIT许可证1. 基于多智能体协作Multi-Agent Collaboration的编排方式非常适合处理复杂的、需要多个智能体协同工作的任务比如代码生成与调试、法律文书审查、医疗健康咨询等2. 支持对话式协作Conversational Collaboration多个智能体可以通过自然语言对话来协同工作3. 支持自定义智能体Custom Agent可以根据任务的需要自定义智能体的角色、能力、提示词等4. 支持工具调用Tool Calling、代码执行Code Execution、**检索增强生成Retrieval-Augmented Generation, RAG**等多种能力5. 支持多种大模型OpenAI、Anthropic、Google、智谱AI、百度文心一言、阿里通义千问等6. 有非常活跃的社区和丰富的文档、教程、示例。优点1. 基于多智能体协作的编排方式非常适合处理复杂的任务2. 对话式协作非常直观容易理解和调试3. 支持自定义智能体灵活性非常高4. 社区活跃文档丰富遇到问题容易解决。缺点1. 学习曲线相对较陡尤其是对于没有接触过多智能体协作的开发者2. 状态管理相对较弱虽然支持持久化状态但不如LangGraph直观和方便3. 性能相对较低尤其是对于需要多个智能体频繁协作的任务4. 目前还处于早期阶段截至2024年10月最新版本是0.2.xAPI还不够稳定。1. 代码生成与调试AI Agent2. 法律文书审查AI Agent3. 医疗健康咨询AI Agent4. 金融投资分析AI Agent5. 复杂的内容创作AI Agent。CrewAIJoão Moura开源MIT许可证1. 基于角色分配Role Assignment和任务委派Task Delegation的编排方式非常适合处理有明确角色分工的任务比如内容创作团队、软件开发团队、市场营销团队等2. 支持自定义角色Custom Role、自定义任务Custom Task、自定义工具Custom Tool3. 支持多智能体协作、工具调用、RAG等多种能力4. 与LangChain生态无缝集成5. 支持多种大模型6. 有非常简洁的API和丰富的文档、教程、示例。优点1. 基于角色分配和任务委派的编排方式非常直观容易理解和使用2. API非常简洁开发效率高3. 与LangChain生态无缝集成4. 社区活跃文档丰富遇到问题容易解决。缺点1. 状态管理相对较弱2. 控制流相对简单不如LangGraph灵活虽然最新版本也支持循环和条件分支3. 性能相对较低。1. 内容创作团队AI Agent2. 软件开发团队AI Agent3. 市场营销团队AI Agent4. 简单的多步骤任务AI Agent。OpenAI Assistants APIOpenAI商业按Token和使用量付费1. 原生的、托管式的AI Agent服务不需要自己搭建基础设施2. 内置了Threads状态管理、Messages消息存储、Runs任务执行、RetrievalRAG、Code Interpreter代码执行、**Function Calling工具调用**等多种核心能力3. 支持持久化状态Threads可以永久存储除非手动删除4. API非常简洁开发效率极高5. 有非常丰富的文档、教程、示例。优点1. 原生的、托管式的服务