TiMem实战:构建有长期记忆的个性化AI 客服系统(附完整代码)
TiMem 实战:构建有长期记忆的个性化 AI 客服系统(附完整代码)
一、现有 AI 客服的核心缺陷
当前大多数企业部署的 AI 客服方案,本质上仍是「无状态服务」:每次会话结束,对话记录就消失了。下次同一用户接入,系统毫不知情。
工程上常见的补救手段是把历史工单检索后塞进 prompt,但这种方案有三个根本性局限:
1. 结构化工单 ≠ 软性偏好
工单系统记录的是「投诉了什么」,但无法归纳「不喜欢怎样的沟通方式」。后者需要从对话语义中自动抽取。
2. 无时序权重
三个月前的一次投诉和昨天的一次夸赞,在客服响应时权重理应不同。扁平检索无法区分。
3. Token 瓶颈
高活跃用户历史记录可能达到数万 token,超出 context 窗口,或造成显著推理成本增加。
二、TiMem 的解法:五层时序记忆树(TMT)
TiMem 来自论文 arXiv:2601.02845,基于认知神经科学的互补学习系统理论(CLS)。核心架构是五层时序记忆树:
L1 原始对话片段 ← 实时写入
↓ LLM自动归纳
L2 会话摘要 ← 每次对话结束后生成
↓ LLM自动归纳
L3 每日总结 ← 跨会话日维度归纳
↓ LLM自动归纳
L4 每周总结 ← 行为模式、偏好趋势
↓ LLM自动归纳
L5 用户画像 ← 全生命周期特征
```
**复杂度感知召回**:查询时根据问题类型自动选层,避免无关记忆占用 context:
| 问题类型 | 召回层 |
|---------|--------|
| 「你上次说了什么」 | L1/L2 |
| 「你最近的状态」 | L2/L3 |
| 「你这段时间的偏好变化」 | L3/L4 |
| 「你是什么样的用户」 | L4/L5 |
核心性能数据:
- LoCoMo 评测:75.30%(vs Mem0 约 64%)
- - LongMemEval-S:76.88%(vs Mem0 约 65%)
- - 召回记忆长度减少 52.20%,直接降低推理 Token 消耗
---
## 三、系统架构设计
┌─────────────────────────────────────────────┐
│ AI 客服系统 │
├─────────────┬───────────────────────────────┤
│ 用户接入层 │ 电话 / 在线聊天 / App │
├─────────────┼───────────────────────────────┤
│ 会话管理层 │ session_id 分配 + 轮次管理 │
├─────────────┼───────────────────────────────┤
│ 记忆检索层 │ TiMem 复杂度感知召回 │
├─────────────┼───────────────────────────────┤
│ LLM 推理层 │ gpt-4o / claude-3.5 等 │
├─────────────┼───────────────────────────────┤
│ 记忆写入层 │ TiMem 自动分层归纳存储 │
└─────────────┴───────────────────────────────┘
---
## 四、完整实现代码
### 4.1 依赖安装与初始化
```bash
pip install timem-client openai
import os
import uuid
from timem_client import TiMemClient
from openai import OpenAI
timem = TiMemClient(api_key=os.environ["TIMEM_API_KEY"])
llm = OpenAI()
4.2 单轮记忆感知回复
def customer_service_reply(user_id: str, user_message: str) -> str:
# Step 1: 检索用户历史记忆
memories = timem.search(
query=user_message,
user_id=user_id,
top_k=5
)
# Step 2: 构建个性化 prompt
base_prompt = (
"你是一位专业的客服代表。"
"根据用户的历史偏好和沟通风格,给出个性化回复。"
"注意:自然融入记忆,不要出现'根据记录'等字样。"
)
system_content = base_prompt
if memories:
lines = [f"- {m['content']}" for m in memories]
memory_block = "关于这位用户你已知道:\n" + "\n".join(lines)
system_content = base_prompt + "\n\n" + memory_block
# Step 3: LLM 推理
response = llm.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_message}
]
)
reply = response.choices[0].message.content
# Step 4: 写入记忆
timem.add(
messages=[
{"role": "user", "content": user_message},
{"role": "assistant", "content": reply}
],
user_id=user_id
)
return reply
```
### 4.3 多轮会话管理类
```python
class CustomerServiceSession:
"""
管理单次客服会话,支持多轮对话。
每次会话结束后,TiMem 自动将对话归纳为 L2 摘要。
"""
def __init__(self, user_id: str):
self.user_id = user_id
self.session_id = str(uuid.uuid4())
self.history = []
def chat(self, user_message: str) -> str:
# 检索记忆(包含跨会话历史)
memories = timem.search(
query=user_message,
user_id=self.user_id,
session_id=self.session_id,
top_k=5
)
memory_context = ""
if memories:
lines = [f"- {m['content']}" for m in memories]
memory_context = "\n用户背景信息:\n" + "\n".join(lines)
self.history.append({"role": "user", "content": user_message})
system_msg = "专业客服,个性化服务。" + memory_context
messages = [{"role": "system", "content": system_msg}] + self.history
response = llm.chat.completions.create(
model="gpt-4o",
messages=messages
)
reply = response.choices[0].message.content
self.history.append({"role": "assistant", "content": reply})
# 异步写入记忆(生产环境建议用异步)
timem.add(
messages=[
{"role": "user", "content": user_message},
{"role": "assistant", "content": reply}
],
user_id=self.user_id,
session_id=self.session_id
)
return reply
```
### 4.4 主动写入用户标签
```python
def tag_user_preference(user_id: str, tag: str):
"""
客服操作后手动标注用户偏好,直接写入 TiMem 记忆层。
会参与后续的自动归纳,最终体现在 L5 用户画像中。
"""
timem.add(
messages=[{
"role": "system",
"content": f"[客服标注] {tag}"
}],
user_id=user_id
)
# 使用示例
tag_user_preference(
"user_001",
"用户明确表示不喜欢主动推销,仅在主动询问时推荐产品"
)
tag_user_preference(
"user_001",
"用户偏好简洁回答,不需要详细背景解释"
)
```
---
## 五、效果验证
以下是相同用户跨三次对话的效果对比:
**第 1 次对话**(首次接触)
- 用户:「我想退款,上次买的耳机音质太差」
- - 普通客服:走标准退款流程
- - TiMem 客服:走标准退款流程(首次无差异)
**第 2 次对话**(第二天)
- 用户:「我想买蓝牙音箱」
- - 普通客服:直接推荐热销款
- - TiMem 客服:**主动提及上次退款经历,重点介绍音质保障和退换政策**
**第 3 次对话**(一周后)
- 用户:「你们售后怎么样」
- - 普通客服:背诵标准售后政策
- - TiMem 客服:**结合用户两次音质相关历史,针对性介绍音质投诉处理流程和补偿方案**
| 维度 | 普通 AI 客服 | TiMem 客服 |
|------|------------|------------|
| 跨会话识别 | ❌ 重新介绍 | ✅ 自动识别老用户 |
| 历史投诉感知 | ❌ 不知道 | ✅ 主动关联处理 |
| 沟通风格适配 | ❌ 模板化 | ✅ 匹配用户偏好 |
| 推销克制 | ❌ 一视同仁 | ✅ 尊重用户标签 |
| Token 消耗 | 随历史线性增长 | **恒定低消耗** |
---
## 六、生产部署注意事项
**user_id 设计**:建议使用用户唯一标识的 hash,避免直接存储手机号等敏感信息。
**隐私合规**:
- TiMem 支持按 user_id 删除全部记忆,满足 GDPR「被遗忘权」要求
- - 写入前对银行卡、身份证等字段做正则脱敏
**冷启动处理**:新用户前 3-5 轮对话记忆较少,建议加通用客服 system prompt 兜底。
**成本估算**:TiMem 分层召回比全量 context 平均减少 52% token,百万级 MAU 客服场景月度推理成本差异可达数千美元。
---
## 七、总结
本文展示了基于 TiMem 的个性化 AI 客服完整实现。核心价值点:
1. **五层时序树自动归纳**:无需手动维护用户画像,LLM 自动完成
2. 2. **复杂度感知召回**:精准返回相关记忆,不污染 context
3. 3. **52% Token 节省**:大规模部署的实际成本优势
4. 4. **合规友好**:支持按用户删除全部记忆
GitHub 仓库:https://github.com/TiMEM-AI/timem
在线体验:https://playground.timem.cloud
技术文档:https://docs.timem.cloud
如果这篇文章对你有帮助,欢迎给 TiMem 仓库点个 Star,支持持续开源!
更多推荐



所有评论(0)