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,支持持续开源!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐