基于 Mem0、OpenAI 与 Supabase 构建带长期记忆的 AI 助手(含 Live Agent Studio 集成实战)
【免费下载链接】ottomator-agentsAll the open source AI Agents hosted on the oTTomator Live Agent Studio platform!项目地址: https://gitcode.com/GitHub_Trending/ot/ottomator-agents
导读
本文以 mem0-agent 项目为核心,系统讲解如何利用 Mem0 记忆库、OpenAI 大模型、Supabase(认证 + 向量存储)与 Streamlit 界面,构建一个"记得住过去"的 AI 助手:它能跨会话回忆用户偏好、自动把对话沉淀为长期记忆,并在每次回答前检索相关记忆注入提示词。读者将从零起步完成环境搭建、三层演进实现(内存版 → Supabase 持久化版 → 带认证的 Web 界面版),并进一步掌握将该 Agent 通过 FastAPI 端点 + Docker 部署到 Live Agent Studio 的完整方案。
项目概览与核心特性
该仓库演示了如何用 Mem0 库为 AI 助手赋予记忆能力,技术栈为:
- Mem0(mem0ai==0.1.65):负责记忆的抽取、存储与检索;
- OpenAI:负责基于"查询 + 记忆"生成回复;
- Supabase(supabase==2.13.0):提供用户认证与 pgvector 向量存储;
- Streamlit(streamlit==1.43.0):提供易于使用的 Web 聊天界面。
核心特性(详见 README.md):
- 🧠 长期记忆:AI 能记住过去的对话与用户偏好;
- 🔒 安全认证:用户数据通过 Supabase Auth 保护;
- 💬 个性化回复:回复会结合历史与上下文进行定制;
- 🌐 Streamlit 界面:开箱即用的 Web 聊天入口。
项目结构:四种递进式实现
仓库并非只提供一个版本,而是给出了一条从"最小可用"到"平台集成"的渐进实现路径:
| 实现 | 文件路径 | 说明 |
|---|---|---|
| 基础版 | iterations/v1-basic-mem0.py | 内存式存储,最快跑通 Mem0 全流程 |
| Supabase 集成版 | iterations/v2-supabase-mem0.py | 接入 Supabase pgvector 向量存储 |
| Streamlit Web 版 | iterations/v3-streamlit-supabase-mem0.py | Web 界面 + Supabase 认证(用户 ID 即 mem0 user_id) |
| Live Agent Studio 集成版 | studio-integration-version/ | FastAPI 端点 + Docker 部署,含认证、消息历史管理 |
其中studio-integration-version目录专门用于接入 Live Agent Studio 平台,包含:
- API 端点:mem0_agent_endpoint.py
- 核心 Agent 实现:mem0_agent.py
- 容器化配置:Dockerfile
- 依赖清单:requirements.txt
环境准备与前置条件
开始前请确认以下前置条件:
- Python 3.11+
- OpenAI API Key
- Supabase 账号与项目
第一步:创建并激活虚拟环境
# Windows python -m venv venv venv\Scripts\activate # macOS / Linux python -m venv venv source venv/bin/activate第二步:安装依赖
仓库根目录的 requirements.txt 已锁定完整依赖(含 mem0ai、openai、supabase、streamlit、fastapi、pydantic-ai、logfire 等):
pip install -r requirements.txt第三步:配置环境变量
复制.env.example为.env并填入密钥。README 中明确的环境变量如下:
| 变量 | 说明 |
|---|---|
OPENAI_API_KEY | OpenAI API Key |
MODEL_CHOICE | 使用的 OpenAI 模型,默认gpt-4o-mini |
DATABASE_URL | Supabase PostgreSQL 连接串 |
SUPABASE_URL | Supabase 项目 URL |
SUPABASE_KEY | Supabase service role key |
注意:当前仓库目录中未包含
.env.example实体文件,请根据上表自行创建。同时注意 README 中的提示——数据库密码中不要使用特殊字符,否则可能导致DATABASE_URL解析失败。
第四步:运行应用
streamlit run iterations/v3-streamlit-supabase-mem0.pySupabase 配置要点
- 创建 Supabase 账号与项目;
- 在 Project Settings > Database 获取数据库连接串;
- 在 Project Settings > API 获取 API Keys;
- 确认项目中已启用Email Auth(README 故障排查一节明确要求),否则注册登录会失败。
工作原理:记忆增强的四步流水线
README 给出的核心工作流程为:用户发送消息后,系统依次执行 4 个动作——
- 检索相关记忆:基于查询语句召回与该用户相关的历史记忆;
- 记忆注入提示词:把检索到的记忆拼入给 OpenAI 的 system prompt;
- 沉淀新记忆:把本轮对话作为新记忆写入记忆库;
- 返回回复:将 AI 生成的内容展示给用户。
从 v1-basic-mem0.py 源码中可以清晰看到该流水线的落地(第 20–35 行):
def chat_with_memories(message: str, user_id: str = "default_user") -> str: # 1. 检索相关记忆(limit=3) relevant_memories = memory.search(query=message, user_id=user_id, limit=3) memories_str = "\n".join(f"- {entry['memory']}" for entry in relevant_memories["results"]) # 2. 将记忆注入 system prompt system_prompt = f"You are a helpful AI. Answer the question based on query and memories.\nUser Memories:\n{memories_str}" messages = [{"role": "system", "content": system_prompt}, {"role": "user", "content": message}] response = openai_client.chat.completions.create(model="gpt-4o-mini", messages=messages) assistant_response = response.choices[0].message.content # 3. 追加 assistant 回复后,将整段对话沉淀为新记忆 messages.append({"role": "assistant", "content": assistant_response}) memory.add(messages, user_id=user_id) return assistant_response三个关键调用值得展开:
memory.search(query, user_id, limit=3):语义检索接口,按用户隔离记忆、限制返回条数;memory.add(messages, user_id):接受 OpenAI 风格的对话消息列表(role/content),自动从中抽取并存储记忆,user_id用于实现多用户隔离;user_id设计:v1/v2 中默认"default_user",v3 中改为登录用户的user.id,Studio 版本则透传请求中的user_id——这是记忆按用户隔离的关键。
从内存版到持久化版:两版配置对比
v1:纯内存存储
v1-basic-mem0.py 只配置 LLM,未声明vector_store,Mem0 会退化为进程内存储,重启即失忆:
config = { "llm": { "provider": "openai", "config": { "model": "gpt-4o-mini" } } } memory = Memory.from_config(config)v2:接入 Supabase 向量存储
v2-supabase-mem0.py 在配置中显式声明vector_store为 Supabase,模型名改由环境变量控制(第 9–23 行):
config = { "llm": { "provider": "openai", "config": { "model": os.getenv('MODEL_CHOICE', 'gpt-4o-mini') } }, "vector_store": { "provider": "supabase", "config": { "connection_string": os.environ['DATABASE_URL'], "collection_name": "memories" } } } memory = Memory.from_config(config)这里需要理解三个配置位的含义:
llm.config.model:记忆抽取与语义检索所使用的大模型,默认gpt-4o-mini;vector_store.provider: "supabase":指定向量库后端,Mem0 通过 pgvector 进行向量存取;collection_name: "memories":Supabase 中存储记忆的集合(表)名。
v1 → v2 的唯一差异就是这段向量存储配置,由此可实现"记忆持久化 + 跨会话召回",这正是整个项目的核心价值所在。
三、Streamlit Web 版:认证 + 记忆管理界面
v3-streamlit-supabase-mem0.py 是完整可演示的 Web 应用,相比 v2 增加了三层能力:
1. 资源缓存
用@st.cache_resource缓存 OpenAI Client 与 Memory 实例,避免每次交互重建连接(第 33–54 行):
@st.cache_resource def get_openai_client(): return OpenAI() @st.cache_resource def get_memory(): config = { "llm": {"provider": "openai", "config": {"model": model}}, "vector_store": { "provider": "supabase", "config": { "connection_string": os.environ['DATABASE_URL'], "collection_name": "memories" } } } return Memory.from_config(config)2. Supabase 认证三件套
sign_up(email, password, full_name):注册,并把full_name写入用户 metadata,成功后写入 session state 并st.rerun();sign_in(email, password):密码登录,成功后保存user对象;sign_out():登出并清理认证相关的 session state。
3. 记忆管理入口
登录后侧边栏显示用户 ID,并提供"Clear All Memories"按钮,调用memory.clear(user_id=user.id)一键清空该用户全部记忆——这展示了 Mem0 记忆管理的另一核心 APIclear。
聊天主界面使用st.chat_message渲染消息流,st.chat_input接收输入,用户 ID 直接取st.session_state.user.id作为 mem0 的user_id,从而做到记忆按账号严格隔离。
Live Agent Studio 集成:Pydantic AI Agent + FastAPI 端点
studio-integration-version演示了如何将记忆能力嵌入 Pydantic AI Agent 并部署到平台,是面向生产的关键章节。
Agent 定义(mem0_agent.py)
Agent 通过依赖注入接收记忆字符串,记忆不是硬编码进提示词,而是以依赖形式在运行时注入:
@dataclass class Mem0Deps: memories: str mem0_agent = Agent( OpenAIModel(llm), # llm 取自 LLM_MODEL,默认 gpt-4o-mini system_prompt=f'You are a helpful AI. Answer the question based on query and memories. ' f'The current date is: {datetime.now().strftime("%Y-%m-%d")}', deps_type=Mem0Deps, retries=2 ) @mem0_agent.system_prompt def add_memories(ctx: RunContext[str]) -> str: return f"\nUser Memories:\n{ctx.deps.memories}"要点:
deps_type=Mem0Deps:声明依赖类型,把检索到的记忆通过RunContext.deps.memories注入 system prompt;retries=2:模型调用失败时自动重试 2 次;- 系统提示中带当前日期,便于模型回答涉及时间的问题。
FastAPI 端点(mem0_agent_endpoint.py)
端点是平台与 Agent 之间的桥梁,其完整请求处理链路如下:
1. 请求模型与安全校验
class AgentRequest(BaseModel): query: str user_id: str request_id: str session_id: str端点使用HTTPBearer+API_BEARER_TOKEN环境变量做 Bearer Token 鉴权:verify_token在 token 未配置时返回 500,不匹配时返回 401。
2. 会话历史管理(Supabase messages 表)
fetch_conversation_history(session_id, limit=10):按session_id从messages表查询最近 10 条消息,按created_at倒序后反转,得到时间正序历史;store_message(...):把人类消息(type="human")与 AI 回复(type="ai")写入 Supabase,AI 回复可附带request_id等元数据。
3. 历史转 Pydantic AI 消息
将 Supabase 中取回的消息转换为 Pydantic AI 的ModelRequest/ModelResponse结构,作为message_history传入 Agent:
msg = ModelRequest(parts=[UserPromptPart(content=msg_content)]) if msg_type == "human" \ else ModelResponse(parts=[TextPart(content=msg_content)])4. 记忆检索与注入
relevant_memories = memory.search(query=request.query, user_id=request.user_id, limit=3) memories_str = "\n".join(f"- {entry['memory']}" for entry in relevant_memories["results"]) deps = Mem0Deps(memories=memories_str) result = await mem0_agent.run(request.query, message_history=messages, deps=deps)5. 记忆更新与错误兜底
对话结束后,把用户查询与 AI 回复组成消息对写入记忆:
memory_messages = [ {"role": "user", "content": request.query}, {"role": "assistant", "content": result.data} ] memory.add(memory_messages, user_id=request.user_id)异常时返回success=False,并向会话写入一条道歉消息与错误详情,保证平台侧始终能看到可追踪的对话记录。
容器化部署(Dockerfile)
FROM ottomator/base-python:latest ARG PORT=8001 ENV PORT=${PORT} WORKDIR /app COPY . . RUN pip install --no-cache-dir -r requirements.txt EXPOSE ${PORT} CMD ["sh", "-c", "uvicorn mem0_agent_endpoint:app --host 0.0.0.0 --port ${PORT}"]基于ottomator/base-python基础镜像,通过构建参数PORT(默认 8001)控制监听端口,启动命令用 uvicorn 拉起mem0_agent_endpoint应用。部署时需为容器注入OPENAI_API_KEY、DATABASE_URL、SUPABASE_URL、SUPABASE_SERVICE_KEY、LLM_MODEL、API_BEARER_TOKEN等环境变量。
常见问题排查(Troubleshooting)
1. 认证问题
- 检查
.env中 Supabase 凭据是否正确; - 确认 Supabase 项目已启用Email Auth(README 明确要求)。
2. 数据库连接问题
- 核对
DATABASE_URL格式是否正确; - 数据库密码中不要使用特殊字符(见
.env.example中的提示),避免连接串被错误解析。
3. 其他实践建议(由源码推导)
- 若认证成功但记忆为空,可检查
memory.add是否在每次对话后执行(v1/v2/v3 与 Studio 版均在响应后调用); - 多用户场景下务必确保每次调用
search/add/clear都传入正确的user_id,这是记忆隔离的唯一依据; - 部署到 Studio 时,务必同时配置
API_BEARER_TOKEN,否则端点会直接返回 500。
总结
mem0-agent 以四个渐进版本展示了"记忆增强型 AI 助手"的完整工程路径:先用 v1-basic-mem0.py 理解Memory.search/Memory.add的最小闭环;再通过 v2-supabase-mem0.py 接入 pgvector 实现记忆持久化;随后用 v3-streamlit-supabase-mem0.py 补齐用户认证与记忆管理界面;最后借助 studio-integration-version 把 Agent 打包为带鉴权、带消息历史、带记忆闭环的 FastAPI 服务,无缝部署到 Live Agent Studio。对于任何希望为 Agent 添加"长期记忆"能力的开发者,这条路径都值得直接复用——把其中的 OpenAI 模型替换为其他兼容提供商(requirements.txt中已内置 Anthropic、Cohere、Groq、Mistral 等驱动依赖)即可快速迁移。
【免费下载链接】ottomator-agentsAll the open source AI Agents hosted on the oTTomator Live Agent Studio platform!项目地址: https://gitcode.com/GitHub_Trending/ot/ottomator-agents
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考