ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

智能体长期记忆部署实战:MemMachine + TaoToken 配置与验证指南

智能体长期记忆部署实战:MemMachine + TaoToken 配置与验证指南 1. 智能体长期记忆为什么总在“重启后失忆”做智能体开发的朋友大概率都遇到过这个场景昨天刚跟 Agent 聊完“我对海鲜过敏”今天再问它推荐餐厅它照样给你推生蚝。这不是模型笨而是大语言模型本身没有跨会话记忆所有上下文都活在当前窗口里窗口一关、Token 一超记忆就归零。普通 RAG 能缓解一部分问题但它更像“查字典”——你问什么它去检索什么检索不到就装傻而且它不理解“因为你昨天感冒了所以今天想喝热水”这种时间线和因果关系。真正要落地长期记忆需要的是分层记忆结构一层记“人设档案”你是谁、你的偏好、你的禁忌一层记“剧情时间线”发生过什么、前后因果。MemMachine 就是按这个思路设计的持久化记忆层官方定位是 AI Agent 的 Persistent Memory Layer。这篇要解决的问题很具体把 MemMachine 跑起来通过 MCP 协议接进 Claude Code再用 TaoToken 统一管理模型 Key 和 API 通道让 settings.json 和 config.toml 的骨架配置一次成型。适合正在做客服机器人、代码助手、陪伴类 Agent且被“金鱼记忆”折磨过的开发者。下面所有配置片段都可以直接复制我会把每一步的验证动作也写清楚避免你卡在“看起来配好了但没生效”的状态。2. TaoToken 前置统一 Key 与 API 通道MemMachine 本身要调用 LLM 做记忆抽取和 embeddingClaude Code 也要调用模型。如果每个组件各配一把 Key、各写一个 base_url后期换模型或加组件时会非常痛苦。我的做法是用 TaoToken 作为统一入口把模型调用收敛到一个 Key 和一条 API 通道上。TaoToken 在这里扮演的是“模型网关”角色你拿到一把 Key配置一个 base_urlMemMachine 的 config.toml、Claude Code 的 settings.json 都指向它。这样做的直接好处是后面想把记忆抽取模型从 A 换成 B只改一处配置不用满项目找 Key。先拿 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 列表页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。API 基础地址统一用 https://taotoken.net/api 注意这个地址不带任何查询参数。提示Key 只在创建时完整显示一次复制后先存到本地密码管理器别直接贴进会提交到 Git 的配置文件里。生产环境建议用环境变量注入。拿到 Key 之后先别急着配 MemMachine用一条 curl 确认通道是通的避免后面把网络问题误判成配置问题curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ | head -c 500能返回模型列表 JSON说明 Key 和通道都正常。这一步花三十秒能省掉后面半小时的排查。3. 可复制配置MemMachine 的 config.toml 骨架MemMachine 的记忆能力依赖两个模型一个负责把对话抽取成结构化记忆LLM一个负责把记忆向量化embedding。这两个都走 TaoToken。下面是我实测可用的 config.toml 骨架字段按官方结构组织你只需要替换 Key。# config.toml - MemMachine 记忆层配置骨架 [llm] provider openai-compatible base_url https://taotoken.net/api/v1 api_key ${TAOTOKEN_API_KEY} model claude-3-5-sonnet max_tokens 2048 temperature 0.2 [embedding] provider openai-compatible base_url https://taotoken.net/api/v1 api_key ${TAOTOKEN_API_KEY} model text-embedding-3-small dimensions 1536 [memory] # 情景记忆记录时间线与因果 episodic_enabled true episodic_window 50 # 档案记忆记录稳定偏好与身份 profile_enabled true profile_merge_strategy latest_wins [storage] backend sqlite path ./data/memmachine.db [server] host 0.0.0.0 port 8080几个参数值得说明。temperature 0.2是故意的记忆抽取要的是稳定和可复现不需要创造力。profile_merge_strategy latest_wins解决的是“用户改口”问题——用户先说喜欢海鲜、后来说过敏档案记忆以最新一次为准而不是两条冲突记录并存。episodic_window 50控制情景记忆回溯的轮数太小会丢上下文太大检索会变慢50 是个平衡点。存储先用 sqlite 起步单机验证足够。等你要上多实例或者数据量上来再换 Postgres配置结构不用大改只换backend和连接串。4. Claude Code 侧settings.json 与 MCP 接入MemMachine 跑起来后要让 Claude Code 能用上它走 MCP 协议。Claude Code 的外部工具、记忆层都通过 MCP 接入这是关键一步也是最多人卡住的地方。先确认 Claude Code 装好了claude --version然后在项目根目录创建.mcp.json把 MemMachine 注册成一个 MCP server{ mcpServers: { memmachine: { command: docker, args: [ exec, -i, memmachine-app, /app/.venv/bin/memmachine-mcp-stdio ], env: { MEMORY_CONFIG: /app/configuration.yml, MM_USER_ID: your-user-id, PYTHONUNBUFFERED: 1 } } } }MM_USER_ID是记忆隔离的关键。同一个 MemMachine 实例可以服务多个用户靠这个 ID 区分档案。测试阶段随便填生产环境要跟你的用户体系对上。Claude Code 自身的 settings.json 里把模型通道也指向 TaoToken这样对话模型和记忆模型走同一条通道{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: ${TAOTOKEN_API_KEY} }, mcpServers: { memmachine: { command: docker, args: [exec, -i, memmachine-app, /app/.venv/bin/memmachine-mcp-stdio] } } }注意settings.json 里的 Key 用环境变量引用别写死。如果你在 CI 或多人协作环境写死等于把 Key 公开了。配置完启动 Claude Code输入/mcp能看到 memmachine 出现在已连接列表里就说明 MCP 通道打通了。5. 验证请求写入记忆并跨会话读取配置对不对不看你配了多少行看记忆能不能跨会话取出来。这一步做两个动作写入、重启、读取。先写入一段带偏好和禁忌的记忆文本直接发给 Claude Code请记住我的饮食习惯我喜欢吃辣尤其是川菜和湘菜。 我不吃香菜也不喜欢海鲜特别是贝类。 我通常早上7点吃早餐中午12点半午餐晚上7点晚餐。 我在控制碳水摄入尽量不吃白米饭和面条。 我的目标是增肌每天至少摄入120克蛋白质。发完之后完全关掉当前终端会话重新开一个再启动 Claude Code。这一步是故意的——如果记忆只活在当前进程里重启就会丢那它就不是长期记忆。新会话里问我一天的用餐时间是怎么安排的如果 MemMachine 正常工作Claude 应该能答出“早上7点、中午12点半、晚上7点”而不是说“我不知道”。再问一个跨维度的根据我的饮食偏好帮我推荐一道晚餐。理想回答会避开香菜和贝类同时体现控碳水和增肌的约束。这两个问题能同时验证情景记忆时间线和档案记忆偏好禁忌是否都生效。想更直接地看记忆层状态可以调 MemMachine 的健康检查接口curl -s http://localhost:8080/health返回{status: healthy}说明服务在跑。但注意健康检查只证明服务活着不证明记忆写进去了所以跨会话读取那一步不能省。6. 本篇常见错排查MCP 连不上/mcp里看不到 memmachine。先确认容器名对得上。.mcp.json里写的是memmachine-app用docker ps看实际容器名是不是这个。容器名不对docker exec直接失败MCP 自然连不上。记忆写进去了但读不出来。九成是MM_USER_ID不一致。写入时用一个 ID读取时换了另一个 ID记忆是隔离的当然读不到。检查.mcp.json和 settings.json 里的MM_USER_ID是否一致。embedding 报维度不匹配。config.toml 里dimensions 1536要和你实际用的 embedding 模型输出维度对上。换模型时这个值必须同步改否则写入时报错或者检索结果乱掉。改了 config.toml 不生效。MemMachine 读的是容器内的/app/configuration.yml你改宿主机文件后要重启容器配置才会重新加载。改完跑一次docker compose down docker compose up -d。Key 明明对但一直 401。检查 base_url 是不是写成了带路径的形式。TaoToken 的 API 基础地址是https://taotoken.net/apiOpenAI 兼容接口在/api/v1下。config.toml 里我写的是https://taotoken.net/api/v1如果你只写到/api请求路径会拼错。情景记忆检索慢。episodic_window调太大每次检索回溯的轮数过多。先降到 30 试试确认是窗口问题再逐步往上加。7. 下一步把记忆通道固化下来到这一步你已经有了一个能跨会话记住用户偏好的智能体。但要让它在真实项目里稳定跑还有两件事值得做。一是把 Key 和配置从代码里彻底剥离。config.toml 和 settings.json 里所有敏感值都用环境变量引用本地用.env线上用密钥管理服务。这样换 Key、换模型通道时改一处就够。二是把模型通道固定成长期方案。如果你打算持续做编码类 Agent 或者多轮任务型智能体建议直接上 Coding Plan把模型调用和额度管理一起收敛掉地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入细节和参数说明在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到 MCP 或 Key 相关问题先翻接入文档https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 可以重新生成或轮换 Key。想先验证模型对话效果用模型对话页快速试一轮https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat 。记忆这件事配一次能省后面无数次“它怎么又忘了”的调试。把配置固化下来比每次手动补上下文划算得多。
返回列表