ARTICLE DETAIL

资讯详情

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

用Vibeware把MCP接入MiXCopilot:给AI配一个专属记忆模块

用Vibeware把MCP接入MiXCopilot:给AI配一个专属记忆模块 1. 为什么我要给 MiXCopilot 接一个记忆模块MiXCopilot 本身已经能读工程、改代码、跑命令但它有个让我很难受的点每次新开一个会话之前聊过的项目背景、命名习惯、踩过的坑全都归零。你可能会说那就把上下文粘回去。问题是粘一次两次还行天天粘上下文窗口先不说光是把同一段背景重复解释给 AI 听就已经很消耗耐心了。MCPModel Context Protocol解决的正是这类问题。它把「模型能调用的外部能力」标准化成一个个 Server模型通过协议去调用工具、读资源。记忆模块就是其中一类 Server它对外暴露几个工具比如写入记忆、检索记忆、总结记忆底层通常就是一个 JSON 文件或者轻量数据库。MiXCopilot 适配了 MCP 协议之后你只要在设置里填一个 SSE 地址它就能连上这个记忆 Server。这篇要交付的东西很具体一个用 Python 写的 MCP 记忆服务端走 SSE 传输Vibeware 侧的接入参数MiXCopilot 里settings.json的配置片段以及启动之后怎么验证记忆到底写进去没有、读出来没有。适合已经会用 Python 起本地服务、想让 AI 拥有跨会话记忆的开发者。整套流程我在本地跑通过下面按可复制的顺序写。2. 前置准备TaoToken 与运行环境在写 Server 之前先把模型调用这条链路理清楚。MCP 记忆模块本身不产生智能它只负责存取真正做「理解你说的话、决定要不要写记忆」的是背后的模型。所以你需要一个稳定的模型接入点。我这边用的是 TaoToken官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的作用是给 MiXCopilot 和你的 Python 脚本提供统一的模型调用地址省得每个工具各配一套 Key。你需要先去控制台拿一个 API Key地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到之后先别急着填进 MiXCopilot后面配置里会用到。如果你只是想先验证模型通不通可以直接在模型对话页试一句 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 确认返回正常再往下走。Python 环境这边建议 3.10 以上。依赖主要两个mcp官方 SDK 和uvicorn如果你用 SSE 传输。装的时候直接pip install mcp[cli] uvicorn如果你打算长期跑编码类 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 遇到参数不确定的时候翻一下比猜快。3. 写一个走 SSE 的 MCP 记忆服务端记忆模块的核心逻辑不复杂一个 JSON 文件当存储几个工具函数负责增删查。真正容易踩坑的是传输层——MiXCopilot 通过 SSE 连过来所以 Server 必须以 SSE 模式启动而不是默认的 stdio。先建目录结构memory-mcp/ ├── server.py ├── memory.json └── requirements.txtmemory.json初始内容就是一个空数组[]下面是server.py的骨架。我用FastMCP来注册工具它会把函数签名自动转成 MCP 的 tool schemaimport json import os from mcp.server.fastmcp import FastMCP MEMORY_FILE os.path.join(os.path.dirname(__file__), memory.json) mcp FastMCP(memory-manager) def _load(): if not os.path.exists(MEMORY_FILE): return [] with open(MEMORY_FILE, r, encodingutf-8) as f: return json.load(f) def _save(data): with open(MEMORY_FILE, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) mcp.tool() def add_memory(content: str, tags: str ) - str: 写入一条记忆。content 是正文tags 用逗号分隔。 data _load() item {id: len(data) 1, content: content, tags: tags} data.append(item) _save(data) return f已写入记忆 #{item[id]} mcp.tool() def search_memory(keyword: str) - str: 按关键词检索记忆返回匹配条目。 data _load() hits [d for d in data if keyword in d[content] or keyword in d.get(tags, )] if not hits: return 没有找到相关记忆 return \n.join(f#{h[id]} {h[content]} for h in hits) mcp.tool() def list_memory() - str: 列出全部记忆。 data _load() return \n.join(f#{d[id]} {d[content]} for d in data) or 记忆为空 if __name__ __main__: mcp.run(transportsse)关键点有三个。第一mcp.tool()装饰的函数docstring 会变成工具描述模型靠它判断什么时候调用所以描述要写清楚。第二transportsse必须显式指定否则默认走 stdioMiXCopilot 连不上。第三存储用同步文件读写就够了记忆量不大没必要上数据库。启动命令python server.py默认会监听http://127.0.0.1:8000/sse。看到类似Uvicorn running on http://127.0.0.1:8000的输出就说明起来了。如果你想换端口在FastMCP初始化时传port参数或者用环境变量控制。4. 在 MiXCopilot 里填接入参数与 settings.jsonServer 起来之后回到 MiXCopilot。它接入 MCP 的方式是读配置文件所以你要改的是settings.json。不同版本路径略有差异一般在用户配置目录下比如 macOS 是~/Library/Application Support/MiXCopilot/settings.jsonWindows 在%APPDATA%\MiXCopilot\settings.json。在mcpServers字段里加一段{ mcpServers: { memory: { url: http://127.0.0.1:8000/sse, transport: sse, enabled: true } } }如果你之前已经配过别的 Server注意 JSON 层级别写错memory是mcpServers下的一个键。transport写sseurl指向你本地起的那个地址。改完保存重启 MiXCopilot。重启后右击 MiXCopilot 图标打开智能面板在 MCP 状态里应该能看到memory显示已连接。如果显示未连接先确认 Python 进程还活着再确认端口没被占用。这里有个容易忽略的点MiXCopilot 调模型用的 Key 和 MCP Server 是两回事。MCP 只负责工具调用模型调用走的是你在 MiXCopilot 里配的 API 地址。如果你还没配把 TaoToken 的 API 地址 https://taotoken.net/api 和前面拿的 Key 填进去。想先单独验证模型用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 试一句最快。5. 验证记忆读写是否真的生效配置完不验证等于没配。我一般分三步测。第一步写入。在 MiXCopilot 里打开一个网页文章复制一段内容然后对它说帮我把这段关于具身智能的知识点记到记忆里标签写 embodied-ai如果模型正确调用了add_memory你会看到工具调用记录返回类似「已写入记忆 #1」。这时候去打开memory.json应该能看到新条目[ { id: 1, content: 具身智能强调智能体通过与环境的物理交互来学习……, tags: embodied-ai } ]第二步检索。新开一个会话问我记忆里关于具身智能的内容是什么模型应该调用search_memory把刚才那条返回出来。这一步能过说明跨会话记忆真的生效了——因为新会话本身没有上文它只能从记忆模块拿。第三步追加和总结。用问答方式再补一条记忆比如「记住这个项目用 ruff 做 lint不用 flake8」然后再让它list_memory确认两条都在。如果三步都通过记忆模块就算接好了。实测下来最容易出问题的是模型没触发工具调用而是直接用自己的话回答。这通常是工具描述不够明确或者模型没被正确引导。可以在系统提示里加一句「涉及记忆的读写必须调用 memory 相关工具」。6. 本篇常见错误排查连接失败面板显示未连接。先看 Python 进程有没有报错退出。常见原因是端口被占换个端口重启同时改settings.json里的url。另一个原因是transport没写sse或者写成了stdio。工具调用报 JSON 解析错误。多半是memory.json被手动改坏了比如多了个逗号。把文件内容重置成[]再试。写入时我用ensure_asciiFalse中文能正常存如果你看到乱码检查文件编码是不是 UTF-8。模型不调用工具直接回答。检查mcp.tool()函数的 docstring 是否清晰。描述里最好写清楚「什么时候用」而不只是「是什么」。另外确认 MiXCopilot 的 MCP 开关是打开的。写入成功但检索不到。确认检索关键词和写入内容有重叠。search_memory是简单子串匹配不是语义检索。如果你要语义检索得在 Server 里接一个向量库那是另一个话题了。重启后记忆丢失。检查MEMORY_FILE的路径。我用的是os.path.dirname(__file__)如果你用相对路径启动工作目录变了就会写到别处。建议用绝对路径。API Key 相关报错。如果你在 MiXCopilot 里看到 401 或鉴权失败去 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 确认 Key 还有效别把 MCP 的连接问题和模型鉴权问题混在一起排查。7. 把记忆模块用起来接入与长期方案记忆模块接好之后用法可以很灵活。我自己的习惯是项目启动时让它list_memory把相关约定拉出来写代码过程中遇到「这个坑别再踩」就让它add_memory每周让它总结一次。这样 AI 不再是每次从零开始而是带着你的项目上下文在工作。如果你只是想让模型先跑通用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 验证最快。如果你要把这套记忆接进日常编码流程长期跑 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 比在群里问快。最后说一个我踩过的坑别把记忆文件提交到 Git。它里面会有你的项目细节、临时想法甚至一些不该进版本库的内容。在.gitignore里加一行memory.json省心。
返回列表