基于 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 助手赋予记忆能力技术栈为Mem0mem0ai0.1.65负责记忆的抽取、存储与检索OpenAI负责基于查询 记忆生成回复Supabasesupabase2.13.0提供用户认证与 pgvector 向量存储Streamlitstreamlit1.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.pyWeb 界面 Supabase 认证用户 ID 即 mem0 user_idLive 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.11OpenAI API KeySupabase 账号与项目第一步创建并激活虚拟环境# 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_KEYOpenAI API KeyMODEL_CHOICE使用的 OpenAI 模型默认gpt-4o-miniDATABASE_URLSupabase PostgreSQL 连接串SUPABASE_URLSupabase 项目 URLSUPABASE_KEYSupabase 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 AuthREADME 故障排查一节明确要求否则注册登录会失败。工作原理记忆增强的四步流水线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. 检索相关记忆limit3 relevant_memories memory.search(querymessage, user_iduser_id, limit3) memories_str \n.join(f- {entry[memory]} for entry in relevant_memories[results]) # 2. 将记忆注入 system prompt system_prompt fYou 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(modelgpt-4o-mini, messagesmessages) assistant_response response.choices[0].message.content # 3. 追加 assistant 回复后将整段对话沉淀为新记忆 messages.append({role: assistant, content: assistant_response}) memory.add(messages, user_iduser_id) return assistant_response三个关键调用值得展开memory.search(query, user_id, limit3)语义检索接口按用户隔离记忆、限制返回条数memory.add(messages, user_id)接受 OpenAI 风格的对话消息列表role/content自动从中抽取并存储记忆user_id用于实现多用户隔离user_id设计v1/v2 中默认default_userv3 中改为登录用户的user.idStudio 版本则透传请求中的user_id——这是记忆按用户隔离的关键。从内存版到持久化版两版配置对比v1纯内存存储v1-basic-mem0.py 只配置 LLM未声明vector_storeMem0 会退化为进程内存储重启即失忆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-minivector_store.provider: supabase指定向量库后端Mem0 通过 pgvector 进行向量存取collection_name: memoriesSupabase 中存储记忆的集合表名。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_iduser.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.pyAgent 通过依赖注入接收记忆字符串记忆不是硬编码进提示词而是以依赖形式在运行时注入dataclass class Mem0Deps: memories: str mem0_agent Agent( OpenAIModel(llm), # llm 取自 LLM_MODEL默认 gpt-4o-mini system_promptfYou are a helpful AI. Answer the question based on query and memories. fThe current date is: {datetime.now().strftime(%Y-%m-%d)}, deps_typeMem0Deps, retries2 ) mem0_agent.system_prompt def add_memories(ctx: RunContext[str]) - str: return f\nUser Memories:\n{ctx.deps.memories}要点deps_typeMem0Deps声明依赖类型把检索到的记忆通过RunContext.deps.memories注入 system promptretries2模型调用失败时自动重试 2 次系统提示中带当前日期便于模型回答涉及时间的问题。FastAPI 端点mem0_agent_endpoint.py端点是平台与 Agent 之间的桥梁其完整请求处理链路如下1. 请求模型与安全校验class AgentRequest(BaseModel): query: str user_id: str request_id: str session_id: str端点使用HTTPBearerAPI_BEARER_TOKEN环境变量做 Bearer Token 鉴权verify_token在 token 未配置时返回 500不匹配时返回 401。2. 会话历史管理Supabase messages 表fetch_conversation_history(session_id, limit10)按session_id从messages表查询最近 10 条消息按created_at倒序后反转得到时间正序历史store_message(...)把人类消息typehuman与 AI 回复typeai写入 SupabaseAI 回复可附带request_id等元数据。3. 历史转 Pydantic AI 消息将 Supabase 中取回的消息转换为 Pydantic AI 的ModelRequest/ModelResponse结构作为message_history传入 Agentmsg ModelRequest(parts[UserPromptPart(contentmsg_content)]) if msg_type human \ else ModelResponse(parts[TextPart(contentmsg_content)])4. 记忆检索与注入relevant_memories memory.search(queryrequest.query, user_idrequest.user_id, limit3) memories_str \n.join(f- {entry[memory]} for entry in relevant_memories[results]) deps Mem0Deps(memoriesmemories_str) result await mem0_agent.run(request.query, message_historymessages, depsdeps)5. 记忆更新与错误兜底对话结束后把用户查询与 AI 回复组成消息对写入记忆memory_messages [ {role: user, content: request.query}, {role: assistant, content: result.data} ] memory.add(memory_messages, user_idrequest.user_id)异常时返回successFalse并向会话写入一条道歉消息与错误详情保证平台侧始终能看到可追踪的对话记录。容器化部署DockerfileFROM ottomator/base-python:latest ARG PORT8001 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等环境变量。常见问题排查Troubleshooting1. 认证问题检查.env中 Supabase 凭据是否正确确认 Supabase 项目已启用Email AuthREADME 明确要求。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),仅供参考