云计算百科
云计算领域专业知识百科平台

Agent记忆记得一切却理解不了 因为缺少大脑蓝图

Agent记忆记得一切却理解不了 因为缺少大脑蓝图

你的Agent把所有对话、文档、事实都存进了记忆,查询时却经常返回噪声。向量库按相似度召回,跨块连接直接失效;换上知识图谱,节点和边有了,可实体全是“Topic”,关系全是“RELATES_TO”,按严重程度或客户层级过滤根本做不到。数据在,结构却不在。Agent没忘任何东西,只是没人告诉它该关注什么。

我起初以为,把事实塞进图谱就能自动获得多跳推理。后来把客服场景的50段真实对话跑通,才发现:LLM自己决定实体类型、关系标签和属性时,结果永远是通用的。图谱退化成了昂贵的向量库。真正的修复很直接——提前定义模式,把领域蓝图写进提取模型。这份蓝图就是本体。

平面检索为何在多跳推理上崩溃

向量记忆把事实切成文本块,靠语义相似度召回。这在单块事实时够用,一旦查询需要连接不同块的事实,立刻失效。

三句事实:

  • Alice管理Project Atlas
  • Project Atlas跑在PostgreSQL上
  • PostgreSQL集群周二宕机

问“Alice的项目是否受周二宕机影响”,需要三条全部串起来。向量搜索通常只召回第1和第3条——它们都提到相关词。第2条是桥梁,既不提Alice也不提周二,相似度匹配直接漏掉。

知识图谱把实体变成节点、关系变成边,靠遍历而不是匹配。那条链(Alice → manages → Project Atlas → runs on → PostgreSQL)对平面检索不可见,对图谱却是原生支持。

记忆流水线里真正决定一切的一步

图基Agent记忆几乎都走同一条流水线:

  • 摄入:原始数据(对话、文档、JSON)进来
  • 提取:LLM读数据,决定实体、关系和属性
  • 存储:实体变节点,关系变边,写入图谱
  • 检索:查询时遍历图谱,组装相关事实
  • 交付:格式化成上下文块,注入Agent提示
  • 提取是黑盒。你把文本丢进去,LLM自己挑类型、标签、属性。你对分类和结构零控制。客服场景里,工单变成“Topic”,客户变成“Object”,关系变成“RELATES_TO”。数据全在,却无法按类型、严重程度或套餐层级过滤。查询返回噪声。

    用Pydantic把模式提前钉死

    修复方式和AI栈其他地方一模一样。FastAPI用Pydantic响应模型,函数调用用Pydantic schema,Agent记忆也一样。

    在Zep里,用EntityModel(Pydantic BaseModel子类)定义自定义实体类型,配上EntityText字段和描述。描述和文档字符串至关重要——具体例子给提取模型足够信号,教它原本不知道的词汇。

    # 定义用户实体 —— 描述直接指导提取模型分类
    from zep_cloud.types import EntityModel, EntityText

    class User(EntityModel):
    """公司内部或外部的实际人员,包括员工、客户、合作伙伴"""
    name: EntityText = Field(description="全名,例如 'Alex Chen' 或 '企业客户 Acme'")
    role: EntityText = Field(description="职位或角色,例如 'lead developer' 或 'enterprise account manager'")
    plan_tier: EntityText = Field(description="客户套餐层级,仅客户实体有效,例如 'enterprise' 或 'pro'")

    # 技术实体同样模式
    class Technology(EntityModel):
    """编程语言、框架、数据库或基础设施组件"""
    name: EntityText = Field(description="技术名称,例如 'PostgreSQL' 或 'Docker'")
    category: EntityText = Field(description="类别,例如 'database'、'container' 或 'language'")

    边类型用EdgeModel,并携带属性:

    class WorksOn(EdgeModel):
    """用户在某个项目上的工作关系"""
    role: EntityText = Field(description="在该项目中的具体角色,例如 'lead developer'")

    class UsesTechnology(EdgeModel):
    """用户使用某项技术的熟练程度关系"""
    proficiency: EntityText = Field(description="熟练度,例如 'advanced' 或 'intermediate'")

    最后用EntityEdgeSourceTarget把源/目标约束写进图谱:

    # 约束强制类型安全
    # WORKS_ON 只能连接 User → Project
    # USES_TECHNOLOGY 只能连接 User → Technology
    # 不符合约束的关系不会产生类型化边

    模式一旦激活,提取流水线跑五步:实体识别 → 实体解析(合并“Nexus”和“the Nexus project”)→ 事实提取(输出类型化边)→ 事实解析(检测矛盾并失效旧事实,保留历史)→ 时间提取(把时间引用映射到边的有效窗口)。你的Pydantic模式直接指导第1和第3步。

    实际走通一次摄入与查询

    摄入一段开发者Alex讨论工作的对话(活跃Web应用Nexus、技术栈、熟练度)。查询Project节点,返回的是带project_status和project_type属性的Nexus,而不是通用“Topic”。边也是类型化的:WORKS_ON带着role: lead developer,USES_TECHNOLOGY带着对应熟练度。现在可以精确过滤“哪些活跃项目使用PostgreSQL”。

    上下文模板再把类型化事实组装成提示就绪块。你定义要包含哪些边类型和实体类型,Zep加上时间注解,格式化成单一字符串注入Agent。

    10/10/10硬约束与模式作为推理边界

    Zep强制最多10个自定义实体类型、10个边类型、每类型最多10个字段。这是刻意的——逼开发者先想清楚领域里真正重要的东西,而不是建模一切。

    源/目标约束同时是护栏:模式里没有Project到Competitor的边类型,即使对话提到两者,提取模型也不会创建该关系。模式定义了合法记忆的空间。这和类型化函数调用同一原理——约束LLM输出空间,防止无效参数。记忆模式把同样约束应用到Agent存储的内容上。

    从3-4个实体类型和3-4个边类型开始,先覆盖领域逻辑的80%,再增量加复杂。

    无模式约束的Agent记忆,就是一个行为像向量库的图谱。你付了图谱构建的成本,却没拿到结构化检索的收益。模式是把收益拿回来的方式,而且它是Pydantic,没有新东西要学。

    这在领域专用场景尤其明显。LLM对通用知识提取还过得去,一旦出现内部术语、与常见词碰撞的产品名、训练数据里没有的黑话,无指导提取就产出胡言。模式把领域词汇直接带进提取步骤,LLM不需要见过你的术语,只需要你写的定义。

    向量记忆便宜却扁平,无模式图谱昂贵却通用,有模式的图谱才真正让多跳推理可过滤、可查询、可信任。你现在的Agent记忆,是在用哪种方式记住世界的?欢迎直接说。

    我是紫微AI,在做一个「人格操作系统(ZPF)」。后面会持续分享AI Agent和系统实验。感兴趣可以关注,我们下期见。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Agent记忆记得一切却理解不了 因为缺少大脑蓝图
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!