本教程展示了如何利用 GPT-4o、Mem0.ai 和 Qdrant 构建一个能够“记住”用户信息的客户支持 AI Agent。整个项目使用不到 100 行 Python 代码即可实现,适合快速部署和迭代。
随着大语言模型(LLM)在实际应用中的广泛落地,如何让 AI 拥有“记住用户”的能力,成为下一代智能助手的关键。在这篇完整的实战教程中,我将带你从 0 到 1 构建一个具备持久记忆的客户支持 AI 助手,能够持续跟踪用户的互动历史,生成更精准的回应。

本项目将使用:
OpenAI 最新的 GPT-4o 模型
Mem0 内存管理框架
Qdrant 作为高性能向量数据库
Streamlit 打造前端聊天界面
最终效果:一个能记住用户过往对话、自动生成客户信息,并持续学习改进的 AI 客服系统。
🧰 项目功能亮点
支持上下文记忆的客服助手聊天界面
使用合成数据自动生成客户资料和订单历史
多轮对话记忆能力,可查阅完整用户历史
使用 Qdrant 持久化存储所有对话和元数据
支持通过用户 ID 检索个性化记录
✅ 环境准备与依赖安装
在开始之前,请确保你已经具备以下条件:
安装 Python 3.7+
获取 OpenAI API Key(推荐 GPT-4o)
安装 Docker(用于运行 Qdrant 向量数据库)
推荐使用 VSCode / PyCharm 编辑器
第一步:克隆项目代码库
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
cd awesome-llm-apps/ai_customer_support_agent
安装所需依赖项:
pip install -r requirements.txt
启动本地 Qdrant 实例(默认监听 6333 端口):
docker pull qdrant/qdrant
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant
🧱 创建你的 Streamlit 客服助手前端
新建一个文件 customer_support_agent.py,并逐步填入以下内容。
1. 导入所需库
import streamlit as st
from openai import OpenAI
from mem0 import Memory
import os
import json
from datetime import datetime, timedelta
2. 设置 Streamlit 页面 UI
st.title("智能客服助手(带记忆功能) 🤖")
st.caption("欢迎来到智能客服中心,我们的 AI 会记住你的每一次提问。")
openai_api_key = st.text_input("请输入 OpenAI API Key", type="password")
if openai_api_key:
os.environ['OPENAI_API_KEY'] = openai_api_key
🧠 构建支持“记忆”的客服Agent类
以下是核心逻辑类,封装了 GPT-4o 聊天、Mem0 管理和数据生成功能。
3. 初始化助手类与内存配置
class CustomerSupportAIAgent:
def __init__(self):
config = {
"vector_store": {
"provider": "qdrant",
"config": {
"model": "gpt-4o-mini",
"host": "localhost",
"port": 6333,
}
},
}
self.memory = Memory.from_config(config)
self.client = OpenAI()
self.app_id = "customer-support"
4. 处理客户查询并调用记忆
def handle_query(self, query, user_id=None):
relevant_memories = self.memory.search(query=query, user_id=user_id)
context = "历史交互内容如下:\n"
for mem in relevant_memories:
context += f"- {mem['text']}\n"
full_prompt = f"{context}\n客户:{query}\n客服:"
response = self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是 TechGadgets.com 的客服 AI,擅长处理电子产品订单问题。"},
{"role": "user", "content": full_prompt}
]
)
answer = response.choices[0].message.content
# 保存问答到记忆
self.memory.add(query, user_id=user_id, metadata={"app_id": self.app_id, "role": "user"})
self.memory.add(answer, user_id=user_id, metadata={"app_id": self.app_id, "role": "assistant"})
return answer
5. 获取用户所有记忆和生成合成数据
def get_memories(self, user_id=None):
return self.memory.get_all(user_id=user_id)
def generate_synthetic_data(self, user_id):
today = datetime.now()
order_date = (today - timedelta(days=10)).strftime("%B %d, %Y")
expected_delivery = (today + timedelta(days=2)).strftime("%B %d, %Y")
prompt = f"""生成一个客户资料,包括:
1. 客户基本信息
2. 最近订单({order_date} 下单,预计 {expected_delivery} 到货)
3. 产品名称、订单号、金额
4. 客户地址
5. 去年内的2-3笔历史订单
6. 与客服的历史互动内容
7. 购物偏好和行为模式
请以 JSON 格式返回。"""
response = self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个用于生成客户档案的 AI,请始终返回标准 JSON 格式数据。"},
{"role": "user", "content": prompt}
],
response_format={"type": "json_object"}
)
customer_data = json.loads(response.choices[0].message.content)
# 写入所有数据到记忆
for key, value in customer_data.items():
if isinstance(value, list):
for item in value:
self.memory.add(json.dumps(item), user_id=user_id, metadata={"app_id": self.app_id, "role": "system"})
else:
self.memory.add(f"{key}: {json.dumps(value)}", user_id=user_id, metadata={"app_id": self.app_id, "role": "system"})
return customer_data
support_agent = CustomerSupportAIAgent()
🖥️ 构建前端交互界面(Streamlit)
6. 客户 ID 与侧边栏操作
st.sidebar.title("🆔 客户资料管理")
previous_customer_id = st.session_state.get("previous_customer_id", None)
customer_id = st.sidebar.text_input("输入客户 ID")
if customer_id != previous_customer_id:
st.session_state.messages = []
st.session_state.previous_customer_id = customer_id
st.session_state.customer_data = None
if st.sidebar.button("生成合成客户数据"):
if customer_id:
with st.spinner("正在生成客户数据..."):
st.session_state.customer_data = support_agent.generate_synthetic_data(customer_id)
st.sidebar.success("生成完成!")
else:
st.sidebar.error("请先输入客户 ID")
if st.sidebar.button("查看客户资料"):
if st.session_state.customer_data:
st.sidebar.json(st.session_state.customer_data)
else:
st.sidebar.info("尚未生成客户资料。")
if st.sidebar.button("查看记忆内容"):
if customer_id:
memories = support_agent.get_memories(user_id=customer_id)
if memories:
st.sidebar.markdown(f"**{customer_id} 的记忆内容:**")
for mem in memories:
st.sidebar.markdown(f"- {mem['text']}")
else:
st.sidebar.info("当前客户暂无历史记录。")
else:
st.sidebar.error("请先输入客户 ID")
7. 聊天交互与对话历史展示
if "messages" not in st.session_state:
st.session_state.messages = []
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
query = st.chat_input("请输入你的问题...")
if query and customer_id:
st.session_state.messages.append({"role": "user", "content": query})
with st.chat_message("user"):
st.markdown(query)
answer = support_agent.handle_query(query, user_id=customer_id)
st.session_state.messages.append({"role": "assistant", "content": answer})
with st.chat_message("assistant"):
st.markdown(answer)
elif not customer_id:
st.error("请输入客户 ID 后再开始聊天。")
🚀 启动你的应用
在项目目录下运行:
streamlit run customer_support_agent.py
浏览器中访问 http://localhost:8501 即可使用你的智能客服助手!
📌 后续拓展建议
你可以进一步拓展功能,比如:
接入物流订单系统,实时查询运单状态
添加语音输入和输出功能,打造语音客服机器人
使用更强的嵌入模型(如 BGE-M3、Cohere Rerank)优化搜索相关性
将应用部署到云端(如 Hugging Face Spaces 或 AWS EC2)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...