用 TiMem 构建个性化 AI 客服:让机器人记住每个用户的偏好

0 阅读5分钟

用 TiMem 构建个性化 AI 客服:让机器人记住每个用户的偏好

大多数 AI 客服都有一个致命缺陷:每次对话都是从零开始的

用户上周刚说过「我不喜欢推销话术」,这周打来电话,客服照样开口就推。用户反复解释自己的情况,客服永远记不住。这不叫智能,这叫「高科技失忆症」。

本文带你用 TiMem 搭一个真正有记忆的 AI 客服系统,让它记住每个用户的偏好、历史问题和沟通风格。


问题根源:为什么现有 AI 客服没有记忆?

主流方案的架构是这样的:

用户输入 → [检索历史工单] → 塞进 prompt → LLM 回复

问题在于:

  1. 工单是结构化数据,不是记忆。「用户曾经投诉过」和「用户不喜欢被催促」是两类完全不同的信息,前者可以查库,后者需要从对话中归纳。
    1. 没有时序感知。用户的偏好会变化,三个月前的投诉和昨天的反馈权重应该不同。
    1. token 上限。把所有历史工单塞进 prompt,一个老用户可能直接超出上下文窗口。

TiMem 的五层时序记忆树(TMT)正好解决这三个问题。


TiMem 五层记忆树回顾

层级存什么时间跨度
L1 原始片段对话原文当次会话
L2 会话摘要本次沟通要点单次会话
L3 每日总结当天所有交互摘要
L4 每周总结本周行为模式
L5 用户画像长期偏好、沟通风格累计

客服场景最有价值的是 L5 用户画像:知道这个用户是急性子还是慢性子,喜欢简洁回答还是详细解释,有没有踩过某类坑。


动手搭建

1. 安装依赖

pip install timem-client openai

申请 TiMem API Key:console.timem.cloud

2. 初始化客户端

import os
from timem_client import TiMemClient
from openai import OpenAI

timem = TiMemClient(api_key=os.environ["TIMEM_API_KEY"])
llm = OpenAI()

3. 核心:记忆感知的客服回复

def customer_service_reply(user_id: str, user_message: str) -> str:
    # 检索该用户的历史记忆
        memories = timem.search(
                query=user_message,
                        user_id=user_id,
                                top_k=5
                                    )
                                    
                                        # 构建记忆上下文
                                            memory_context = ""
                                                if memories:
                                                        lines = [f"- {m['content']}" for m in memories]
                                                                memory_context = "关于这位用户你已知道:\n" + "\n".join(lines)
                                                                
                                                                    # 生成回复
                                                                        base_prompt = "你是一位专业的客服代表,根据用户历史偏好给出个性化回复。"
                                                                            system_content = base_prompt
                                                                                if memory_context:
                                                                                        system_content = base_prompt + "\n\n" + memory_context
                                                                                        
                                                                                            messages = [
                                                                                                    {"role": "system", "content": system_content},
                                                                                                            {"role": "user", "content": user_message}
                                                                                                                ]
                                                                                                                
                                                                                                                    response = llm.chat.completions.create(
                                                                                                                            model="gpt-4o",
                                                                                                                                    messages=messages
                                                                                                                                        )
                                                                                                                                            reply = response.choices[0].message.content
                                                                                                                                            
                                                                                                                                                # 把这次对话存入记忆
                                                                                                                                                    timem.add(
                                                                                                                                                            messages=[
                                                                                                                                                                        {"role": "user", "content": user_message},
                                                                                                                                                                                    {"role": "assistant", "content": reply}
                                                                                                                                                                                            ],
                                                                                                                                                                                                    user_id=user_id
                                                                                                                                                                                                        )
                                                                                                                                                                                                        
                                                                                                                                                                                                            return reply
                                                                                                                                                                                                            ```
                                                                                                                                                                                                            
                                                                                                                                                                                                            ### 4. 模拟多轮对话效果
                                                                                                                                                                                                            
                                                                                                                                                                                                            ```python
                                                                                                                                                                                                            if __name__ == "__main__":
                                                                                                                                                                                                                USER_ID = "user_zhang_wei"
                                                                                                                                                                                                                
                                                                                                                                                                                                                    # 第一次对话
                                                                                                                                                                                                                        r1 = customer_service_reply(USER_ID, "我想退款,上次买的耳机音质太差了")
                                                                                                                                                                                                                            print("客服:", r1)
                                                                                                                                                                                                                            
                                                                                                                                                                                                                                # 第二次对话(第二天)
                                                                                                                                                                                                                                    r2 = customer_service_reply(USER_ID, "我又来了,这次想买蓝牙音箱")
                                                                                                                                                                                                                                        print("客服:", r2)
                                                                                                                                                                                                                                            # 预期:客服记得上次退款经历,主动提供保障说明
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                # 第三次对话(一周后)
                                                                                                                                                                                                                                                    r3 = customer_service_reply(USER_ID, "你们的售后怎么样?")
                                                                                                                                                                                                                                                        print("客服:", r3)
                                                                                                                                                                                                                                                            # 预期:基于用户画像,针对性回答音质/售后保障
                                                                                                                                                                                                                                                            ```
                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                            ### 5. 主动写入用户标签
                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                            除了自动归纳,你也可以在客服系统里主动标记用户偏好:
                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                            ```python
                                                                                                                                                                                                                                                            def tag_user_preference(user_id: str, preference: str):
                                                                                                                                                                                                                                                                """在特殊事件后主动写入用户偏好标签"""
                                                                                                                                                                                                                                                                    timem.add(
                                                                                                                                                                                                                                                                            messages=[{
                                                                                                                                                                                                                                                                                        "role": "system",
                                                                                                                                                                                                                                                                                                    "content": f"[客服标注] {preference}"
                                                                                                                                                                                                                                                                                                            }],
                                                                                                                                                                                                                                                                                                                    user_id=user_id
                                                                                                                                                                                                                                                                                                                        )
                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                        # 用户明确表示不喜欢推销
                                                                                                                                                                                                                                                                                                                        tag_user_preference(
                                                                                                                                                                                                                                                                                                                            "user_zhang_wei",
                                                                                                                                                                                                                                                                                                                                "用户明确表示不喜欢主动推销,只在用户主动询问时推荐产品"
                                                                                                                                                                                                                                                                                                                                )
                                                                                                                                                                                                                                                                                                                                ```
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                ---
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                ## 效果对比
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                | 场景 | 普通 AI 客服 | TiMem 客服 |
                                                                                                                                                                                                                                                                                                                                |------|------------|------------|
                                                                                                                                                                                                                                                                                                                                | 用户第二次来咨询 | 重新介绍自己 | 自动识别老用户 |
                                                                                                                                                                                                                                                                                                                                | 用户曾经投诉过 | 不知道 | 主动提供补偿方案 |
                                                                                                                                                                                                                                                                                                                                | 用户喜欢简洁 | 长篇大论 | 简明扼要回复 |
                                                                                                                                                                                                                                                                                                                                | 用户讨厌推销 | 照样推 | 克制推销话术 |
                                                                                                                                                                                                                                                                                                                                | 跨月记忆 | 完全遗忘 | L4/L5 层长期保留 |
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                ---
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                ## 进阶:多 session 管理
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                每次用户打进来开一个新 session,TiMem 自动在会话结束后归纳成 L2 摘要:
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                ```python
                                                                                                                                                                                                                                                                                                                                import uuid
                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                class CustomerServiceSession:
                                                                                                                                                                                                                                                                                                                                    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".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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ```
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ## 部署注意事项
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - **user_id**:用你系统里的用户唯一标识(手机号 hash 或 uid)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - **记忆清理**:TiMem 支持按 user_id 删除全部记忆,满足 GDPR 合规需求
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - **隐私**:敏感字段(身份证、银行卡)建议写入前做脱敏处理
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - **冷启动**:新用户前 3 轮对话记忆较少,可以加通用客服兜底 prompt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - **Token 成本**:相比把所有历史塞进 context,TiMem 分层归纳平均减少 52% token 消耗,大规模客服场景成本差异显著
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ## 小结
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                真正的个性化客服 = 知道你是谁 + 记得你说过什么 + 理解你的偏好。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TiMem 的五层时序记忆树让这件事从「理论上可行」变成了「一下午能跑起来」。核心优势是:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. **自动归纳**,无需手动维护用户画像
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. **时序感知**,近期记忆比旧记忆权重更高
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. **52% token 节省**,降低大规模部署成本
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                GitHub 仓库:https://github.com/TiMEM-AI/timem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                如果你对 AI 记忆技术感兴趣,欢迎访问 TiMem 的 GitHub 仓库:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                https://github.com/TiMEM-AI/timem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                给我们一个 Star,你的支持是我们持续开源的最大动力!
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                在线体验:https://playground.timem.cloud
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                技术文档:https://docs.timem.cloud