手机银行对话摘要 —— 上下文压缩型摘要
1. 手机银行对话摘要按生成目的分类
说明:本分类中包含5种"传统摘要"(归档记录型、快速处理型、分析洞察型、用户理解型、模型训练型)和1个"特殊类型"(上下文压缩型)。上下文压缩型本质上不是传统意义上的"摘要",而是一种"对话状态的高密度压缩表示",其目标读者是AI模型而非人类,其核心使命是服务于意图识别模型的输入构造。由于它与"摘要"在形态上(都是对长文本的精简)有相似性,故归入同一分类体系,但需明确其特殊性。
1.1. 五大传统摘要类型
| 序号 | 目的类型 | 一句话定位 | 目标读者 | 核心要求 |
|---|---|---|---|---|
| 1 | 归档记录型 | 留存证据,供审计备查 | 合规部、法务、质检 | 完整性+准确性:关键实体一字不差,按时间线完整记录 |
| 2 | 快速处理型 | 让接手的人秒懂现状,立刻上手 | 人工客服、工单系统 | 状态+待办:当前问题、已做动作、下一步行动、责任人 |
| 3 | 分析洞察型 | 挖掘规律,发现机会或问题 | 产品经理、运营、管理层 | 趋势+归因+信号:高频问题、情绪拐点、竞品提及、商机 |
| 4 | 用户理解型 | 读懂用户,更新画像 | CRM、推荐引擎、理财经理 | 偏好+资质+变化:风险偏好、资产状况、人生阶段变化 |
| 5 | 模型训练型 | 生产高质量训练数据,迭代模型 | AI训练师、算法工程师 | 多样性+标注质量:覆盖长尾场景,附带意图/情绪/槽位标签 |
1.2. 特殊类型:上下文压缩型
| 对比维度 | 上下文压缩型(特殊类型) | 归档记录型(传统摘要) |
|---|---|---|
| 本质定位 | 对话状态的高密度压缩表示,服务于意图识别模型的输入构造 | 传统摘要,服务于人的查阅和审计 |
| 目标 | 让模型看懂,而不是让人看懂 | 让人查证 |
| 信息取舍 | 只保留对意图识别和任务执行有用的信息 | 保留所有事实性信息 |
| 可读性 | 可以不那么通顺,但语义必须无损 | 必须通顺、完整 |
| 长度 | 极短(目标是把50轮压缩到几百Token) | 可以较长 |
| 调用时机 | 实时,在每次对话轮次间或达到阈值时触发 | 异步 |
| 独立性 | 不独立工作,必须配合"实体索引映射表"和"主对话模型"协同完成指代消解和详情查询 | 独立成文,自成一体 |
为了服务"意图判断"这个目标,压缩摘要需要做几件特殊的事:
-
强制保留意图演化轨迹:不要只保留最终意图,要保留意图的变化路径。例如:❌“用户想办挂失。” ✅"用户先查余额→发现被盗刷→要求挂失→确认挂失成功后询问补卡流程。"因为意图的转折点往往对后续对话有重要提示作用。
-
保留关键槽位的最新状态及其变更历史:用户可能在对话中反复修改信息。压缩时只保留最新且确认过的槽位值,同时标注变更痕迹(如"[曾变更]"),变更类型(修正/更换)由上层意图识别模型或主模型判定,压缩摘要仅负责记录变更事实。
-
保留情绪趋势,而非单个情绪标签:长对话中情绪会波动。压缩时保留情绪走势(如"平稳→略有不满→缓和"),这对预判用户下一步行为很有用。
-
按业务领域过滤信息:每个业务领域有独立的过滤规则,决定哪些信息必须保留、哪些可压缩、哪些可外置、哪些可丢弃(详见第3.1.1节)。
-
去除冗余信息:删除与任务目标无关的社交性寒暄、礼貌性用语和确认性口头禅。但用户重复表达的内容(如反复强调"我真的很着急")恰恰是信号,需要概括进摘要。
1.3. 多角色协作示例:一份对话的多种摘要版本
以下以一条实际对话为例,展示同一对话在不同目的下的摘要版本如何服务于不同角色。本示例是
2.2节所述"六大摘要目的"的多角色协作实例化。
场景:用户投诉信用卡有一笔980元境外盗刷交易,客服核实后发起争议处理。
| 摘要版本 | 使用者 | 创造的价值 |
|---|---|---|
| 上下文压缩型 【业务领域】:主域=credit_card,关联域=[account],跨域链=account→credit_card 【意图轨迹】:查询账单明细 → 确认卡片安全状态 → 质疑交易真实性 → 要求争议处理 【当前状态】:卡号尾号=8899,争议金额=980元,交易类型=境外游戏平台,卡片状态=在身边且未绑定境外平台 【情绪走势】:平静 → 疑惑 → 着急/不满 → 缓和 【待办事项】:有,争议审核中 【列表锚点】:无 【压缩正文】:用户尾号8899信用卡有一笔980元境外游戏平台交易,用户坚称未出境且卡未绑定境外平台,客服已发起争议申请,等待审核 |
AI系统 | 后续对话无需重复解释,AI直接继承状态,意图识别准确率维持在90%以上 |
| 快速处理型 用户投诉尾号8899信用卡980元境外盗刷,客服已发起争议申请,待银行审核后回呼 |
下一位客服 | 10秒掌握全貌,接手无缝,用户无需复述,AHT降低20% |
| 归档记录型 2026-08-12 14:23用户来电,投诉尾号8899信用卡980元境外消费非本人操作,卡在身边,14:25客服完成身份核验,14:28发起争议申请,编号DZ20260812001 |
合规/法务 | 审计时可快速查证,关键事实完整留存,降低监管风险 |
| 分析洞察型 本月第3起境外游戏平台盗刷投诉,均涉及新办卡,已触发风控规则,建议安全团队排查该商户的卡段BIN风险 |
产品/风控 | 发现批量安全漏洞,推动技术排查,从源头解决问题 |
| 用户理解型 用户:新办卡用户,高频境外消费询问,对资金安全极度敏感,风险偏好保守,属于"高流失风险+高价值"标签 |
CRM/理财经理 | 下次推荐低风险产品,主动做资金安全教育,降低流失率 |
2. 手机银行用户对话系统性问题
手机银行会话过程中的主要问题。
2.1. 问题全景图:从输入到输出的完整链路
flowchart TB
subgraph SYSTEM["手机银行对话系统完整链路"]
direction TB
subgraph MAIN["主流程"]
direction LR
U1["1. 用户输入"] --> U3["2. 上下文管理"] --> U2["3. 意图识别"] --> U4["4. 策略决策"] --> U5["5. 回复生成"]
end
subgraph ISSUES["各环节对应问题"]
direction LR
I1["文本输入<br>(含语音转写)"]
I3["短期记忆超长<br>(问题B)"]
I2["长对话注意力<br>分散(问题A)"]
I4["提参表<br>设计缺失(问题D)"]
I5["摘要质量不佳<br>(问题C)"]
end
subgraph DOWNSTREAM["下游影响"]
direction TB
D1["用户画像维度细分不足"]
D2["个性化服务能力不足"]
end
U1 -.-> I1
U3 -.-> I3
U2 -.-> I2
U4 -.-> I4
U5 -.-> I5
I1 --> DOWNSTREAM_INPUT
I3 --> DOWNSTREAM_INPUT
I2 --> DOWNSTREAM_INPUT
I4 --> DOWNSTREAM_INPUT
I5 --> DOWNSTREAM_INPUT
DOWNSTREAM_INPUT["各环节问题汇聚"] --> D1 --> D2
end
style SYSTEM fill:#f9f9f9,stroke:#333,stroke-width:2px
style MAIN fill:#e8f4fd,stroke:#2196F3,stroke-width:1px
style ISSUES fill:#fff3e0,stroke:#FF9800,stroke-width:1px
style DOWNSTREAM fill:#fce4ec,stroke:#f44336,stroke-width:1px
style DOWNSTREAM_INPUT fill:#ffebee,stroke:#d32f2f,stroke-width:1px,stroke-dasharray: 5 5
说明:对于语音输入场景,ASR转写错误可能对摘要质量产生额外影响,建议在摘要生成前增加ASR置信度过滤机制。
2.2. 三大系统性问题的分层拆解
说明:问题A、B、C之间并非并列关系,而是存在因果链条——问题B(窗口不匹配) 是根本性的技术瓶颈,它直接导致长回复被截断;问题A(摘要质量差) 是现有摘要方案自身的缺陷;二者共同导致了问题C(注意力分散) 这一最终表现。下文按"根因→方案缺陷→最终表现"的层次进行拆解。
2.2.1. 问题A:对话摘要质量差、内容杂乱(方案缺陷层)
| 维度 | 现状表现 | 根本原因 | 系统性影响 |
|---|---|---|---|
| 摘要目的不明确 | 一个摘要试图满足所有需求,结果谁都不满意 | 缺乏"按目的分类"的设计思想 | 下游所有依赖摘要的系统都受影响 |
| 信息取舍无标准 | 该留的不留,该删的不删,重点不突出 | 没有建立金融场景的摘要信息层级 | 客服接手看不懂,AI压缩后失真 |
| 输出格式不统一 | 有的摘要像流水账,有的像散文,有的像笔记 | 缺少结构化输出约束 | 无法被下游系统自动化解析 |
| 长对话摘要失焦 | 对话越长,摘要越抓不住重点 | 长对话中用户意图可能发生多次转移,但摘要系统未建立意图转移的追踪和记录机制,导致关键转折点丢失 | 后段关键信息被稀释 |
问题本质:摘要系统没有一个以"目的"为导向的分类体系,导致一条摘要想覆盖所有场景,最终哪头都不靠。
2.2.2. 问题B:短期记忆数据超长(根因层——技术瓶颈)
| 维度 | 现状表现 | 根本原因 | 系统性影响 |
|---|---|---|---|
| 意图识别模型窗口不足 | 系统生成长回复(如转账记录、理财说明书)后,下次用户提问时,完整的对话历史被喂给意图识别模型 | 意图识别模型的上下文窗口(通常4K-8K)远小于主对话模型(128K),长回复直接撑爆窗口 | 意图识别被迫截断,可能切掉用户最新关键表述,导致意图判断错误 |
| 系统回复污染意图识别输入 | 意图识别模型的输入中混入了大量系统生成长回复 | 架构设计上未区分"主对话上下文"和"意图识别上下文" | 意图识别准确率随着系统回复变长而持续下降 |
| 截断位置不可控 | 超过窗口长度时简单截断,无法保证保留最关键信息 | 缺乏针对意图识别场景的精简输入设计 | 截断可能恰好切掉用户最新的意图表述 |
| 跨会话信息丢失 | 用户下次来电,AI不记得上次聊了什么 | 对话摘要未持久化存储 | 用户被迫重复描述,体验断崖 |
问题本质:主对话模型与意图识别模型的上下文窗口容量不匹配,导致系统生成长回复污染了意图识别模型的输入。这本质上是"上下文压缩摘要"需要解决的一个核心应用场景——将长对话压缩为意图识别模型能够消费的极简结构化输入。
2.2.3. 问题C:长对话中意图识别的注意力分散(最终表现层)
| 维度 | 现状表现 | 根本原因 | 系统性影响 |
|---|---|---|---|
| 早期关键信息被稀释 | 对话超过20轮后,用户最初的问题被模型"遗忘" | Transformer的自注意力机制对早期Token权重天然衰减 | 后续回复与用户真实需求脱节 |
| 意图漂移未被追踪 | 用户意图可能从"查余额"演变为"投诉利率",但系统仍按初始意图处理 | 缺乏"意图演化轨迹"的提取和追踪 | 答非所问,用户满意度下降 |
| 情绪信号丢失 | 用户情绪从平和变为愤怒,但系统仍按中性态度回复 | 情绪标签未被持续追踪并注入上下文 | 危机升级,投诉率上升 |
| 关键槽位被覆盖 | 用户先说了A卡号后改为B卡号,系统混淆了新旧信息 | 槽位状态管理缺少"最新确认值"机制 | 业务执行错误(如挂错卡) |
问题本质:意图识别是"一次性"的,而不是"持续追踪"的——缺乏在对话全生命周期中对意图、情绪、槽位的动态维护。
3. 上下文压缩型摘要
上下文压缩型摘要是6个目的中最特殊的一个——它的目标读者不是人,而是AI模型。它直接解决前面提到的三个核心问题:
- 问题A(摘要杂乱):通过结构化强制收敛到意图链+槽位+情绪+待办四个维度
- 问题B(短期记忆超长):通过高压缩比(15%-25%)替代原始对话,为意图识别模型提供极简输入,彻底解决长回复撑爆窗口问题
- 问题C(注意力分散):通过保留意图演化轨迹和情绪走势,让模型聚焦于关键转折点
特别说明:上下文压缩型摘要在本方案中是重点阐述的对象,因为它是实时对话链路中的关键组件,直接决定了意图识别模型能否在长对话中稳定工作。其他5种摘要类型(归档、处理、分析、用户理解、模型训练)的技术实现将在第4.5节统一说明。
3.1. 核心设计规范
本节定义8条核心设计规范,涵盖业务领域过滤、信息取舍、复杂场景处理三个层面,构成完整的规范体系。跨业务领域指代处理作为独立机制,在第3.3节单独阐述。
3.1.1. 基础原则(信息取舍层)
| 序号 | 设计原则 | 说明 | 错误做法 | 正确做法 |
|---|---|---|---|---|
| 1 | 保留意图演化轨迹 | 不只保留最终意图,要记录变化路径 | “用户想办挂失” | “用户查余额→发现盗刷→要求挂失→询问补卡流程” |
| 2 | 保留最新槽位状态及变更历史 | 只保留最终确认的关键槽位值(金额、卡号、产品代码等),删除中间修改过程,标注变更痕迹。列表类详情由索引映射表承载 | 罗列"卡号说1234→又说5678→最后确认5678" | “卡号尾号=5678 [曾变更]”(变更类型由上层模型判定) |
| 3 | 保留情绪趋势 | 记录情绪走势,而非单个情绪标签 | “用户生气” | “平静→疑惑→着急/不满→缓和” |
| 4 | 保留重复信号 | 用户重复表达的内容恰恰是信号,不能删除 | 删掉"我很急我很急" | 概括为"用户反复强调时效性要求" |
| 5 | 按业务领域过滤信息 | ① 首先识别用户输入涉及的业务领域(基金、理财、转账等),标注主域、关联域和跨域关系类型 ② 每个业务领域有独立的过滤规则表(见下文),决定哪些信息必须保留、可压缩、可外置、可丢弃 ③ 跨域因果链和流程链上的所有"必须保留"信息必须完整保留 ④ 指代词必须能追溯到其来源域 |
仅按关键词匹配单一领域,丢弃跨域上下文 | 标注完整跨域链,按各领域规则分别过滤,跨域链上"必须保留"项全部保留 |
| 6 | 去除冗余信息 | 删除与任务无关的社交性寒暄、礼貌性用语和确认性口头禅,但不得去除用于指代消解的"索引锚点" | 删除所有非核心内容,包括列表锚点 | 保留索引锚点(list_id),确保指代可被解析 |
| 7 | 状态完整性 | 不仅记录当前状态,还记录状态的变更历史,包括用户修正、等待时长累积、授权状态流转等 | 用户修正自己、用户沉默、隐私合规 | |
| 8 | 外部索引支撑 | 摘要保持极简,但复杂映射关系(序号→实体ID)和"可外置"类信息由外部索引表承载,摘要仅保留索引锚点(list_id) | 列表指代消解、跨域信息引用 |
3.1.2. 按业务领域过滤
3.1.2.1. 手机银行业务领域清单
| 领域ID | 领域名称 | 典型关键词 | 常见关联领域 |
|---|---|---|---|
fund |
基金 | 申购、赎回、净值、持仓、收益率 | wealth、transfer |
wealth |
理财 | 理财产品、风险评估、到期、收益 | fund、transfer |
transfer |
转账 | 汇款、到账、限额、收款人、金额 | 所有涉及资金流动的领域 |
credit_card |
信用卡 | 账单、还款、额度、积分、盗刷 | transfer、wealth |
deposit |
存款 | 定期、活期、大额存单、利率 | wealth |
loan |
贷款 | 房贷、车贷、利率、还款计划 | transfer、wealth |
account |
账户管理 | 余额、流水、开户、挂失、密码 | 所有领域的基础 |
complaint |
投诉/服务 | 投诉、不满、赔偿、升级处理 | 任意业务领域 |
3.1.2.2. 各业务领域独立过滤规则表
| 业务领域 | 必须保留 | 可压缩保留 | 可外置(索引表) | 可丢弃 |
|---|---|---|---|---|
| fund(基金) | 意图(申购/赎回/查询/转换)、基金代码、金额、持仓状态 | 用户风险等级、持有时间、对涨跌的情绪反应 | 完整基金持仓列表、历史净值曲线、产品说明书 | 社交寒暄、礼貌用语、无信息量口头禅 |
| wealth(理财) | 意图(购买/赎回/风险评估)、产品代码、金额、到期日、风险等级 | 用户风险偏好、收益预期 | 理财产品完整说明书、历史收益数据 | 社交寒暄、礼貌用语、无信息量口头禅 |
| transfer(转账) | 意图(转账/查询到账)、金额、收款人、收款账户、转账状态 | 转账备注、用户急迫程度 | 历史转账记录列表 | 社交寒暄、礼貌用语、无信息量口头禅 |
| credit_card(信用卡) | 意图(还款/查询账单/挂失/争议)、卡号尾号、金额、还款日、还款状态 | 用户信用等级、逾期风险 | 完整账单明细、积分记录 | 社交寒暄、礼貌用语、无信息量口头禅 |
| deposit(存款) | 意图(开户/续存/支取)、金额、存期、利率 | 到期提醒偏好 | 历史存款记录 | 社交寒暄、礼貌用语、无信息量口头禅 |
| loan(贷款) | 意图(申请/查询/提前还款)、贷款金额、利率、还款计划、还款状态 | 信用评分 | 完整合同条款、历史还款记录 | 社交寒暄、礼貌用语、无信息量口头禅 |
| account(账户管理) | 意图(查询余额/流水/挂失/修改密码)、账号/卡号、账户状态 | 开户时间、最近登录 | 完整交易流水列表 | 社交寒暄、礼貌用语、无信息量口头禅 |
| complaint(投诉/服务) | 意图(投诉/升级/催办)、问题描述、处理状态、责任人、承诺时效 | 情绪强度 | 完整投诉历史记录 | 社交寒暄、礼貌用语、无信息量口头禅 |
3.1.2.3. 跨域关系类型
| 跨域关系类型 | 定义 | 示例 | 对摘要的影响 |
|---|---|---|---|
| 并行跨域 | 一个操作同时涉及多个域,地位平等 | “对比基金A和理财B哪个收益高” | 必须保留两个域的全部"必须保留"信息 |
| 因果跨域 | 问题在A域,根源/解决方案在B域 | “信用卡还款失败,因为理财资金没赎回” | 必须保留两个域的"必须保留"信息 + 因果标记 |
| 流程跨域 | 一个业务链条跨越多个域 | “赎回基金→资金到账→转给家人” | 必须保留链条上所有域的"必须保留"信息 |
| 引用跨域 | 在一个域中引用另一个域的信息或操作模式 | “把理财账户里的钱,按上次买基金的方式操作” | 必须保留被引用域的关键状态 + 操作模式标记 |
3.1.2.4. 跨域保留的约束规则
| 规则ID | 规则名称 | 约束内容 | 示例 |
|---|---|---|---|
| R1 | 因果链完整性 | 如果检测到跨域因果链(A→B),A和B的"必须保留"信息必须同时存在于摘要中 |
“理财没赎回→还款失败”:必须同时保留wealth的赎回状态和credit_card的还款状态 |
| R2 | 流程链完整性 | 如果检测到跨域流程链(A→B→C),链条上所有节点的"必须保留"信息必须同时保留 |
“赎回基金→到账→转账”:fund、transfer、wealth三域关键状态均保留 |
| R3 | 指代可溯性 | 任何域中的指代词(“那笔钱”“那个”“它”),必须能在摘要或索引表中追溯到其真实实体和来源域 | “把那笔钱转过去”→必须能追溯到具体的金额和来源域(如fund域的50,000元收益) |
| R4 | 冲突域标注 | 如果用户同时涉及两个存在操作冲突的域,必须显式标注为"互斥选择态" | “我有50万,是买基金还是存定期?”→标注跨域链为fund∥deposit(互斥) |
| R5 | 默认域继承 | 如果当前轮未明确提及领域,默认继承上一轮的主领域,并标注"继承自" | 用户:“帮我查一下那笔交易”→继承上一轮的fund域,标注domain="fund(inherited)" |
3.2. Prompt模板设计
3.2.1. 全量生成版(对话结束后或首次压缩)
你是一个对话状态压缩器。你的任务是将【原始对话】压缩为一段极短的"语义主干",目的是替代原始对话,作为后续对话的上下文前缀。
**第一步:业务领域识别(优先执行)**
1. 识别用户输入涉及的所有业务领域(fund/wealth/transfer/credit_card/deposit/loan/account/complaint)
2. 标注主领域(primary_domain)、关联领域(secondary_domains)
3. 标注跨域关系类型:并行跨域(∥)/因果跨域(→)/流程跨域(→)/引用跨域(↗)/互斥(∥)/无跨域
4. 如果存在跨域关系,输出跨域链(如 fund→transfer→wealth)
**第二步:按业务领域规则过滤**
每个业务领域有独立的过滤规则,必须严格执行:
| 领域 | 必须保留 | 可压缩保留 | 可外置 | 可丢弃 |
| :---------- | :------------------------------------- | :----------------------- | :--------------------- | :------------- |
| fund | 意图、基金代码、金额、持仓状态 | 风险等级、持有时间、情绪 | 完整持仓列表、历史净值 | 寒暄、礼貌用语 |
| wealth | 意图、产品代码、金额、到期日、风险等级 | 风险偏好、收益预期 | 完整说明书、历史收益 | 寒暄、礼貌用语 |
| transfer | 意图、金额、收款人、转账状态 | 转账备注、急迫程度 | 历史转账记录列表 | 寒暄、礼貌用语 |
| credit_card | 意图、卡号尾号、金额、还款状态 | 信用等级、逾期风险 | 完整账单明细 | 寒暄、礼貌用语 |
| deposit | 意图、金额、存期、利率 | 到期提醒偏好 | 历史存款记录 | 寒暄、礼貌用语 |
| loan | 意图、贷款金额、利率、还款状态 | 信用评分 | 完整合同条款 | 寒暄、礼貌用语 |
| account | 意图、账号/卡号、账户状态 | 开户时间 | 完整交易流水 | 寒暄、礼貌用语 |
| complaint | 意图、问题描述、处理状态、责任人 | 情绪强度 | 完整投诉历史 | 寒暄、礼貌用语 |
**第三步:跨域约束检查**
- 如果存在跨域链(如 fund→transfer→wealth),链上每个环节的"必须保留"信息必须同时存在于摘要中
- 如果某环节的保留信息缺失,标注"跨域不完整:{缺失项}"
- 互斥跨域(∥)需标注"互斥选择态"
**第四步:压缩规则**
1. 保留意图演化轨迹:用"→"连接意图变化路径
2. 保留最新确认的槽位值,标注"[曾变更]"
3. 保留情绪走势:起始→中间→当前
4. 保留重复信号
5. 保留索引锚点(列表场景)
6. 压缩目标:总Token≤200,【压缩正文】≤50字
**输出格式(强制结构化):**
【业务领域】:主域={主领域},关联域=[{关联领域}],跨域链={链},跨域类型={类型}
【意图轨迹】:{意图1} → {意图2} → {意图3}
【当前状态】:{槽位1}={值1},{槽位2}={值2}
【情绪走势】:{起始} → {中间} → {当前}
【待办事项】:{有/无},{具体事项}
【列表锚点】:{有/无},{list_id},{entity_type},domain={业务领域},共{数量}项,TTL={时长}
【压缩正文】:{不超过50字}
【原始对话】:
{dialogue_content}
业务领域标注与过滤示例:
| 用户输入 | 主域 | 关联域 | 跨域链 | 跨域类型 | 摘要中必须保留的跨域信息 |
|---|---|---|---|---|---|
| “把基金收益转到理财账户” | transfer |
[fund, wealth] |
fund→transfer→wealth |
流程跨域 | fund的收益金额 + transfer的转账状态 + wealth的目标账户 |
| “信用卡还款失败,因为理财资金没赎回” | credit_card |
[wealth] |
wealth→credit_card |
因果跨域 | wealth的赎回状态(因)+ credit_card的还款失败状态(果) |
| “对比基金A和理财B哪个收益高” | fund |
[wealth] |
fund∥wealth |
并行跨域 | 基金A的收益数据 + 理财B的收益数据,标注"互斥选择态" |
| “把理财账户里的钱,按上次买基金的方式操作” | wealth |
[fund] |
fund↗wealth |
引用跨域 | wealth的目标账户 + fund的操作模式(索引表查询) |
| “帮我查一下那笔交易”(上一轮是基金域) | fund(inherited) |
[] |
无 | 继承 | 继承上一轮fund域状态 |
3.2.2. 增量更新版(适用于长对话实时维护)
你是一个对话状态更新器。当前已有【旧压缩摘要】如下:
{old_summary}
现在新增了【新一轮对话】如下:
{new_dialogue}
请基于新对话内容,**更新**旧摘要,输出新的压缩摘要。
**更新规则:**
1. 业务领域:如果本轮涉及新领域,追加到关联域;如果形成新的跨域链,更新跨域链。
2. 意图轨迹:如果出现新意图,追加;如果是对旧意图的确认/否定,在相应位置标注。
3. 槽位状态:如果用户修改了之前的槽位值,替换为最新值,并标注"[已变更]"。
4. 情绪走势:根据本轮情绪调整走势,保留完整变化链。
5. 待办事项:如果客服做出了新承诺或用户提出了新要求,更新待办。
6. 列表锚点:如果本轮输出了新的列表,创建新锚点(含domain字段)。
7. 跨域检查:如果新增内容导致跨域链变化,重新检查跨域完整性。
8. 压缩正文:重写为包含新信息的最新概括,控制在50字以内。
输出格式同全量生成版。
3.2.3. 触发策略建议
| 触发条件 | 动作 | 说明 |
|---|---|---|
| 对话轮次 ≥ 10轮 | 首次生成压缩摘要 | 避免前期过度压缩 |
| 当前上下文Token数 ≥ 窗口上限的70% | 执行压缩,替换原始历史 | 防止超窗口 |
| 每新增5轮对话 | 增量更新摘要 | 保持摘要实时性 |
| 意图发生明显转折 | 立即更新摘要 | 转折点信息不能丢 |
| 业务领域发生切换 | 立即更新摘要 | 跨域链变化需及时记录 |
3.3. 跨业务领域指代处理机制
本节是全文的核心机制之一。按业务领域过滤信息后,不同领域的关键信息被保留在摘要中,而列表等详情类信息被外置到索引映射表。当用户使用指代词(“那个”“它”“那笔钱”“第三个”)时,所指代的对象可能位于不同的业务领域或不同的存储位置。本节系统阐述跨业务领域指代的识别、追踪与解析机制。
3.3.1. 问题本质:指代词跨越了业务领域边界和存储位置
按业务领域过滤后,不同领域的信息被存储在不同的位置:
| 业务领域 | 信息来源 | 存储位置 | 示例 |
|---|---|---|---|
fund(基金) |
用户查询/系统推荐 | 摘要【当前状态】或索引映射表 | 持仓基金=004851、list_id=fund_list_001 |
wealth(理财) |
用户查询/系统推荐 | 摘要【当前状态】或索引映射表 | 理财账户余额=30,000元 |
transfer(转账) |
用户发起/系统执行 | 摘要【当前状态】 | 转账金额=50,000元、收款人=张三 |
credit_card(信用卡) |
用户查询/系统回复 | 摘要【当前状态】 | 卡号尾号=8899、还款状态=失败 |
跨业务领域指代的核心矛盾:
用户输入(当前轮):
"把那笔钱转过去"
│
│ 指代词"那笔钱"指向的是...
▼
可能指向 fund 域的"50,000元基金收益"
也可能指向 wealth 域的"30,000元理财余额"
还可能指向 transfer 域的"待处理转账金额"
如果没有跨域链追踪,系统无法确定"那笔钱"到底指哪一笔。
3.3.2. 跨业务领域指代的类型体系
3.3.2.1. 按指代方向分类
| 类型 | 指代方向 | 示例 | 处理策略 | 责任模块 |
|---|---|---|---|---|
| 类型A | 域内指代(同一业务领域内) | “那张卡”(上一轮提到信用卡尾号8899)→ 在同一域的【当前状态】中 | 摘要内解析:直接在当前域【当前状态】中查找 | 意图识别模型 |
| 类型B | 跨业务领域指代(不同业务领域间) | “把那笔钱转过去”("那笔钱"指fund域的收益)→ 指代对象在另一个业务领域 | 跨域链追踪:沿跨域链查找来源域 | 指代消解层 |
| 类型C | 向索引表指代(外置信息) | “第三个基金”(指索引表中的列表项)→ 指代对象在外置索引表 | 索引表查询:通过list_id+position解析 | 指代消解层 |
关于类型D(指向已丢弃域):当用户指代的对象已被判定为"可丢弃"而完全删除时,这属于指代消解的失败场景而非标准指代类型。该场景的处理机制详见第3.8节"容错与降级机制"。
3.3.2.2. 按跨域关系分类
| 关系类型 | 定义 | 用户指代示例 | 追踪策略 |
|---|---|---|---|
| 并行跨域指代 | 用户在一个域中引用另一个域中同时存在的平行信息 | “对比一下这两个哪个好”(基金A vs 理财B) | 在fund和wealth两个域的【当前状态】中查找并列实体 |
| 因果跨域指代 | 用户指代的对象在原因域,而当前操作在结果域 | “因为它,我信用卡还不上”("它"指理财未赎回) | 沿因果链wealth→credit_card,先查wealth域的状态 |
| 流程跨域指代 | 用户指代的对象在流程的上游,当前操作在下游 | “那笔钱到账了吗?”("那笔钱"指基金赎回款) | 沿流程链fund→transfer→wealth,追踪资金流的当前节点 |
| 引用跨域指代 | 用户引用了另一个域中的操作模式或方式 | “按上次的方式再操作一次”("上次的方式"指基金买入流程) | 查询索引映射表中domain=fund的历史操作记录 |
3.3.3. 跨业务领域指代追踪流程
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ 跨业务领域指代追踪流程 │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户输入(含指代词) │
│ "把那笔钱转过去" │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤1:从压缩摘要中读取【业务领域】和【跨域链】 │ │
│ │ ─────────────────────────────────────────────────────────────────────────── │ │
│ │ 读取结果:主域=transfer,关联域=[fund, wealth],跨域链=fund→transfer→wealth │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤2:识别指代词类型 │ │
│ │ ─────────────────────────────────────────────────────────────────────────── │ │
│ │ "那笔钱" → 金额类指代,需在跨域链上依次查找"金额"类槽位 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤3:沿跨域链依次查找指代对象 │ │
│ │ ─────────────────────────────────────────────────────────────────────────── │ │
│ │ 链:fund → transfer → wealth │ │
│ │ ① 查 fund 域:找到"基金收益50,000元" → 命中! │ │
│ │ ② 标注来源域=fund,来源槽位=基金收益 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤4:解析结果写回摘要(跨域提升) │ │
│ │ ─────────────────────────────────────────────────────────────────────────── │ │
│ │ 【当前状态】:指代解析="那笔钱"=fund域50,000元收益,来源域=fund │ │
│ │ → 将指代解析结果显式写入摘要,供后续轮次直接使用 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤5:业务执行 → 使用解析结果执行转账 → 主模型生成回复 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
3.3.4. 向索引表指代(类型C)的处理流程
当指代词指向的是外置列表中的某一项时(如"第三个基金"):
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ 向索引表指代(类型C)处理流程 │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 阶段1:系统输出列表(外置到索引表) │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 用户:"我想买基金,有什么推荐吗?" │ │
│ │ 系统:推荐5只基金:1.华夏... 2.易方达... 3.广发... │ │
│ │ 压缩摘要:【列表锚点】:list_id=fund_rec_001,domain=fund,共5项 │ │
│ │ 索引表:{list_id, position→entity_id映射, domain="fund"} │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 阶段2:用户指代列表项 │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 用户:"给我解读下第三个基金" │ │
│ │ 业务领域标注:主域=fund(继承) │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤1:意图识别模型输出 │ │
│ │ 输出:意图="基金详情查询",槽位={position:3, list_id: fund_rec_001} │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤2:索引表查询 │ │
│ │ 输入:list_id=fund_rec_001,position=3 │ │
│ │ 查询索引映射表 → 返回 entity_id=004851,entity_name=广发医疗保健 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 步骤3:解析结果写回摘要 │ │
│ │ 【当前状态】:聚焦基金=广发医疗保健(004851) │ │
│ │ → 供后续轮次(如"那它的历史收益呢")直接使用 │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
3.3.5. 索引映射表作为"跨域桥梁"的核心设计
索引映射表在跨业务领域指代中扮演"跨域桥梁"角色。其数据结构扩展了业务领域维度:
{
"list_id": "fund_recommendation_20260814_001",
"list_type": "fund_recommendation",
"entity_type": "fund",
"domain": "fund", // 所属业务领域
"source_session_id": "session_20260814_001",
"ttl": 1800,
"position_mapping": [
{"position": 1, "entity_id": "000001", "entity_name": "华夏成长混合"},
{"position": 2, "entity_id": "005827", "entity_name": "易方达蓝筹精选"},
{"position": 3, "entity_id": "004851", "entity_name": "广发医疗保健"}
],
"cross_domain_refs": { // 被其他领域引用
"referenced_by": ["wealth", "transfer"],
"ref_count": 3
},
"access_count": 3,
"last_accessed_position": 3,
"created_at": "2026-08-14T14:23:00Z"
}
索引映射表的跨域查询接口:
def resolve_cross_domain_reference(user_input, compressed_summary):
"""
解析跨业务领域指代
"""
# 步骤1:从摘要中读取跨域链
cross_chain = extract_cross_chain(compressed_summary) # 如 ["fund", "transfer", "wealth"]
referent_type = extract_referent_type(user_input) # 如 "金额类指代"
# 步骤2:沿跨域链依次查找
for domain in cross_chain:
# 先在摘要的【当前状态】中查找
result = search_in_summary(compressed_summary, domain, referent_type)
if result:
result["source_domain"] = domain
# 写回摘要(跨域提升)
update_summary_reference(compressed_summary, user_input, result)
return result
# 再查该域的索引表
result = search_in_index_table(domain, referent_type)
if result:
result["source_domain"] = domain
result["source"] = "index_table"
update_summary_reference(compressed_summary, user_input, result)
return result
# 步骤3:未找到,触发澄清(参见3.8节容错机制)
return trigger_clarification(user_input)
3.3.6. 各类指代类型的处理规则汇总
| 指代类型 | 示例 | 领域归属 | 处理方式 | 映射依据 | 责任模块 |
|---|---|---|---|---|---|
| 序号指代(向索引表) | “第三个”“第1个”“最后一个” | fund域→索引表 |
查询索引映射表的position字段 | position映射 | 指代消解层 |
| 名称指代(向索引表) | “那个医疗的”“华夏的呢” | fund域→索引表 |
查询索引映射表的entity_name,模糊匹配 | 关键词匹配 | 指代消解层 |
| 特征指代(向索引表) | “收益最高的那个”“中风险的” | fund域→索引表 |
查询索引映射表+主模型完整列表 | 槽位过滤 | 指代消解层+主模型 |
| 跨域金额指代 | “把那笔钱转过去” | transfer域→fund/wealth域 |
沿跨域链追踪金额类槽位 | 金额值匹配 | 指代消解层 |
| 跨域实体指代 | “它”(指代上一轮基金) | 当前域→fund域 |
沿跨域链追踪最近实体 | 最近提及+领域匹配 | 指代消解层 |
| 跨域操作指代 | “按上次的方式操作” | 当前域→历史域 | 查询索引表历史记录 | 操作模式匹配 | 指代消解层+主模型 |
| 域内指代 | “那张卡”“那笔钱” | 同一域内 | 直接在摘要【当前状态】中查找 | 单值槽位键值对 | 意图识别模型 |
3.3.7. 索引映射表的生命周期管理(含跨域桥梁字段)
| 触发事件 | 对索引映射表的操作 | 对压缩摘要的操作 |
|---|---|---|
| 系统输出列表(5只基金) | 创建索引映射表,TTL=30分钟,标记domain=fund,初始化cross_domain_refs为空 |
更新摘要,增加【列表锚点】字段 |
| 用户指代"第三个" | 查询索引表,返回entity_id,更新access_count+1,更新last_accessed_position |
更新摘要,将解析结果写回【当前状态】 |
| 其他领域引用此列表(如"把上次推荐的那只基金卖了") | 更新cross_domain_refs,追加引用域(referenced_by增加transfer) |
更新摘要,标注跨域引用关系 |
| 对话结束或30分钟无交互 | 销毁索引映射表,释放内存 | 摘要长期保留,但【列表锚点】标记为"已过期" |
| 用户跨会话问"上次推荐的第三个基金" | 索引表已过期 → 向主对话模型返回"列表不存在"信号 | 摘要保留历史记录,主模型生成引导回复 |
跨会话指代场景的用户可见行为:主对话模型基于"列表不存在"信号,生成回复:“您上次的推荐列表已过期,是否需要我重新为您生成一次?”
3.3.8. 跨业务领域指代处理的评估
| 评估项 | 方法 | 预期目标 | 最低可接受值 |
|---|---|---|---|
| 序号指代(向索引表) | 用户说"第三个",检查是否正确映射到对应实体 | ≥95% | ≥85% |
| 名称指代(向索引表) | 用户说"那个医疗的",检查是否正确映射 | ≥90% | ≥80% |
| 跨域金额指代 | 用户说"把那笔钱转过去",检查是否正确识别来源域和金额 | ≥90% | ≥80% |
| 跨域实体指代 | 用户说"它"(指代上一轮基金),检查是否正确追踪 | ≥90% | ≥80% |
| 跨域操作指代 | 用户说"按上次的方式",检查是否正确引用历史操作 | ≥85% | ≥75% |
| 域内指代 | 用户说"那张卡",检查摘要中槽位是否正确 | ≥95% | ≥90% |
| 索引映射表命中率 | 用户指代时,索引表是否仍然有效(未过期) | ≥98% | ≥95% |
| 跨域解析结果回写准确率 | 解析结果是否正确写回【当前状态】供后续使用 | ≥95% | ≥90% |
| 跨域指代端到端延迟 | 从用户输入到解析完成的总耗时 | <200ms(P95) | <500ms(P95) |
3.4. 应用场景:替代系统长回复注入意图识别模型
上下文压缩摘要的一个核心应用场景是替代系统生成长回复,作为意图识别模型的输入,彻底解决"系统长回复撑爆意图识别模型窗口"的问题。
3.4.1. 核心原则
意图识别模型与主对话模型的上下文完全分离,独立维护:
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ 上下文压缩摘要的核心应用场景(问题B解决方案) │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户输入 ──┬──→ 主对话模型(128K窗口) │
│ │ ↓ │
│ │ 生成完整回复(可很长,如转账记录、理财说明书、合规披露) │
│ │ │
│ └──→ 意图识别模型(4K-8K窗口) │
│ ↑ │
│ │ │
│ 【上下文压缩摘要】←── 3.2节的产出 │
│ (业务领域 + 意图轨迹 + 当前状态 + 情绪走势 + 待办事项 + 列表锚点) │
│ │
│ ✗ 绝不放入主模型生成的长回复 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
3.4.2. 意图识别模型的具体输入格式
上下文压缩摘要(3.2节定义)的输出格式为:
【业务领域】:主域=credit_card,关联域=[account],跨域链=account→credit_card,跨域类型=流程
【意图轨迹】:查询账单明细 → 确认卡片安全状态 → 质疑交易真实性 → 要求争议处理
【当前状态】:卡号尾号=8899,争议金额=980元,交易类型=境外游戏平台
【情绪走势】:平静 → 疑惑 → 着急/不满 → 缓和
【待办事项】:有,争议审核中
【列表锚点】:无
【压缩正文】:用户尾号8899信用卡有一笔980元境外游戏平台交易,客服已发起争议申请
意图识别模型直接消费上述摘要,并拼接用户最新输入:
【对话状态摘要】:
【业务领域】:主域=credit_card,关联域=[account],跨域链=account→credit_card
【意图轨迹】:查询账单明细 → 确认卡片安全状态 → 质疑交易真实性 → 要求争议处理
【当前状态】:卡号尾号=8899,争议金额=980元,交易类型=境外游戏平台
【情绪走势】:平静 → 疑惑 → 着急/不满 → 缓和
【待办事项】:有,争议审核中
【列表锚点】:无
【压缩正文】:用户尾号8899信用卡有一笔980元境外游戏平台交易,客服已发起争议申请
【用户最新输入】:
{当前用户问题}
请判断用户意图。
输入Token数:压缩摘要(约200-300 Token)+ 用户最新输入(约50-100 Token)= 总计约300-400 Token,远低于4K窗口限制。
3.4.3. 典型长回复场景处理案例
以下通过5个典型场景,展示系统生成长回复时,上下文压缩摘要如何替代长回复进入意图识别模型。其中场景五(基金推荐/列表指代)是核心难点,涉及跨业务领域指代处理(详见第3.3节)。
3.4.3.1. 场景一至四:摘要策略对比一览
| 场景 | 长回复类型 | 典型长度 | 涉及业务领域 | 摘要策略 | 摘要保留内容 | 摘要丢弃/外置内容 |
|---|---|---|---|---|---|---|
| 场景一 | 理财说明书 | 2000-5000 Token | wealth |
产品卡片摘要 | 产品名称、风险等级、收益类型、关键费率、用户关注点 | 丢弃:完整投资范围、历史曲线图、详细条款 |
| 场景二 | 转账记录 | 3000-8000 Token | transfer |
统计摘要+索引表 | 总笔数、总金额、时间范围、状态汇总 | 外置:逐笔明细(索引表) |
| 场景三 | 账单明细 | 2000-5000 Token | account |
分类汇总摘要+索引表 | 总笔数、总金额、按类别汇总 | 外置:逐笔明细(索引表) |
| 场景四 | 合规披露 | 1500-4000 Token | complaint/credit_card |
状态标记摘要 | 合规类型、已展示状态、用户确认状态、待办动作 | 丢弃:合规文本全文 |
场景一示例(理财说明书):
用户:“这个理财产品怎么样?风险高吗?” → 主模型返回约3000 Token的完整产品说明书。
压缩摘要:【业务领域】:主域=wealth。【意图轨迹】:咨询理财产品 → 询问风险评估 → 关注购买方式。【当前状态】:产品名称=XX增利365天,风险等级=R3,状态=用户在了解阶段。【情绪走势】:中性 → 略带疑虑 → 回归中性。【压缩正文】:用户咨询R3级理财产品,已了解基本信息和风险等级,尚未表达购买意向。
场景二示例(转账记录):
用户:“帮我把上个月的转账记录导出来” → 主模型返回36笔转账明细(约4000 Token)。
压缩摘要:【业务领域】:主域=transfer。【意图轨迹】:查询月度转账记录 → 查看明细列表 → 已列出全部交易。【当前状态】:查询期间=上月,总笔数=36笔,总金额=284,600元。【列表锚点】:有,list_id=transfer_20260812_001,entity_type=transaction,domain=transfer,共36项,TTL=30分钟。【压缩正文】:已展示上月36笔转账记录,用户正在浏览列表中。
3.4.3.2. 场景五(核心难点):基金推荐列表 + 序号指代消解
本场景涉及跨业务领域指代(第3.3节定义的跨域指代机制),是索引映射表的核心应用场景。
| 项目 | 内容 |
|---|---|
| 用户提问 | “我想买基金,有什么推荐吗?” |
| 主模型长回复 | “为您推荐以下5只基金——1. 华夏成长混合(000001)……2. 易方达蓝筹精选(005827)……3. 广发医疗保健(004851)……4. 富国天惠成长(161005)……5. 中欧医疗健康(003095)……”(约2000 Token) |
| 用户追问 | “给我解读下第三个基金。”(此句的业务领域为fund,但"第三个"指代的是上一轮fund域输出列表中的第3项) |
处理流程(详见第3.3.4节):
- 系统输出列表时:创建索引映射表
list_id=fund_rec_001, domain=fund,摘要中记录【列表锚点】。 - 用户追问时:意图识别模型输出
意图="基金详情查询", position=3, list_id=fund_rec_001。 - 索引表查询:返回
entity_id=004851, entity_name=广发医疗保健。 - 结果写回摘要:【当前状态】更新为
聚焦基金=广发医疗保健(004851),供后续轮次直接使用。
3.5. 应用效果量化预期
说明:以下数据为预期目标,基于离线测试集和理想条件下的评估结果。实际生产环境可能因数据分布、系统延迟等因素有所偏差,建议在上线后持续监控并根据实际情况调整阈值。
| 指标 | 基线方案(无压缩摘要,采用简单截断策略) | 优化方案(使用压缩摘要+索引映射表+业务领域过滤+跨域指代处理) | 预期提升 |
|---|---|---|---|
| 意图识别模型输入Token数 | 经常超过4K-8K窗口,被迫截断 | 稳定控制在200-400 Token | 降低90%以上 |
| 意图识别准确率(长对话后半段) | 显著下降至65%-70%(截断丢失关键信息) | 保持稳定在88%-93%(摘要聚焦关键信息) | 提升18-28个百分点 |
| 因窗口溢出导致的意图识别失败率 | 约20%-30%(长对话场景) | <2% | 降低90%以上 |
| 序号指代解析准确率 | 约50%-60%(窗口截断后信息丢失) | ≥95%(预期目标),最低可接受≥85% | 提升35-45个百分点 |
| 用户修正/更换的区分识别率 | 约40%(信息混淆) | ≥80%(预期目标) | 提升40个百分点 |
| 情绪突变检测召回率 | 约30%(情绪信号被平均化而丢失) | ≥85%(预期目标) | 提升55个百分点 |
| 跨会话记忆能力 | 无,每次从头开始 | 有,摘要持久化存储+索引映射表TTL管理 | 用户体验显著提升 |
| 跨业务领域指代解析准确率 | 无法解析跨域指代(0%) | ≥90%(预期目标) | +90个百分点 |
| 摘要一致性(人工抽检) | 约80%(随机性较强) | ≥92%(业务领域过滤规则显式化后) | +12个百分点 |
4. 压缩摘要的替代与补充方案
上下文压缩摘要是本文档重点阐述的方案,但它并非处理长回复与超长对话历史的唯一路径。业界还有三种主流且有效的解决思路:外部记忆库、分层摘要和关键信息提取。这些方法并非相互排斥,在实际的手机银行系统中常常组合使用,以达到最佳效果。
4.1. 外部记忆库:“外挂大脑”
核心思想:将长回复等大量信息存储在模型上下文窗口之外,只在需要时按需调用。
- 具体做法:不将完整的长回复(如几十条转账记录、完整的理财说明书)放入意图识别模型的上下文窗口,而是将这些信息存入一个外部的、可快速检索的数据库(如向量数据库、Redis等)。当用户后续提问时,系统先根据用户的问题去外部记忆库中检索最相关的信息片段,再将这些精简后的片段与用户问题一起输入给模型。
优势:
| 优势 | 说明 |
|---|---|
| 彻底突破窗口限制 | 理论上可以处理无限长度的历史信息,因为上下文窗口中只保留当前最相关的内容 |
| 信息更精准 | 模型不会被大量无关的长文本干扰,注意力完全集中在与当前问题最相关的信息上,意图判断更准确 |
| 成本更低 | 每次输入模型的Token数量大幅减少,显著降低推理成本 |
与本文档的关系:第3.3节跨业务领域指代处理机制中的索引映射表,本质上就是外部记忆库的一种具体实现——它按业务领域(fund、transfer等)分类存储列表类详情信息,当用户说"第三个"时(向索引表指代),指代消解层查询索引表而非在上下文里寻找。外部记忆库是这个思想的泛化,可以处理列表之外的更多非结构化信息。
4.2. 分层摘要:“分而治之”
核心思想:将一个复杂的长文本摘要任务分解为多个简单的短文本摘要任务。
- 具体做法:对于一段超长的对话历史,不直接让模型一次性生成最终摘要,而是分两步走:
- 分段摘要:将长对话按主题、时间或固定轮次(如每10轮)切分成多个小段,为每一段生成一个简短的摘要。
- 全局摘要:将所有分段摘要拼接起来作为新的输入,让模型生成一个最终的全局摘要。
优势:
| 优势 | 说明 |
|---|---|
| 降低模型负担 | 将一个大任务分解为多个小任务,降低了单次处理的复杂度,模型更容易抓住每一段的重点 |
| 结构更清晰 | 有助于模型更好地把握对话的整体结构和脉络,避免在超长文本中遗漏关键信息 |
与本文档的关系:3.2.2节的**“增量更新版"Prompt**就体现了分层摘要的思想——它不是每次都重新处理全部对话,而是在"旧压缩摘要"的基础上,结合"新一轮对话"来生成"新摘要”,这是一种在线的、流式的分层摘要。
4.3. 关键信息提取:“只取所需”
核心思想:不生成连贯的文本摘要,而是直接从对话中抽取出结构化的关键信息。
- 具体做法:放弃生成自然语言摘要,转而定义一个结构化的信息模板(如JSON格式),让模型只负责从对话中填充这个模板。例如,只提取
{"业务领域": "fund", "意图": "赎回", "基金代码": "004851", "金额": "50000"}等关键字段。
优势:
| 优势 | 说明 |
|---|---|
| 极致精简 | 输出是高度结构化的数据,Token数极少,能最大程度地节省上下文窗口 |
| 下游系统友好 | 输出的结构化数据可以被下游系统(如工单系统、CRM系统)直接解析和使用,无需再进行自然语言处理 |
与本文档的关系:3.2.1节定义的上下文压缩型摘要的输出格式(业务领域、意图轨迹、当前状态、情绪走势、待办事项、压缩正文)已经非常接近关键信息提取。可以说,上下文压缩摘要是"关键信息提取"和"自然语言摘要"的结合体——它既保留了结构化的字段,也生成了一段连贯的"压缩正文"。
4.4. 四种方案的对比与组合策略
| 方案 | 核心思想 | 优势 | 适用场景 |
|---|---|---|---|
| 压缩摘要 | 将长文本浓缩为短文本 | 保留语义连贯性,兼顾人和模型阅读 | 通用场景,尤其是需要保留对话脉络时 |
| 外部记忆库 | 信息外置,按需检索 | 彻底解决长度限制,信息最精准 | 对话历史极长,或包含大量可检索的文档、列表 |
| 分层摘要 | 先分段摘要,再汇总 | 降低模型单次处理难度,结构清晰 | 对话历史超长,且主题有明显分段 |
| 关键信息提取 | 只抽取结构化字段 | 极致精简,下游系统可直接使用 | 任务导向型对话,下游系统只需要关键参数 |
在实际的手机银行系统中,一个健壮的方案很可能是组合拳:
- 用压缩摘要作为基础,维持对话的连贯性(即本文档第3章的主线方案);
- 用业务领域过滤规则(第3.1.1节)来决定各领域信息的取舍;
- 用跨业务领域指代处理机制(第3.3节)来解决跨域指代追踪问题;
- 用外部记忆库/索引映射表来承载各业务领域的列表类详情信息;
- 用关键信息提取的思路来设计摘要的结构化字段,方便下游系统调用。
4.5. 其他类型摘要的实现要点
本方案的焦点在"上下文压缩型摘要"上,因为它直接决定了实时对话链路的稳定性。但第1.1节还定义了5种传统摘要类型,本节简要说明它们在技术实现上的定位以及与压缩型摘要的协作关系。
4.5.1. 生成时机与技术路径对比
| 摘要类型 | 生成时机 | 推荐技术路径 | 对实时性的要求 | 与压缩型摘要的关系 |
|---|---|---|---|---|
| 归档记录型 | 对话结束后异步生成 | 主对话模型(大窗口LLM)直接生成 | 低(秒级-分钟级可接受) | 独立生成,可复用压缩摘要中的结构化字段作为输入。注意:归档型摘要的过滤规则与压缩型不同——"可丢弃"类信息(如寒暄)在归档型中必须保留(合规需要完整语境) |
| 快速处理型 | 对话转人工或生成工单时触发 | 主对话模型生成,或从压缩摘要+原始对话中提炼 | 中(秒级) | 可基于压缩摘要的【待办事项】和【当前状态】快速生成 |
| 分析洞察型 | 离线批量处理(每日/每周) | 批量调用LLM,或使用更轻量的文本分析模型 | 极低(小时级可接受) | 可汇聚多条压缩摘要进行聚类分析,无需每次读取完整对话 |
| 用户理解型 | 对话结束后异步更新画像 | 主对话模型生成结构化标签,写入CRM | 低(秒级-分钟级) | 可从压缩摘要的【情绪走势】和【意图轨迹】中提取行为特征标签 |
| 模型训练型 | 离线批量生成,用于下一轮模型迭代 | 主对话模型生成,需人工抽检质量 | 极低(天级可接受) | 压缩摘要中的结构化字段可作为训练数据的预标注,降低人工标注成本 |
4.5.2. 设计原则
- 异步生成,不影响实时链路:归档、分析、画像、训练四类摘要均在对话结束后异步触发,不占用实时意图识别的计算资源和延迟预算。
- 复用压缩摘要的中间产出:压缩摘要的【业务领域】【意图轨迹】【情绪走势】【当前状态】等结构化字段,可直接作为其他摘要的输入素材,减少重复计算。
- 按需调整详略程度:归档型要求最完整,分析型要求最精炼,画像型要求标签化,各自使用独立的Prompt模板,而非在同一份摘要上做删改。
- 统一存储,分表管理:所有摘要按类型分表存储(或同一表内加type字段),便于下游系统按需检索。
- 业务知识注入:分析洞察型和用户理解型摘要需结合预定义的业务标签体系(如"商机信号"清单、"流失风险"关键词库)进行生成,而非完全依赖模型的开放式总结,以提高标签的准确性和可用性。
- 过滤规则因类型而异:对压缩摘要属于"可丢弃"的信息(如寒暄),对归档记录型摘要而言属于"必须保留"(合规审计需要完整语境)。各类型摘要应独立定义其过滤规则。
4.5.3. 快速处理型与压缩型摘要的协作示例
以第3.4.3.2节场景五"基金推荐+序号指代"为例:
- 压缩摘要(实时链路,200 Token):【业务领域】:主域=fund。【意图轨迹】:咨询基金推荐→系统展示5只基金→用户要求解读第3只。【列表锚点】list_id=fund_rec_001,domain=fund,共5项。【压缩正文】用户正针对第3只基金进行追问。
- 快速处理型摘要(转人工时生成,80字):用户要求解读广发医疗保健基金(代码004851),已展示产品详情,用户正在浏览,暂无购买意向,无需紧急跟进。
- 归档记录型摘要(对话结束后生成,完整记录,保留社交寒暄):2026-08-14 14:23用户咨询基金推荐,14:25系统推荐5只基金,14:26用户指定第3只(广发医疗保健)要求解读,14:28系统展示完整产品详情(净值、持仓、费率),14:35用户表示"再看看",未产生购买。全程合规风险提示已展示。
4.5.4. 压缩摘要作为"信息底座"的价值
高质量的上下文压缩摘要不仅是意图识别模型的输入,它结构化、高密度的信息(如【业务领域】、【意图轨迹】、【情绪走势】、【待办事项】)可以作为"中间件",为其他五种摘要的生成提供坚实的数据底座,从而从根源上解决第2.2.1节问题A中提到的"摘要目的不明确"和"信息取舍无标准"的问题。
- 对归档记录型:压缩摘要提供事实骨架(关键事件、时间线、业务实体),原始对话负责填充血肉(如寒暄、完整语境),两者配合确保归档的完整性与可读性。
- 对快速处理型:压缩摘要的【待办事项】和【当前状态】是核心素材,可直接复用,大幅缩短工单生成时间。
- 对分析洞察型:压缩摘要的【意图轨迹】和【跨域链】是极佳的分析特征,可用于聚类和归因,帮助产品团队快速定位高频问题和跨域关联。
- 对用户理解型:压缩摘要的【情绪走势】和【意图轨迹】可直接转化为行为标签,如"情绪敏感型用户""跨域操作频繁"等,丰富用户画像。
- 对模型训练型:压缩摘要的结构化字段可作为训练数据的预标注,大幅降低人工标注成本,加速模型迭代周期。
5. 容错与降级机制
说明:任何AI系统都必须考虑"降级"和"容错"。本节补充了当压缩摘要生成服务本身发生故障时的应对策略,是系统健壮性的必要保障。
5.1. 摘要生成服务异常处理
| 异常场景 | 降级策略 | 用户影响 | 恢复方式 |
|---|---|---|---|
| 摘要生成超时(>1000ms) | 回退到"滑动窗口"策略,只取最近5轮对话作为上下文 | 意图识别准确率略有下降,但服务不中断 | 自动重试,成功后切回正常模式 |
| 摘要生成服务返回格式错误 | 丢弃本次错误结果,使用上一次成功生成的摘要(如有),若无则回退到滑动窗口 | 状态可能略有滞后,但基本可用 | 告警通知人工介入,修复Prompt或模型 |
| 摘要生成服务完全不可用 | 全局降级到滑动窗口策略,并记录所有失败请求 | 长对话体验下降,但短对话不受影响 | 服务恢复后自动切回,补生成缺失摘要 |
| 索引映射表写入失败 | 在摘要中标记"列表锚点不可用",引导用户使用完整名称而非序号指代 | 用户指代体验从"说序号"降级为"说名称" | 异步重试写入,成功后更新摘要 |
| 跨域指代解析超时 | 回退到"最近域匹配",在最近3轮对话中搜索指代对象 | 准确率略有下降,但不中断 | 自动重试,成功后切回 |
5.2. 指代消解失败时的兜底策略
以下场景涵盖了第3.3.2.1节中"类型D(指向已丢弃域)"及其他指代失败情况的处理。
| 失败类型 | 系统行为 | 用户可见回复 |
|---|---|---|
| 索引表已过期(TTL到期) | 查询摘要历史记录,确认曾有此列表,但无法精确映射;向主对话模型返回"列表不存在"信号 | 主对话模型生成:“您上次的推荐列表已过期,是否需要我重新为您生成一次?” |
| 索引表未命中(position不存在) | 检查用户指代是否超出列表范围 | “您说的’第三个’可能不在当前列表中,当前共有N项,请您确认一下序号或名称?” |
| 索引表数据不一致 | 以主对话模型中的完整列表为准,重新构建索引表 | 无感知恢复,后台自动重建索引 |
| 跨域链追踪失败(指代对象未找到) | 触发澄清流程,引导用户明确指代对象 | “您说的’那笔钱’我不太确定具体指哪一笔,请问是基金收益还是理财余额?” |
| 指向已丢弃域(类型D场景) | 触发澄清流程 | “您提到的内容我没有记录,方便具体说明一下吗?” |
| 模糊指代触发兜底 | 触发通用澄清流程 | “您说的’那个’不太明确,方便具体说明一下吗?” |
设计原则:对于指向已丢弃域的指代及各类无法解析的指代,系统不应"假装理解",而应主动承认信息缺失并引导用户补充。
5.3. 监控与告警
| 监控项 | 告警阈值 | 处理动作 |
|---|---|---|
| 摘要生成P95延迟 | >1000ms持续5分钟 | 检查LLM服务状态,考虑扩容 |
| 摘要生成失败率 | >5%持续3分钟 | 触发自动降级到滑动窗口 |
| 索引映射表命中率 | <90%持续10分钟 | 检查Redis/Tair存储状态 |
| 任务完成度(日维度) | 较基线下降>3% | 人工抽检摘要质量,排查数据漂移 |
| 跨域指代解析准确率(日维度) | <80%持续10分钟 | 检查索引映射表数据一致性,排查跨域链标注逻辑 |
6. 评估指标体系
上下文压缩摘要的评估不是看"好不好看",而是看"压缩后任务能不能不掉链子"。
6.1. 评估维度总览
| 维度 | 权重/定位 | 核心问题 | 评估方式 | 预期目标 | 最低可接受值(一票否决) |
|---|---|---|---|---|---|
| 意图保真度 | 30% | 压缩后意图识别是否与原始对话一致? | 自动化对比实验 | ≥95% | ≥90% |
| 槽位召回率 | 20% | 各业务领域"必须保留"的槽位是否完整? | 人工抽检+正则匹配 | ≥90% | ≥85% |
| 任务完成度 | 一票否决 | 基于压缩摘要的任务成功率是否绝对低于90%? | 端到端A/B实验 | ≥95% | < 90% |
| 指代消解准确率 | 15% | 序号/名称指代是否正确解析(含索引表查询)? | 针对列表场景专项测试 | ≥95% | ≥85% |
| 跨业务领域指代准确率 | 15% | 跨域金额/实体/操作指代是否正确追踪和解析? | 专项跨域指代测试 | ≥90% | ≥80% |
| 边缘案例覆盖度 | 10% | 各类边缘案例处理是否符合规范? | 逐类专项测试 | 每类≥85% | 每类≥75% |
| 压缩效率 | 5% | 压缩比和生成延迟是否达标? | 自动统计 | 15%-25%,<500ms | <30%,<1000ms |
6.2. 各维度详细评估方法
(1)意图保真度(核心指标)
| 评估方式 | 具体方法 | 成本 | 可靠性 |
|---|---|---|---|
| 离线评估 | 准备测试集(原始对话+压缩摘要),分别跑意图识别模型,计算一致性准确率 | 低 | 中 |
| 在线A/B实验 | A组用原始上下文,B组用压缩摘要,对比意图识别准确率和任务完成率 | 高 | 最高 |
离线评估操作步骤:
- 抽取100-200条真实手机银行对话(覆盖单轮/多轮/投诉/查询等场景)
- 人工标注每条的最终意图标签(作为Ground Truth)
- 分别用原始对话和压缩摘要作为输入,调用意图识别模型
- 计算两组的准确率,对比差异
- 预期目标:压缩后准确率 ≥ 原始准确率的95%
(2)槽位召回率与准确率
| 指标 | 计算公式 | 预期目标 | 最低可接受值 |
|---|---|---|---|
| 槽位召回率 | 摘要中保留的"必须保留"槽位数 / 原始对话中该领域所有"必须保留"槽位数 | ≥90% | ≥85% |
| 槽位准确率 | 摘要中正确槽位数 / 摘要中所有槽位数 | ≥95% | ≥90% |
实施方法:按各业务领域的"必须保留"清单,定义关键槽位(基金代码、金额、卡号尾号等),写正则表达式从对话中提取这些槽位,对比压缩摘要中是否完整保留。
(3)任务完成度(北极星指标,一票否决)
| 场景 | 测试方法 | 对比指标 |
|---|---|---|
| 挂失处理 | 分别用原始对话和压缩摘要让AI执行挂失流程 | 挂失成功率、平均耗时 |
| 转账查询 | 分别用两种上下文让AI回答转账状态 | 准确率、用户满意度 |
| 投诉处理 | 分别用两种上下文让AI生成解决方案 | 问题解决率、响应时间 |
| 基金指代查询 | 分别用两种上下文,测试"第三个基金"类指代是否正确解析 | 指代解析准确率 |
操作步骤:
- 选取3-5个高频业务场景
- 每个场景准备30-50组真实对话
- A/B两组分别用原始对话和压缩摘要作为上下文
- 执行相同的下游任务,记录成功率
- 如果B组任务成功率低于90%(一票否决阈值),说明压缩摘要质量不达标
(4)跨业务领域指代准确率(专项评估)
详见第3.3.8节。
(5)压缩效率
| 指标 | 预期目标 | 最低可接受值 | 测量方式 |
|---|---|---|---|
| 压缩比 | 压缩后Token数 / 原始Token数 = 15%-25% | <30% | 自动统计 |
| 全量生成延迟 | < 500ms(P95) | < 1000ms(P95) | 系统监控 |
| 增量更新延迟 | < 200ms(P95) | < 500ms(P95) | 系统监控 |
6.3. 边缘案例测试分类表
以下按测试目的分为三大类,每类包含对应的测试案例:
| 类别 | 序号 | 案例名称 | 核心问题 | 压缩摘要中的关键字段 | 预期处理目标 |
|---|---|---|---|---|---|
| A. 核心机制专项测试 (测试第3.3节跨域指代机制) |
1 | 序号指代 | 用户说"第三个",是否正确解析 | 【列表锚点】+ 索引表position映射 | ≥95% |
| 2 | 跨域金额指代 | 用户说"把那笔钱转过去",是否正确溯源 | 跨域链追踪 + 金额槽位匹配 | ≥90% | |
| 3 | 跨域实体指代 | 用户说"它"(指上一轮基金),是否正确追踪 | 跨域链追踪 + 最近实体匹配 | ≥90% | |
| B. 场景覆盖与上下文理解 | 4 | 用户修正自己 | 用户说"不对,我说错了",是否正确处理变更 | 意图轨迹保留修正路径 + 【变更标记】 | ≥80% |
| 5 | 多意图叠加 | 一句话含多个诉求,涉及多个业务领域 | 【多意图列表】+ 跨域链标注 | ≥85% | |
| 6 | 情绪突变 | 用户态度急剧变化 | 情绪【!突变!】标记 + 触发事件 | ≥85% | |
| 7 | 用户沉默 | 长时间无响应 | 【等待状态】:等待时间+超时阈值 | ≥90% | |
| C. 容错与安全机制测试 (测试第3.8节) |
8 | 指向已丢弃域 | 用户指代已被丢弃的信息 | 无 → 触发澄清流程 | ≥90% |
| 9 | 隐私合规 | 涉及他人信息 | 【隐私标记】:涉及第三方+授权状态 | ≥95% |
6.4. 增量更新摘要的专项评估
| 评估项 | 方法 | 预期目标 | 最低可接受值 |
|---|---|---|---|
| 多步累积偏差 | 模拟10轮增量更新后,对比全量重新生成的摘要,计算一致性 | 一致性≥90% | 一致性≥85% |
| 错误放大率 | 监控增量更新过程中,是否因某一步的错误导致后续持续偏离 | 单步错误应在3步内自动修正 | 单步错误应在5步内修正 |
| 索引映射表一致性 | 增量更新后,索引映射表是否与主对话模型中的列表内容保持一致 | 完全一致 | 完全一致(硬性要求) |
| 跨域回写一致性 | 跨域解析结果写回【当前状态】后,后续轮次是否正确继承 | 完全一致 | 完全一致(硬性要求) |
7. 落地实施路线图
| 阶段 | 核心任务 | 产出 | 时间预估 |
|---|---|---|---|
| 第一阶段 | ① 编写Prompt模板(全量+增量),融入业务领域过滤规则 ② 与业务专家协作定义各业务领域的"必须保留/可压缩/可外置/可丢弃"清单 ③ 准备100-200条测试对话,人工标注业务领域、意图和关键槽位 ④ 设计实体索引映射表数据结构(含跨域桥梁字段) ⑤ 识别并定义各类边缘案例的测试用例 |
Prompt V1、标注测试集、领域规则表、索引映射表Schema、边缘案例测试用例集 | 2周 |
| 第二阶段 | ① 跑离线评估(意图保真度+槽位召回率+跨域指代专项) ② 根据结果调优Prompt和领域过滤规则 ③ 目标:意图一致性≥90%,槽位召回率≥85%,跨域解析≥85% ④ 增量更新摘要的累积误差测试 ⑤ 索引映射表功能开发与单元测试 ⑥ 指向已丢弃域兜底澄清流程开发 |
Prompt V2、离线评估报告、索引映射表V1、兜底流程V1 | 2周 |
| 第三阶段 | ① 小流量A/B实验(选1-2个低频场景) ② 监控任务完成度、压缩延迟、跨域指代准确率 ③ 调优压缩比阈值和领域过滤边界 ④ 评估增量更新的累积误差是否达标 ⑤ 专项测试指代消解准确率(含跨域) ⑥ 专项测试各类边缘案例覆盖度 |
在线实验数据、调优策略 | 3周 |
| 第四阶段 | ① 扩展至更多场景 ② 建立自动化评估流水线 ③ 长期监控核心指标+指代消解准确率+跨域指代准确率+边缘案例覆盖度 |
生产环境正式上线 | 持续 |
最简起步方案(如果资源有限):先抓6个核心指标:意图一致性(离线100条)、槽位是否丢(自动化脚本)、任务成功率(选1个高频场景做30组对比)、指代消解准确率(列表场景专项测试)、跨域金额/实体指代准确率、3-4个高频边缘案例。这六个跑通后再逐步完善。
8. 总结
本文档系统阐述了手机银行场景下"上下文压缩型摘要"的设计理念、核心机制和实施路径。核心要点可归纳为以下六条:
-
定位清晰:上下文压缩型摘要的目标读者是AI模型而非人类,其本质是"对话状态的高密度压缩表示",服务于意图识别模型的输入构造。
-
因果链条明确:第2章梳理了三大问题的层级关系——问题B(窗口不匹配) 是根因,问题A(摘要质量差) 是方案缺陷,二者共同导致问题C(注意力分散) 的最终表现。压缩摘要直面这三个问题,通过结构化输出和高压缩比实现稳定控制。
-
业务领域驱动:通过"业务领域识别→按领域规则过滤→跨域约束检查"的三步流程,确保不同业务场景下的信息取舍有据可依,解决了传统摘要"该留的不留、该删的不删"的问题。
-
跨域指代机制:第3.3节定义的四类指代类型(域内/跨域/向索引表/指向已丢弃域)和对应的追踪流程,是压缩摘要在多轮、多域对话中保持语义连贯性的核心保障。索引映射表作为"跨域桥梁",承载了列表类信息的精确映射。
-
架构分离:意图识别模型与主对话模型的上下文完全分离,压缩摘要替代系统长回复注入意图识别模型,彻底解决了"长回复撑爆窗口"的问题。
-
多摘要协同:压缩摘要作为"信息底座",为归档、处理、分析、画像、训练等五种传统摘要提供结构化数据支持,形成一个完整的摘要生产体系。
落地实施建议遵循"先离线验证、再小流量实验、最后全量上线"的渐进式路径,并持续监控任务完成度这一北极星指标,确保压缩摘要带来的收益可量化、可追溯。
- 点赞
- 收藏
- 关注作者
评论(0)