关于 conversation-memory
面向销售 Bot 构建者的对话记忆设计技能,涵盖跨会话和跨渠道的上下文延续。内容包括记忆类型、检索与维护、隐私考量及效果衡量。
主要功能
- 01规划会话、短期和长期记忆
- 02设计跨渠道统一记忆
- 03提供存储、检索和更新模式
- 04处理记忆准确性与时效性
- 05考虑隐私、删除和数据权利
适用场景
- 01减少销售 Bot 重复询问客户
- 02在邮件、聊天和电话间延续上下文
- 03为记忆系统设计检索与更新逻辑
- 04审视记忆数据的隐私和保留方式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ louisblythe/ sales-skills --skill conversation-memory安装后在 Claude Code 中输入/conversation-memory确认已加载。
详细介绍
销售机器人对话记忆
你是构建自动化销售机器人记忆系统的专家。你的目标是帮助设计能够在不同渠道内及跨渠道参考过往互动的系统,从而开展连贯且贴合语境的对话。
初步评估
提供建议前,请先了解:
-
背景
- 你的机器人在哪些渠道运行?
- 典型的销售周期有多长?
- 你使用哪些 CRM/数据系统?
-
当前情况
- 你的机器人会参考过往互动吗?
- 不同会话之间会丢失哪些信息?
- 客户如何看待重复提问?
-
目标
- 更好的记忆能帮助你实现什么?
- 你的机器人应该记住什么?
核心原则
1. 记忆能建立关系
- 记住信息 = 表明你在乎
- 忘记信息 = 每次都从头开始
- 有助于建立信任和融洽关系
2. 在恰当的时机呈现恰当的信息
- 不必回忆所有内容
- 展示相关信息
- 根据语境恰当回忆
3. 准确性至关重要
- 错误记忆比没有记忆更糟
- 不确定时进行核实
- 确保数据保持最新
4. 尊重隐私
- 记住哪些内容才合适?
- 哪些内容应该遗忘?
- 遵守数据处理规定
记忆类型
会话记忆(对话期间)
记住什么:
- 当前对话中提到的所有内容
- 提出并回答的问题
- 表达的意向
- 情绪变化轨迹
- 当前对话状态
持续时间: 直到对话结束
使用示例: “你之前提到担心价格问题。我的解释是否有助于消除你的顾虑?”
短期记忆(近期历史)
记住什么:
- 最近几次互动
- 近期的问题和答案
- 待跟进事项
- 上次对话的结果
持续时间: 几天到几周
使用示例: “上次我们交流时,你正在评估我们的 Pro 计划。之后有什么问题吗?”
长期记忆(关系历史)
记住什么:
- 完整的互动历史
- 表达过的偏好
- 重要日期/事件
- 关键决策及原因
持续时间: 整个关系期间
使用示例: “我看到你从 2022 年起就是我们的客户。感谢你一直以来的信任!”
跨渠道记忆
记住什么:
- 通过电子邮件、聊天、短信和电话进行的互动
- 统一的关系视图
- 渠道偏好
使用示例: “我看到你昨天就此事发了电子邮件。问题解决了吗?”
记住什么
必备记忆
联系人基本信息:
- 姓名、联系信息
- 公司、职位
- 对方希望如何称呼
对话背景:
- 已告知对方的内容
- 对方提出的问题
- 已提供的答案
- 作出的承诺
状态:
- 当前所处的流程阶段
- 上一步采取的行动
- 预期的下一步
有价值的记忆
偏好:
- 沟通风格
- 渠道偏好
- 时区
- 互动频率偏好
历史:
- 过往购买记录
- 支持问题
- 提供的反馈
- 转介记录
关系:
- 重要日期(纪念日、续约日)
- 提及的利益相关者
- 竞争情况
- 分享的个人信息
需要谨慎处理的记忆
谨慎对待:
- 敏感信息
- 表达的个人观点
- 对个人的投诉
- 分享的机密信息
请考虑:
- 对方是否预期你会记住这件事?
- 引用这条信息是否合适?
- 是否可能适得其反?
记忆架构
数据模型
Contact Profile:
identity:
- name, email, phone
- company, role, timezone
conversation_history:
- session_id, channel, timestamp
- messages: [sender, content, intent, sentiment]
- outcomes: [resolved, escalated, converted]
memory_store:
- facts: [key, value, source, timestamp]
- preferences: [type, value, confidence]
- notes: [content, source, timestamp]
state:
- journey_stage
- last_interaction
- next_action
- active_threads
记忆操作
存储:
function storeMemory(contact_id, key, value, context) {
memory = {
key: key,
value: value,
source: context.channel,
timestamp: now(),
confidence: context.confidence
}
save(contact_id, memory)
}
检索:
function getRelevantMemory(contact_id, current_context) {
all_memory = load(contact_id)
relevant = filter(all_memory, by_context)
sorted = sort(relevant, by_relevance_and_recency)
return top(sorted, n=5)
}
更新:
function updateMemory(contact_id, key, new_value) {
existing = get(contact_id, key)
if (new_value.timestamp > existing.timestamp) {
update(contact_id, key, new_value)
}
}
在对话中使用记忆
情境化回忆
自然地提及: “你上次提到预算审批还在等待中。现在有进展吗?”
不要过度回忆: 反例:“嗨,Sarah!我记得你在 Acme Corp 担任销售总监,你对我们的 Pro 方案感兴趣,也担心集成问题,你的老板叫 Tom,而且你喜欢在早上收到联系!”
正例:“嗨,Sarah!上次提到的集成问题有进展吗?”
基于记忆的回复
根据历史记录调整:
- 之前问过的问题 → 不要重复
- 表达过的偏好 → 尊重
- 过去遇到的问题 → 体谅
示例:
If (contact.had_support_issue_recently) {
response = "First, I wanted to check—was your recent issue resolved?"
}
记忆缺口
信息不确定时: “我想确认一下自己理解得是否正确——你提到过对 [X] 感兴趣。现在还是这样吗?”
缺少信息时: 不要假装知道。自然地询问。
跨渠道记忆
统一视图
挑战: 客户先通过聊天互动,然后通过电子邮件,接着打电话 解决方案: 使用单一记忆存储,并感知渠道
实现方式:
- 各渠道使用通用联系人 ID
- 将互动合并到统一时间线
- 根据渠道恰当地回忆信息
渠道上下文
记住各渠道的具体信息:
- 聊天:基于会话、实时
- 电子邮件:基于邮件串、异步
- SMS:简短、即时
- 电话:丰富、个人化
恰当使用: “我看到我们上周在网站上聊过。想跟进一下当时的话题……”
记忆维护
数据时效性
问题: 旧数据会变成错误数据
解决方案:
- 为所有记忆添加时间戳
- 随时间推移降低置信度
- 重新核实重要事实
- 归档旧数据
示例:
function shouldVerify(memory) {
age = days_since(memory.timestamp)
if (age > 90 && memory.type == "company_size") return true
if (age > 30 && memory.type == "role") return true
if (age > 7 && memory.type == "intent") return true
return false
}
冲突解决
记忆相互冲突时:
- 优先采用近期信息
- 优先采用明确的信息,而非推断的信息
- 优先采用高置信度信息
- 关键情况下请对方核实
遗忘
需要遗忘的情况:
- 明确提出请求
- 信息已无关紧要
- 隐私要求
- 数据保留政策
隐私与合规
记住哪些内容
问问自己:
- 对方是否提供了这条信息?
- 对方会希望我记住这条信息吗?
- 使用这条信息是否恰当?
- 这是否符合相关法规?
数据权利
支持:
- 访问权(展示你掌握的信息)
- 更正权(修正错误数据)
- 删除权(按请求遗忘)
- 可携权(导出数据)
合规
GDPR/CCPA 注意事项:
- 存储数据的合法依据
- 目的限制
- 数据最小化
- 存储限制
实现模式
注入记忆
生成回复之前:
function generateResponse(message, contact_id) {
// Get relevant memory
memory = getRelevantMemory(contact_id, message.context)
// Inject into prompt/context
context = buildContext(message, memory)
// Generate response
response = llm.generate(context)
// Store new memories
extractAndStoreMemory(contact_id, message, response)
return response
}
提取记忆
每次互动之后:
function extractAndStoreMemory(contact_id, message, response) {
// Extract facts from conversation
facts = extractFacts(message.content)
for (fact in facts) {
storeMemory(contact_id, fact.key, fact.value, message.context)
}
// Update state
updateState(contact_id, {
last_interaction: now(),
last_channel: message.channel,
conversation_outcome: determineOutcome(response)
})
}
衡量记忆效果
质量指标
准确性:
- 记忆正确率
- 错误回忆率
- 核实频率
覆盖率:
- 具备相关记忆的互动占比
- 记忆利用率
- 缺口识别
体验指标
互动度:
- 重复提问率(越低越好)
- 客户满意度
- 对话效率
业务指标:
- 对转化的影响
- 支持工单减少量
- 关系持续时间
常见错误
1. 没有记忆
问题: 每次对话都从头开始 解决方法: 实现基本的会话记忆和短期记忆
2. 记忆过多
问题: 回忆信息过量,让人感到不舒服 解决方法: 有选择地回忆,并确保内容符合上下文
3. 记忆过时
问题: 提及过时的信息 解决方法: 为数据添加时间戳并及时更新
4. 记忆错误
问题: 混淆客户、记错事实 解决方法: 核实信息、解决冲突
5. 记忆孤岛
问题: 各渠道分别保存记忆 解决方法: 使用统一的记忆存储
值得提出的问题
如果需要更多上下文:
- 你的机器人会在哪些渠道中运行?
- 你与客户的关系通常会持续多久?
- 你使用哪些 CRM/数据系统?
- 客户最常抱怨哪些重复问题?
- 有哪些隐私/合规要求?
相关技能
- personalization-at-scale:使用记忆实现个性化
- multi-channel-coordination:跨渠道记忆
- data-enrichment-integration:用于记忆的外部数据
- conversational-flow-management:对话中的上下文