从对话到人物画像
理解用户状态只是瞬间快照。上一章我们解决了Agent”此刻看到了什么”的问题,但持续认知要求Agent回答”他是谁”的问题。
传统Agent的用户建模通常止步于两个极端:要么是简单的标签系统(”用户喜欢披萨”),要么是庞大的对话历史记录堆砌。前者信息密度太低,后者信噪比太差。这两种方法都无法支撑真正的持续认知。
我们需要一个中间层,一个能够承上启下的认知演化模型。
我们提出的认知演化链路如下:
Dialogue → Situation → Scenario → Scenario Graph → Persona
这不是简单的数据处理流水线,而是Agent认知的压缩与抽象过程。每一步都是对信息的重构,而非单纯的过滤。
Dialogue:原始观察数据
Dialogue是Agent与用户交互的最原始载体。它包含文本、语音特征、多模态信号,以及交互的时间戳。
当前主流架构对Dialogue的处理方式存在根本性缺陷:直接作为上下文喂给LLM,或者简单地向量化存入向量数据库。这种方法默认对话本身就是有价值的认知单元。
这是错的。
Dialogue本质上是高噪音、低密度的原始信号流。用户说的一百句话里,可能只有三句包含关键信息,其余都是寒暄、重复、废话或情绪宣泄。将原始对话作为记忆单元,等于让Agent背着垃圾前行。
更重要的是,Dialogue是线性的、碎片化的。它缺乏结构,缺乏因果,缺乏意图。它只是影子,不是物体本身。
Agent需要从Dialogue中提取的不是”用户说了什么”,而是”发生了什么”。这就引出了Situation。
Situation:一次事件
Situation是对Dialogue的第一次抽象。它将线性的对话流切割成离散的事件切片。
Situation的定义:在特定时间窗口内,发生的一次可观测的状态变化。
它包含三个核心要素:
- 时间边界:事件发生的起止时间。
- 参与实体:用户、Agent、第三方(人或物)。
- 状态变化:实体属性或关系的改变。
例如:
- Dialogue: “我刚把项目搞砸了,老板骂了我一顿,烦死了。”
- Situation: {时间: 2024-05-21 14:00, 实体: [用户, 项目, 老板], 事件: 项目失败 -> 老板批评 -> 用户负面情绪}
从Dialogue到Situation的过程,是信息抽取与结构化的过程。这需要NLP技术(实体识别、关系抽取、事件检测),但更需要Agent具备”什么重要”的判断力。
Situation解决了”发生了什么”的问题,但它仍然是孤立的点。知道”用户被老板骂了”是有用的,但这不足以构建Persona。我们需要知道这件事在用户生活中的位置。
Scenario:具有目标与上下文的认知单元
这是本系列的核心命题:Scenario是持续认知Agent的最小认知单元。
Situation只是事实,Scenario才是意义。
Scenario的定义
Scenario = Situation + Context + Goal
- Situation:发生了什么。
- Context:在什么背景下发生。包括用户的历史状态、环境约束、社会关系网络。
- Goal:用户在这个场景下的意图或目标。注意,是用户的Goal,不是Agent的Goal。
继续上面的例子:
- Situation: 用户被老板批评。
- Context: 用户正处于项目冲刺期,睡眠不足,该用户对职业发展敏感。
- Goal: 用户希望获得职业认可,或至少保住工作。
组合成Scenario:
{事件: 项目失败被批评, 背景: 高压冲刺期, 隐含目标: 职业生存与认可}
为什么Scenario是核心?
1. 它是记忆的最佳载体。
存储原始对话是浪费,存储Situation是碎片,存储Scenario才是知识。Scenario将孤立的事件挂载在目标树上,形成了有意义的结构。
2. 它是推理的必要上下文。
Agent要理解用户当下的情绪和行为,必须理解其背后的Goal。不知道用户想保住工作,就无法理解他为什么被骂后不是愤怒而是焦虑。Goal藏在Scenario里。
3. 它是情绪的生成土壤。
情绪不是凭空产生的。情绪源于Goal与现实之间的Gap。没有Goal就没有Expectation,没有Expectation就没有失望或惊喜。这一点我们将在后续章节详细展开。
Scenario的构建
构建Scenario需要Agent具备”透视”能力。它不能只看用户说了什么,要看用户没说什么。
技术实现上,这需要:
- 意图推断模型:从Situation反推用户Goal。这可以基于规则(特定事件触发特定意图),也可以基于LLM的常识推理。
- 上下文检索:从历史记忆中检索相关的Context。这要求记忆系统具备高效的关联检索能力,而非简单的向量相似度。
- 场景融合:将Situation、Context、Goal整合成连贯的叙事。
这是一个从”看见”到”看懂”的质变过程。
Scenario Graph:场景之间的关联网络
单个Scenario只是孤岛。用户的Persona不是由一件事定义的,而是由无数个Scenario交织而成的网络。
Scenario Graph是Agent对用户认知的完整拓扑结构。
节点:Scenario
每个Scenario是一个节点。节点属性包括:
- 时间戳
- 情绪标记
- 参与实体
- 目标状态
- 重要度权重
边:关联关系
Scenario之间的边定义了它们的关系。主要关系类型包括:
- 时序关系:A发生在B之前。例如,”加班” -> “项目失败”。
- 因果关系:A导致了B。例如,”项目失败” -> “被老板批评”。
- 主题关系:A和B属于同一主题域。例如,”被老板批评”和”被同事排挤”都关联到”职场压力”。
- 目标关系:A和B服务于同一目标。例如,”加班”和”学新技术”都服务于”职业晋升”。
图的演化
Scenario Graph不是静态的。它是动态生长、演化的。
- 新增节点:新的对话产生新的Situation,进而构建新的Scenario并入图谱。
- 边的强化:重复出现的关联模式会增强边的权重。例如,用户每次”加班”后都”情绪低落”,这条因果边的权重就会增加。
- 节点的合并与分裂:随着认知深入,Agent可能发现两个看似独立的Scenario其实是同一个模式,或者一个Scenario可以拆解为更细粒度的子场景。
为什么是图?
传统记忆模型(如向量数据库)本质上是扁平的。它们只能通过语义相似度检索,无法表达复杂的因果、时序、层级关系。
图结构赋予了Agent”联想”能力。当用户提到”老板”,Agent不仅能检索到关于”老板”的对话,还能沿着图结构游走,找到关联的”项目”、”压力”、”职业目标”,从而构建出完整的认知上下文。
这才是真正的”理解”。
Persona:由场景图谱长期沉淀形成的人物画像
现在我们可以重新定义Persona了。
Persona不是预设的标签,而是Scenario Graph的统计流形。
传统方法试图通过对话直接提取Persona:”用户提到了披萨 -> Persona: 喜欢披萨”。这种方法脆弱且浅薄。
真正的Persona源于对Scenario Graph的深度分析。
Persona的维度
Persona不再是一堆标签,而是多维度的高维投影:
目标层级:用户长期、中期、短期的目标是什么?它们如何冲突、协同?
- 来源:Scenario Graph中Goal节点的聚类与层级关系。
行为模式:用户在特定情境下倾向于如何行动?
- 来源:Scenario Graph中时序边和因果边的统计规律。
情绪特征:用户在什么场景下容易产生什么情绪?情绪阈值如何?
- 来源:Scenario节点中情绪标记的分布与触发条件。
价值偏好:用户在面临选择时,优先级如何排序?
- 来源:Goal冲突场景下的决策记录。
Persona的动态性
Persona是活的。
既然Persona是Scenario Graph的统计结果,那么随着图谱的演化,Persona也会随之改变。用户换了工作,Scenario Graph中关于”职场”的子图会重构,Persona中关于”职业目标”和”压力源”的描述也会自动更新。
这解决了传统Persona系统”一设定就过时”的僵化问题。
认知链路的完整闭环
让我们回顾整个演化过程:
Dialogue(原始信号)
↓ 信息抽取
Situation(离散事件)
↓ 意图推断与上下文融合
Scenario(认知单元)
↓ 关联构建与网络化
Scenario Graph(认知拓扑)
↓ 统计分析与模式提取
Persona(用户画像)
这是一个从噪音到信号,从信号到知识,从知识到智慧的认知爬坡过程。
每一层都是对下一层的压缩与抽象。每一层都丢弃了冗余信息,保留了核心结构。
架构设计建议
基于上述理论,持续认知Agent的架构应遵循以下原则:
Scenario First:不要以对话为单位存储记忆,要以Scenario为单位。对话只是构建Scenario的原材料。
图谱核心:记忆系统的核心不是向量数据库,是图数据库。向量检索用于辅助相似度匹配,图结构用于承载认知关系。
延迟计算:Persona不需要显式存储。它可以通过实时查询Scenario Graph动态生成。只有高频使用的统计特征需要缓存。
增量更新:每次对话不应触发全量重计算。新的Dialogue应触发局部Scenario的构建,并增量更新图谱。
实现难点
这套架构落地并不容易。
难点一:Scenario抽取的准确性。
从对话中准确识别Situation、推断Goal、融合Context,对NLP能力要求极高。目前的LLM在这方面表现尚可,但幻觉和误判仍是问题。需要设计严格的验证机制。
难点二:图谱的规模控制。
长期交互会产生海量Scenario。如果不加控制,图谱会膨胀到无法管理。需要设计遗忘机制(淘汰低频低权节点)和抽象机制(将相似Scenario合并为原型)。
难点三:检索效率。
在庞大的图谱中快速定位相关上下文,需要混合检索策略(向量+图遍历+关键词)。单纯的向量检索无法利用图结构,单纯的图遍历效率太低。
这些技术细节,我们将在下一篇《Agent记忆与场景图谱》中详细拆解。
总结
从对话到人物画像,不是数据的堆砌,是认知的跃迁。
Dialogue是矿石,Situation是筛选后的精矿,Scenario是炼成的砖块,Scenario Graph是建成的楼宇,Persona是楼宇呈现的风格。
Agent只有构建起Scenario Graph,才算真正拥有了”认识用户”的能力。而记忆,不过是这个图谱在时间维度上的投影。
下一篇,我们将深入Scenario Graph的内部,探讨如何设计存储、检索与演化机制,以及为什么Memory应该等同于Scenario Graph。