十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于图结构的智能体记忆系统GAM:原理、实现与应用

基于图结构的智能体记忆系统GAM:原理、实现与应用 1. 项目概述为什么我们需要“图”来为智能体构建记忆最近在折腾大语言模型智能体LLM Agents时我遇到了一个几乎所有开发者都会头疼的瓶颈记忆管理。你给智能体一个任务比如“帮我规划一个为期三天的北京旅游行程要包含文化古迹和现代地标”它第一次能给你一个不错的方案。但当你后续追问“把第二天下午的行程换成更轻松的活动”或者“第一天午餐推荐一家有特色的餐厅”时问题就来了。智能体要么完全忘记之前的对话上下文要么在冗长的历史记录里“迷路”给出的建议前后矛盾或者干脆丢失了关键的约束条件比如用户对海鲜过敏。这就是传统LLM智能体记忆系统的核心痛点——它本质上是线性的、扁平的。无论是简单的滑动窗口记忆还是基于向量数据库的检索增强记忆单元对话轮次、事实片段之间缺乏显式的、结构化的关联。智能体“知道”一堆事实但不知道这些事实是如何组织在一起的。这就像你有一个塞满了零散纸条的抽屉每张纸条都记着点东西但当你需要解决一个复杂问题时你很难快速理清纸条之间的逻辑、时序和重要性关系。而“GAM: Hierarchical Graph-based Agentic Memory”这个项目正是为了解决这个问题而提出的一个新颖架构。它的核心思想非常直观用图Graph来为智能体构建记忆系统。图这个在知识图谱、社交网络分析中广泛应用的数据结构其节点Node和边Edge的模型天生适合表示实体及其间丰富多样的关系。GAM将智能体在与环境、用户交互过程中产生的每一段记忆例如一个用户指令、一个执行结果、一个外部工具调用的反馈封装为一个节点然后根据记忆之间的语义、时序、因果等关系动态地构建和更新边。这不仅仅是换个存储格式那么简单。一个基于图的、层次化的记忆系统能让智能体实现几个关键的能力跃升关联性推理当处理新任务时智能体可以沿着图中的边进行“漫步”主动发现与当前情境相关的历史记忆而不是被动地等待被相似度检索出来。例如规划行程时它能自动关联起之前讨论过的“用户偏好”、“地理位置”、“开放时间”等节点。记忆抽象与压缩通过层次化结构低层的具体操作细节如“调用了天气API返回晴天”可以被抽象为高层的概念节点如“任务‘查询天气’成功完成”从而避免记忆膨胀保留核心逻辑脉络。主动性与目标导向“Agentic”这个词点明了其特性——记忆系统不再是静态的仓库而是能主动参与认知过程的智能体的一部分。GAM可以根据当前目标主动激活相关的记忆子图甚至预测未来可能需要的信息并提前准备。简单来说GAM试图赋予LLM智能体一个更接近人类工作记忆和长期记忆的结构化系统让它不仅能“记住”更能“联想”和“推理”从而在复杂的多轮交互和任务规划中表现得更连贯、更智能。接下来我们就深入拆解这个架构是如何工作的以及如何在实际项目中应用它。2. GAM架构核心设计思路拆解GAM不是一个单一的算法而是一个融合了图神经网络、认知架构和LLM推理能力的系统工程框架。它的设计紧密围绕智能体执行任务的闭环流程我们可以将其分解为几个核心的、相互协作的模块来理解。2.1 记忆的图结构表示节点、边与层次一切的基础是如何将非结构化的交互信息转化为结构化的图。记忆节点Memory Node这是图的基本单元。一个节点不仅仅是一段文本。在实践中一个完整的记忆节点通常包含多个字段内容Content记忆的核心文本信息例如用户查询“推荐几家上海的咖啡馆”或工具调用结果“{‘status’: ‘success’ ‘data’: […]}”。元数据Metadata这是实现智能管理的关键。至少包括timestamp: 创建时间戳用于时序关系。type: 节点类型如UserQueryAgentActionToolObservationInternalThought等。不同类型的节点可能触发不同的处理逻辑。embedding: 内容经过嵌入模型如text-embedding-3-small得到的向量用于相似性检索和计算。importance_score: 一个动态计算的权重表示该记忆对全局任务的重要性。初始值可由LLM根据上下文评估后续根据访问频率、与其他关键节点的连接强度等因素更新。摘要Summary对于冗长的内容如一大段网页摘要由LLM生成一个简洁的概要用于快速理解和上层抽象。记忆边Memory Edge边定义了节点之间的关系是图产生“智能”的纽带。边的类型是预定义且可扩展的时序边Temporal表示事件发生的先后顺序。这是最基础的边保证了记忆流的基本连贯性。语义相似边Semantic基于节点嵌入向量的余弦相似度建立。当两个节点谈论高度相关的话题时即使词汇不同它们之间会产生这条边。这是实现“联想”检索的基础。因果边Causal表示“导致”关系。例如一个“执行Python代码失败”的节点可能因果连接到“引入调试语句”的节点。这类边通常需要LLM来识别和创建。引用边Referential当一个节点明确提及或指向另一个节点中的实体或概念时建立。例如用户说“用刚才提到的那个方法再试一次”“刚才提到的那个方法”对应的节点就会与当前节点建立引用边。所属边Part-of用于构建层次结构。一个高层级的“任务”节点如“开发登录模块”可以拥有多个“子任务”节点如“设计数据库表”、“编写API接口”。层次化组织Hierarchical Organization这是GAM中“Hierarchical”的体现。记忆图不是扁平的一张网而是有层次的。工作记忆层Working Memory位于最顶层容量有限存放与当前任务最直接相关、高度活跃的节点子图。它相当于智能体的“意识焦点”。情节记忆层Episodic Memory中层存储具体的、带有时间戳的交互经历。大部分原始记忆节点和它们丰富的边关系存在于这一层。语义记忆层Semantic Memory最底层存储从多次经历中抽象、提炼出来的事实、概念和规则例如“用户张三通常喜欢简洁的回复”、“调用天气API在傍晚容易超时”。这一层的节点更稳定连接更体现概念间的逻辑关系。这种层次结构通过“所属边”和定期的“记忆压缩”过程来维护。当情节记忆层的某个子图代表一个完整子任务变得稳定且不常被访问时GAM可以调用LLM将其“摘要”成一个更高层的语义节点并建立正确的连接从而释放细节保留精髓。2.2 智能体与记忆图的交互循环GAM被深度集成到智能体的推理-行动循环中其交互流程可以概括为以下四步感知与编码Perception Encoding智能体接收到新的观察用户输入、工具输出、环境状态立即创建一个新的记忆节点并提取其嵌入向量。同时系统会尝试将这个新节点与现有记忆图建立初步连接例如自动链接到上一个时序节点计算与最近几个节点的语义相似度。记忆检索与激活Retrieval Activation这是核心步骤。当智能体需要为当前决策寻找上下文时它不会进行简单的全文检索。而是启动一个图遍历Graph Traversal过程。这个过程通常是多跳Multi-hop和目标导向Goal-directed的。启动点通常以当前工作记忆中的节点或新创建的节点为起点。遍历策略策略可以由规则或一个小型神经网络图注意力网络来定义。例如“沿着因果边和引用边向前/向后探索2跳”“收集所有语义相似度大于0.7的邻居节点”“优先探索重要性分数高的边”。LLM作为推理器在复杂情况下LLM本身可以参与指导遍历。系统可以向LLM描述当前图的一部分和任务目标询问“为了完成X你认为接下来应该查看图中哪类信息” LLM的回复可以转化为具体的遍历指令。最终这个过程会返回一个激活的子图这个子图包含了与当前情境最相关的节点集群。推理与决策Reasoning Decision智能体LLM的提示词Prompt现在不仅包含原始的对话历史和当前查询还包含一个对激活子图的文本化描述。这个描述可能包括子图中节点的摘要、边所代表的关系。这相当于给LLM提供了一张精心绘制的、与问题相关的“思维导图”极大提升了其推理的连贯性和深度。基于此LLM做出决策生成回复、选择工具、制定计划。记忆更新与巩固Update Consolidation智能体行动后结果会作为新的记忆节点存入图。同时系统会根据本次交互动态更新图的结构和节点属性边权强化/衰减被成功用于推理的边其权重或重要性会增加长期未被使用的边会衰减。节点重要性重估参与关键决策或与许多重要节点相连的节点其importance_score会提升。层次化压缩在后台系统定期检查情节记忆层。对于已经完成且一段时间未被触及的复杂任务子图触发压缩过程用LLM生成一个概要性的语义节点替换掉原来的详细子图但保留关键的输入输出和结论性边。这个循环使得GAM成为一个自演进、自组织的记忆系统它随着智能体的经历不断生长和优化变得越来越擅长为智能体提供精准的上下文支持。2.3 与现有方案的对比为什么是图为了更清楚GAM的价值我们将其与几种常见的记忆方案放在一起对比记忆方案核心机制优点缺点适用场景固定上下文窗口保留最近N轮对话的原始文本。实现简单零延迟。记忆容量固定容易遗忘早期关键信息信息无结构干扰多。简短、线性的对话任务。向量数据库检索将每轮对话嵌入为向量通过相似度搜索召回相关片段。突破长度限制能关联语义相似的历史。检索结果孤立、扁平缺乏片段间的逻辑关系容易受相似但无关文本干扰“语义漂移”。知识问答、基于文档的对话。摘要压缩定期用LLM将长上下文总结成一段摘要保留摘要。显著节省上下文空间保留宏观信息。细节丢失严重摘要本身成为新的信息瓶颈难以追溯细节。超长对话的宏观状态维持。GAM图记忆将记忆构建为带有多元关系、层次结构的图通过图遍历激活相关子图。记忆结构化保留丰富关系支持多跳、关联性推理记忆主动激活与目标协同支持动态演化与抽象。架构复杂实现成本高图遍历可能带来额外计算开销需要精心设计节点/边schema。复杂的多轮任务、需长期状态维护的智能体、涉及复杂规划和推理的场景。可以看出GAM在解决复杂性和关联性问题上优势明显但它是以更高的系统复杂性为代价的。因此它并非要取代向量检索等简单方案而是在智能体面临需要“真正理解”任务上下文和自身历史时提供了一个更强大的底层支持。3. 核心模块实现与实操要点理解了设计思路后我们来探讨如何动手实现一个GAM系统的核心模块。这里不会给出每一行代码但会详细说明关键组件的设计决策、实现路径和需要注意的“坑”。3.1 图数据库的选择与建模存储和查询记忆图需要一个合适的图数据库。选择时主要考虑对属性图的支持、查询语言的表现力、与Python生态的集成度以及是否支持嵌入向量的近似最近邻搜索。Neo4j行业标杆拥有强大的Cypher查询语言和丰富的生态。社区版免费但生产环境需付费。它的APOC库提供了丰富的图算法。对于重度依赖复杂图遍历的场景Neo4j是可靠选择。Nebula Graph开源分布式图数据库擅长处理超大规模图。性能强劲但运维和客户端生态相对Neo4j稍显年轻。基于向量的混合方案一个非常实用的折中方案是使用RedisGraph或Memgraph 向量数据库如Qdrant Weaviate。RedisGraph处理图关系查询向量数据库专门负责基于嵌入的相似节点检索。两者通过节点的唯一ID关联。这种解耦设计提供了灵活性Weaviate甚至原生支持将向量和图存储结合在一起。实操心得对于大多数LLM智能体项目如果图规模在百万节点以下且团队熟悉Python从Neo4j开始是最稳妥的。它的Cypher语言非常直观例如查找一个节点所有“因果”前驱节点的查询可以写成MATCH (n:MemoryNode {id: $node_id})-[:CAUSAL]-(predecessor) RETURN predecessor。如果对延迟极其敏感或需要云原生部署可以评估RedisGraph。数据建模示例 在Cypher中我们的记忆图模型可以这样定义// 创建节点并设置属性 CREATE (n:MemoryNode { id: unique_uuid, content: 用户说我想去北京玩三天, type: UserQuery, timestamp: datetime(), importance: 0.8, embedding: [0.12, 0.34, ...] // 通常实际存储时嵌入向量可能存于专门字段或外部向量库 }) // 创建关系边 MATCH (a:MemoryNode {id: id_a}) (b:MemoryNode {id: id_b}) CREATE (a)-[r:SEMANTIC_SIMILARITY { similarity: 0.92, created_at: datetime() }]-(b)关键是要为MemoryNode设计好索引比如在idtimestamptype上创建索引并在embedding属性上创建向量索引如果数据库支持以加速查询。3.2 记忆的编码与关系提取如何从原始文本中自动、准确地创建节点和边这需要一套处理流水线。节点创建相对直接。每当有新事件用户消息、工具响应、内部决策就创建一个节点对象填充contenttimestamptype。然后使用嵌入模型如OpenAI的text-embedding-3-small或开源的BGE-M3生成embedding。importance_score可以初始化为一个默认值如0.5或在创建时由一个小型LLM如GPT-3.5-Turbo根据当前对话的紧迫性和全局性进行评估。关系提取这是更具挑战性的一步决定了图的质量。可以采用混合策略基于规则的边时序边可以自动根据timestamp顺序创建。语义相似边可以通过计算新节点与最近N个节点或所有节点借助向量索引进行近似搜索的嵌入余弦相似度超过阈值如0.85则创建。基于LLM的关系提取对于因果边、引用边这类需要深层语义理解的连接必须依赖LLM。我们可以设计一个提示词让LLM分析两段文本记忆内容之间的关系。你是一个关系提取专家。请分析以下两段文本之间是否存在强因果关系A导致B、引用关系B提到了A中的概念或其他逻辑关系。 文本A: {memory_content_a} 文本B: {memory_content_b} 请只输出JSON格式{relationship_type: CAUSAL|REFERENTIAL|NONE confidence: 0.95 reason: 简短解释}为了提高效率不必对所有节点两两配对。可以先用基于规则的方法如时序邻近、语义相似筛选出候选节点对再送交LLM进行精细判断。注意事项LLM关系提取是性能和成本的瓶颈。务必进行批量处理并设置合理的频率例如每积累5个新节点或当一个任务阶段完成时才触发一次关系提取。同时要对LLM的输出进行严格的格式校验和去重处理避免创建重复或矛盾的边。3.3 图遍历与记忆检索策略这是GAM的“大脑”决定了如何从海量记忆中快速找到最相关的部分。简单的做法是“向量搜索一度邻居”但这浪费了图的结构信息。更高级的策略包括个性化PageRank算法将当前工作记忆中的节点作为“种子”节点在全局图上运行Personalized PageRank。算法会模拟一个随机游走者它更倾向于从种子节点出发并在游走过程中根据边权重选择路径。最终每个节点会得到一个“相关性分数”。排名靠前的节点即构成激活子图。这种方法能捕获多跳之外的间接相关节点。图神经网络GNN编码将整个图或一个子图通过GNN如GraphSAGE GAT编码成一个整体的向量表示。当新查询到来时计算其嵌入向量与这个整体图向量的交互或者用GNN的消息传递机制将查询作为特殊节点注入图中计算所有节点相对于该查询的注意力权重。权重高的节点即为相关节点。这种方法非常强大但需要训练和更多的计算资源。启发式多跳遍历一套由规则控制的遍历逻辑更轻量易于解释。例如算法目标导向的多跳检索 输入当前查询Q 起始节点S通常是最近节点 输出相关节点列表R 1. 将S加入待探索队列Frontier和结果集R。 2. 当Frontier非空且R大小未达上限 a. 从Frontier中取出节点N。 b. 获取N的所有邻居节点Neighbors。 c. 对每个邻居M i. 计算M的内容与查询Q的语义相似度Sim_q。 ii. 计算边(N-M)的权重W综合考虑边类型权重和自定义权重。 iii. 计算M的最终得分 Sim_q * W * (M的重要性分数)。 iv. 如果得分超过阈值将M加入R和Frontier如果M未被访问过。 3. 返回按得分排序的R。这个算法会沿着图结构优先探索与当前查询语义相关、边权重高、且节点本身重要的路径。实操心得在项目初期从启发式规则开始是最快的。你可以先实现上述的启发式遍历并定义几种简单的边类型时序、语义。通过日志记录每次检索返回的节点人工评估其相关性然后迭代调整规则和阈值。当规则变得过于复杂时再考虑引入PageRank或简单的GNN模型。记住可解释性在调试阶段至关重要黑盒模型一旦出问题很难定位。3.4 记忆的压缩、抽象与遗忘机制一个无限增长的图最终会拖慢系统并引入噪声。GAM需要像人脑一样对记忆进行“消化”和“清理”。记忆压缩当某个子图例如代表一个已完成的“数据预处理”任务在较长时间内如24小时处于稳定状态没有新边连接节点重要性衰减可以触发压缩。调用LLM将该子图的所有节点内容作为上下文要求生成一个摘要节点。摘要节点应概括该子任务的目标、关键步骤和结果。然后用这个摘要节点替换原子图并将原子图中最重要的输入/输出节点与摘要节点连接。原子图中的其他节点可以归档到冷存储或直接删除。重要性衰减与遗忘每个节点的importance_score不应是静态的。可以设计一个衰减函数例如每次全局检索后未被激活的节点重要性轻微下降被激活的节点重要性上升。同时节点的初始重要性也会随时间自然衰减。当节点的重要性低于一个极低的阈值时可以将其移出主图归档。另一种策略是基于图的连通性如果一个节点变得“孤立”连接边很少且权重低即使其自身内容重要也可能意味着它已不再与当前任务流相关可以降低其优先级。注意事项压缩和遗忘是高风险操作。压缩可能丢失未来需要的细节遗忘可能误删关键信息。因此这些操作必须是保守的、可逆的。在压缩前可以保留原子图的快照在删除节点前先将其移动到“回收站”图空间保留一段时间。同时提供手动干预的接口允许开发者标记“受保护”的关键记忆节点。4. 实战应用构建一个具备GAM的旅行规划智能体让我们通过一个具体的例子将上述理论串联起来。假设我们要构建一个“旅行规划智能体”它可以帮助用户规划多日行程并能根据用户持续的、碎片化的反馈进行调整。4.1 系统初始化与基础配置首先我们选择Neo4j作为图数据库并定义好节点和边的属性。# 伪代码示例初始化Neo4j驱动和基础配置 from neo4j import GraphDatabase import openai from sentence_transformers import SentenceTransformer class GAMConfig: def __init__(self): self.neo4j_uri bolt://localhost:7687 self.neo4j_user neo4j self.neo4j_password password self.embedding_model SentenceTransformer(BAAI/bge-small-zh-v1.5) # 中文嵌入模型 self.llm_client openai.OpenAI(api_keyyour_key) # 关系类型及其初始权重 self.relation_weights { TEMPORAL_NEXT: 1.0, SEMANTIC_SIMILAR: 0.9, CAUSAL: 1.2, # 因果边权重更高 REFERENTIAL: 1.1, PART_OF: 1.0 } # 检索相关阈值 self.semantic_similarity_threshold 0.82 self.importance_threshold 0.3我们使用一个轻量级的嵌入模型来生成向量并为不同类型的关系赋予不同的初始权重以影响图遍历的优先级。4.2 单轮交互的完整流程拆解假设用户输入“我想下周末去杭州玩喜欢自然风光和人文历史预算中等。”感知与编码智能体接收消息创建一个UserQuery类型节点N1。内容为原始用户输入。调用嵌入模型生成向量emb1。初始重要性设为0.7因为是新任务起点。将N1存入Neo4j。自动创建一条从N1到上一个对话节点如果有的TEMPORAL_NEXT边。记忆检索与激活以N1为起点启动图遍历。首先进行一度邻居检索找到与N1有直接边连接的节点目前可能只有上一个时序节点如果这是对话开始则为空。同时进行语义检索在向量索引中搜索与emb1最相似的Top-K个历史节点。假设找到了一个历史节点H1内容是“用户去年去过杭州对西湖和灵隐寺评价很高”相似度0.88。遍历算法发现H1与N1相似度高且H1本身重要性不低于是将H1及其直接关联的节点例如当时规划的具体行程节点H2加入激活子图。最终激活子图包含N1H1H2。推理与决策智能体LLM的提示词被构造成你是一个旅行规划助手。以下是当前用户查询和相关的历史记忆片段。 当前查询[用户输入内容] 相关历史记忆 - [记忆H1的内容摘要] - [记忆H2的内容摘要] (来自H1关联的行程) 请基于以上信息为用户生成一个初步的杭州周末游想法。LLM基于此生成了一个包含西湖、灵隐寺、西溪湿地的初步行程草案。这个回复被创建为一个AgentResponse节点A1并与N1通过TEMPORAL_NEXT和CAUSAL边连接因为A1是对N1的响应。记忆更新用户可能回复“灵隐寺不错但西溪湿地上次去过了这次想换个地方比如龙井村喝茶。”这创建了新节点N2。系统自动创建N2到A1的TEMPORAL_NEXT边。关键的一步LLM被调用来分析N2与历史节点的关系。它识别出N2“否定”了A1中的部分建议西溪湿地并“引用”了历史记忆H1因为用户提到了“上次”同时提出了新需求“龙井村”。因此系统创建N2到A1的REFERENTIAL边带有“否定”属性N2到H1的REFERENTIAL边以及N2到N1的SEMANTIC_SIMILAR边因为都在讨论杭州旅行。节点A1的重要性因为被“否定”而略微下降节点H1因为被再次引用而重要性上升。通过这个流程记忆图不再是孤立的对话记录而是形成了一个网络。当用户后续再提到“预算”时系统不仅能找到N1中的“预算中等”还能通过N1关联到整个旅行规划的子图提供更一致的体验。4.3 长期任务中的记忆演化示例假设这个旅行规划持续了多天用户不断添加、修改细节。第1天创建了以N1初始需求为根节点的任务子图包含了多个AgentResponse和UserFeedback节点。第3天行程基本确定。系统后台的“记忆压缩”进程被触发。它识别到这个关于“杭州周末游”的子图已经24小时没有重大变更无新需求只有确认性反馈。压缩过程LLM被调用输入该子图中所有主要节点的内容输出一个摘要“用户计划下周末进行杭州两日游偏好自然与人文中等预算。已确定行程包含西湖、灵隐寺、龙井村。住宿和交通细节已初步确认。”图更新创建一个新的SemanticMemory节点S1内容为上述摘要。将S1与最顶层的任务目标节点N1用SUMMARY_OF边连接。原子图中的大部分细节节点被标记为“可归档”其重要性大幅降低。但关键的决策节点如最终版的行程单仍保留并通过PART_OF边连接到S1。效果当一周后用户突然问“我们之前决定的杭州行程总预算是多少”系统会先检索到高层的摘要节点S1然后通过S1快速定位到包含预算信息的那个关键细节节点而不是在几十条原始对话记录中盲目搜索。5. 常见问题、挑战与优化策略实录在实际实现和调试GAM系统的过程中我遇到了不少典型问题。这里记录下其中的一些及其解决思路。5.1 图规模膨胀与查询性能下降问题随着交互次数增加记忆图节点和边数量呈线性甚至更快增长。复杂的多跳遍历查询尤其是涉及全图扫描的算法如Personalized PageRank延迟显著增加。排查与解决索引优化确保在图数据库中对常用查询字段timestamptypeimportance建立了索引。对于向量相似度搜索务必使用数据库的向量索引功能。层次化检索不要总是从全图开始搜索。采用“工作记忆 - 近期情节记忆 - 全局语义记忆”的层级化检索策略。首先在工作记忆一个维护在内存中的小型子图缓存中查找未命中再扩展到最近N小时的情节记忆最后才查询全局图。这符合人类“先想最近的事”的认知习惯。图分区Sharding如果使用支持分布式的图数据库如Nebula Graph可以按用户ID、会话ID或时间范围对图进行分区将查询限制在单个分区内。定期归档与压缩严格执行前面提到的记忆压缩和重要性衰减策略将不再活跃的细节移出在线图数据库存入成本更低的文档数据库如MongoDB或对象存储仅保留索引指针。这是控制在线图规模最有效的手段。5.2 关系提取不准确与图噪声问题自动创建的边尤其是LLM提取的因果边、引用边可能存在错误或者大量低权重的语义相似边形成“毛球”干扰图遍历。排查与解决LLM提示词工程为关系提取设计更精确的提示词要求LLM不仅判断关系类型还要给出置信度。只采纳高置信度如0.9的关系。可以给出更具体的关系定义和例子。后处理与去重实现一个后处理模块定期扫描图中的边。对于连接同一对节点、类型相同的多条边进行合并权重取最大值或平均值。对于长期权重很低、从未被遍历使用的边可以考虑移除。人工反馈回路在开发调试阶段提供一个可视化界面展示自动创建的关系。允许开发者对错误的关系进行“否决”。这些否决信号可以作为训练数据未来可以微调一个小型分类器来过滤常见错误模式减少对昂贵LLM的依赖。阈值调优语义相似边的创建阈值需要谨慎调优。过低的阈值会产生大量弱相关连接形成噪声过高的阈值则会丢失潜在的有用关联。建议根据业务场景在验证集上调整。5.3 LLM调用成本与延迟过高问题GAM的多个环节节点重要性评估、关系提取、记忆压缩都依赖LLM API调用导致单次交互成本高、延迟长。排查与解决异步与非阻塞操作将非关键路径的LLM调用异步化。例如关系提取和记忆压缩可以在后台线程或任务队列中执行不影响智能体主线程的响应。用户得到即时响应后记忆图在后台慢慢更新。小型化与专用化模型并非所有任务都需要GPT-4。节点重要性初筛、简单的关系分类是/否因果可以使用更小、更快的模型如ChatGLM3-6B的API或本地部署的7B-14B参数模型。只有复杂的摘要生成和深层推理才使用大模型。批量处理不要每产生一个节点就立即提取它与所有历史节点的关系。可以积累一批新节点例如一个对话回合结束然后批量进行关系计算利用LLM的批量处理能力降低成本。缓存对于频繁出现的、模式固定的查询如“总结这个子图”如果输入内容相似可以缓存LLM的输出结果。但要注意缓存失效问题当底层节点有更新时缓存需清除。5.4 评估GAM的有效性问题如何量化GAM给智能体带来的提升不能只靠感觉。评估策略设计基准测试构建一组复杂的、多轮的任务场景如上述旅行规划、技术问题排查、多步骤创作等。为每个场景设计标准对话流和预期的最终输出。A/B测试在相同任务上分别运行使用GAM的智能体和使用传统向量检索记忆的智能体控制变量。评估指标任务完成度最终输出是否满足所有用户需求上下文一致性在多轮对话中智能体的回复是否前后矛盾是否忘记了早期设定的重要约束交互轮次完成相同复杂度的任务平均需要多少轮对话更少的轮次通常意味着更高的效率。用户满意度模拟可以请评审员或使用一个评判LLM对两组对话的连贯性、 helpfulness进行打分。记忆检索相关性在每次需要记忆时记录系统检索到的节点人工判断其与当前问题的相关性比例。通过这样的定量和定性评估才能客观地衡量GAM的价值并指导后续的优化方向。
返回列表