1. 飞书群里跑一个 AI 办公机器人,到底卡在哪
先说清楚 memU bot 是什么、能做什么、适合谁。memU bot 是一款基于 memU 记忆框架的桌面端 AI 助手,主打本地优先架构:会话数据、记忆图谱默认落在本机,网络请求主要发生在模型推理阶段。它原生适配飞书生态,支持 Skills 扩展和 MCP 工具调用,你可以把它理解成「一个能挂工具、能记事的飞书群成员」。适合两类人:一类是对数据出域敏感、希望核心资料尽量留在本地的团队;另一类是预算有限、想先用本地 ollama 模型把流程跑通,再按需切换云端 API 的个人开发者。
但真动手时,卡点往往不在「装软件」这一步,而在三件事上:飞书自建应用的权限和事件订阅没配全,机器人收不到消息;本地 ollama 的模型名、API 地址填错,模型调用直接失败;MCP 工具挂上了但机器人「看不见」,图表和地图类工具调不起来。这篇就按「消息触发 → 模型推理 → 工具调用 → 图表返回」这条链路,把每一步的可复制配置写清楚,中间穿插我实际踩过的报错和排查思路。
整条链路里,模型调用这一环最容易反复折腾:本地 ollama 适合验证,但小模型在工具调用和多轮推理上容易「犯迷糊」;云端模型稳定,但每个供应商的 Key、Base URL、模型 ID 格式都不一样。我的做法是用 TaoToken 做统一通道,把不同模型的接入收敛成一套 Base URL + Key + Model ID 的组合,本地和云端切换时只改这几个字段,飞书侧和 MCP 侧完全不用动。下面从飞书应用创建开始,一步步来。
2. 前置准备:飞书应用、ollama 与 TaoToken 统一 Key
这一节把三样东西备齐:飞书自建应用、本地 ollama、以及 TaoToken 的 API Key。顺序建议先装环境再建应用,因为 memU bot 安装时会检测 Node.js 和 ollama 是否存在。
先装基础环境。Node.js 建议 18 LTS 以上,装完顺手确认 npm 可用;ollama 去官网下对应系统版本,装完拉一个模型,比如ollama pull qwen2.5:7b,记住这个模型名,后面配置要用。命令行验证一下:
node -v npm -v ollama listollama list能列出你本地已有的模型,Name 那一列就是待会要填进 memU bot 的模型名称。
接着建飞书应用。打开https://open.feishu.cn/app,登录后创建企业自建应用,填应用名称和描述。进入「凭证与基础信息」,复制 App ID 和 App Secret,这两个后面在 memU bot 的平台配置里要用。然后去「应用能力」里给机器人点「添加」,再到「权限管理」开通权限。这一步是重灾区,权限少一个都可能导致功能异常,需要开通的 7 个权限是:管理应用自身资源、获取通讯录基本信息、通过手机号或邮箱获取用户 ID、获取群组信息、获取与发送单聊群组消息、读取用户发给机器人的单聊消息、以应用的身份发消息。开通后创建版本并发布,个人使用不建议勾「对外共享」,否则要走管理员审核。
最后准备 TaoToken 的 Key。访问https://taotoken.net/api-keys创建 API Key,这个 Key 就是统一通道的凭证。TaoToken 在这里的角色是「模型调用的统一入口」:不管你后面用云端模型还是想对比不同模型效果,Base URL 都填https://taotoken.net/api,Key 填刚创建的,Model ID 按你选的模型填。这样飞书机器人和 MCP 工具那边不需要感知底层换了哪个模型。
提示:本地 ollama 和 TaoToken 云端通道可以并存。日常验证用 ollama 省钱,需要更强工具调用能力时切到 TaoToken 通道,切换只改 memU bot 里的 LLM 供应商配置。
3. 可复制配置:memU bot 接入 ollama 与 MCP 注册参数
这一节给可直接抄的配置片段。先装 memU bot,去https://memu.bot/#quickstart按系统选版本下载安装。装完打开设置,进「平台」,下拉找到飞书,把前面复制的 App ID 和 App Secret 填进去,点保存。然后回飞书后台,在「事件与回调」里把订阅方式改成「长连接」并保存,再添加四个事件:用户进入与机器人的会话、解散群、机器人进群、接收消息。这四个事件决定了机器人能不能感知群里的消息和成员变动。
激活机器人需要安全码。在 memU bot 设置里进「安全」,点生成安全码;回飞书打开应用,如果没对话框就先创建版本发布一次,出现聊天框后发送/bind 你的安全码,看到激活成功即可。
接下来是模型配置,这是核心。进 memU bot 设置 →「通用」,LLM 供应商选 Custom Provider(对应本地 ollama),填写如下:
{ "provider": "custom", "base_url": "http://127.0.0.1:11434/v1", "api_key": "ollama", "model_id": "qwen2.5:7b" }base_url是 ollama 默认的 OpenAI 兼容端点,api_key填ollama占位即可,model_id必须和ollama list里的 Name 完全一致。如果你要切到 TaoToken 统一通道,把这段改成:
{ "provider": "custom", "base_url": "https://taotoken.net/api", "api_key": "你在 TaoToken 创建的 Key", "model_id": "你选用的模型 ID" }Base URL、Key、Model ID 这三件套在 memU bot、Cline、Codex 这类工具里是通用的,记住这个组合,换工具时照填就行。
再配 MCP。可视化图表用 antvis 的 mcp-server-chart,在 memU bot 里点「添加 MCP 服务器」,填 stdio 类型的配置:
{ "mcpServers": { "mcp-server-chart": { "command": "npx", "args": ["-y", "@antvis/mcp-server-chart"] } } }高德地图 MCP 同理,去 ModelScope 的@amap/amap-maps页面拿配置,把密钥填进去:
{ "mcpServers": { "amap-maps": { "command": "npx", "args": ["-y", "@amap/amap-maps-mcp-server"], "env": { "AMAP_MAPS_API_KEY": "你的高德 Key" } } } }添加后等一会,界面会显示识别到的工具数量,出现数量就说明 MCP 注册成功。如果一直显示 0,先别急着怀疑配置,往下看排错那节。
4. 验证请求:从群消息触发到图表返回
配置完必须验证,不然你不知道是模型没通还是工具没挂上。分三步验证。
第一步,验证模型通道。在飞书群里 @ 机器人发一句简单的话,比如「你好,介绍一下你自己」。如果本地 ollama 在跑,终端能看到推理日志;如果走 TaoToken 通道,回复会明显更快。这一步只验证「消息 → 模型 → 回复」链路,不涉及工具。
第二步,验证 MCP 工具是否被识别。发一句「用图表展示 1 到 6 月的销售额趋势,数据你自己编一组」。如果图表 MCP 挂载成功,机器人会调用mcp-server-chart生成一张图并返回。这一步能跑通,说明「消息 → 模型 → 工具调用 → 图表返回」整条链路是通的。
第三步,验证联网和浏览器类工具。让机器人「查一下近期热门商品,生成可视化图表」。实测下来,模型默认会用有头模式打开 Chrome,你能看到浏览器窗口弹出、页面滚动、信息被抓取,最后回到飞书输出图表。这个过程里机器人完成了飞书互动、浏览器启动、联网搜索、图像生成四件事,基本达成目标。
验证时有个细节要注意:如果模型较小,回复可能像「思考过程」而不是结论,这通常是 memU bot 内置模板和模型能力共同导致的。换更强的模型,或者在 Skills 里加 OCR 类工具处理图片信息,效果会明显改善。我试过让机器人核实一条商品信息,结果它被文字顺序误导、没读图,产生了部分错误——这不是链路问题,是模型对多模态信息的处理能力问题,换模型或补 OCR 工具即可。
5. 常见报错排查:401、local proxy failed、工具不可见
这一节对照真实报错给排查路径。
401 Unauthorized:出现在模型调用阶段。先检查 API Key 是否复制完整、有没有多余空格;走 TaoToken 通道时确认 Base URL 是https://taotoken.net/api,不要带多余路径;走 ollama 时确认api_key填的是ollama而不是空。如果 Key 刚创建,等几秒再试。
local proxy failed / 连接被拒绝:多半是 ollama 没启动,或者base_url端口不对。终端跑ollama list确认服务在跑,再确认端口是 11434。如果 memU bot 和 ollama 不在同一台机器,127.0.0.1要换成实际地址。
reading choices 报错:通常是模型返回格式和客户端预期不一致,常见于模型 ID 填错或用了不兼容的模型。核对model_id和ollama list是否一致,或换一个支持工具调用的模型。
OAuth / 授权类报错:飞书侧权限没开全或事件没订阅。回飞书后台核对那 7 个权限是否都开通、四个事件是否都添加、订阅方式是否为长连接。权限和事件是两套东西,缺一不可。
MCP 工具数量显示 0 / 机器人找不到工具:先在终端单独测 MCP 命令本身,比如npx @amap/amap-maps-mcp-server -y,确认命令能跑起来、不是包本身的问题。如果命令正常但 memU bot 里看不到工具,重启 memU bot 再试;仍不行就检查env里的密钥字段名是否和文档一致。内置浏览器 MCP 缺失浏览器的情况,通常是本机没装 Chrome 或路径没被识别,装一个标准版 Chrome 即可。
机器人收不到群消息:检查「接收消息」事件是否添加、机器人是否已进群、群是否被解散过。飞书群机器人需要被拉进群才能收到群消息,单聊则要用户先进入会话。
6. 把链路固化下来:统一通道 + 按需换模型
跑通一次不算完,能稳定复用才算。我的做法是把配置固化成两层:飞书侧和 MCP 侧一次配好基本不动,模型侧通过 TaoToken 统一通道随时切换。这样本地 ollama 用来做日常验证和隐私敏感场景,需要更强推理和工具调用时切到云端模型,只改 Base URL、Key、Model ID 三个字段。
如果你打算长期在飞书里跑编码类或 Agent 类任务,可以看下 Coding Plan(https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite),它更适合高频调用场景。想先对比不同模型在图表生成、工具调用上的表现,直接去模型对话页(https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite)试几句,确认效果再写进 memU bot 配置。接入细节和参数说明在文档里(https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite),Key 在 API Keys 页管理(https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite)。
最后给个实用技巧:MCP 工具不要一次挂太多,先挂一个图表工具验证链路,通了再加地图、浏览器类工具,出问题时更容易定位是哪个环节。模型 ID 和 Base URL 建议单独记一个配置文件,换机器或重装时直接抄,省得重新翻文档。