1. 从零搭建飞书写作助手:OpenClaw 智能体配置踩坑实录
飞书写作助手智能体,说白了就是让一个跑在你本机(或服务器)上的 OpenClaw Agent,通过飞书机器人接收你的写作需求,自动完成调研、写稿、润色,最后把成稿写回飞书文档。它适合两类人:一是每天要产出大量技术文章、行业简报的内容创作者,二是想把写作流程自动化、又不想把数据交给第三方 SaaS 的团队。
我试过用纯云端方案做类似的事,最大的问题是模型 Key 散落在各个平台,切换模型要改一堆配置,而且写作过程中调用搜索、调用文档 API 的权限管理很麻烦。OpenClaw 的思路不一样——它把 Agent 的人设、记忆、技能、工具权限全部落在本地文件里,每个 Agent 有独立 Workspace,互不干扰。飞书只作为交互入口和交付出口,真正的推理和文件操作都在你自己的环境里完成。
这一篇是系列第二集,聚焦完整配置流程:飞书机器人怎么建、事件订阅怎么配、OpenClaw 的 config 怎么写、TaoToken 统一 API 通道怎么接进去解决多模型 Key 管理问题。第一集讲的是 OpenClaw 基础安装和人设文件体系,没看过的可以先补一下,但本篇的配置步骤是自包含的,照着做能跑通。
核心检索词先明确:OpenClaw 智能体接入飞书写作助手,本质是「飞书事件回调 → OpenClaw Gateway → 模型推理 → 写回飞书文档」这条链路。你要准备的东西不多:一台能跑 OpenClaw 的机器(Windows WSL 或 Linux 都行)、一个飞书企业自建应用、一个 TaoToken 的 API Key。下面按顺序来。
2. TaoToken 前置准备:统一 API 通道解决多模型 Key 管理
OpenClaw 支持多种模型后端,Ollama 本地模型、OpenAI 兼容接口、Anthropic 接口都能接。但写作助手这个场景有个现实问题:不同任务适合不同模型。写技术深度稿可能需要推理强的模型,做去 AI 味润色可能需要文风好的模型,跑行业简报又可能需要联网搜索能力强的。如果每个模型都单独配一个 Key,配置文件会变得很难维护,切换模型还要改代码。
TaoToken 在这里的角色是统一 API 通道。你只需要一个 Key、一个 Base URL,就能在 OpenClaw 里切换不同模型,不用为每个模型单独申请和管理凭据。对写作助手来说,这意味着你可以在 config 里把模型 ID 做成变量,根据任务类型动态选择,而 Key 始终只有一份。
先拿 Key。访问 TaoToken 控制台创建 API Key:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console创建后你会得到一串以sk-开头的 Key,复制保存好,后面配置要用。注意不要在聊天记录、代码提交里明文粘贴这个 Key,OpenClaw 的 SOUL.md 安全护栏里明确写了敏感凭据不能外泄,配置时用环境变量或本地配置文件引用。
Base URL 用这个,注意 API 地址不带 UTM 参数:
https://taotoken.net/api模型 ID 怎么填?TaoToken 的模型列表在文档里有,常用的写作类模型 ID 形如claude-sonnet-4-20250514、gpt-4o这类。你可以在模型对话页面先测试一下哪个模型写出来的东西最符合你的风格:
https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat如果你打算长期跑写作 Agent,每天都要调用,建议看一下 Coding Plan 的额度方案,比按量计费稳定:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan接入文档在这里,配置过程中遇到参数问题可以对照查:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc拿到 Key 和 Base URL 之后,先别急着配 OpenClaw,用 curl 验证一下通道是通的:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "用一句话介绍你自己"}], "max_tokens": 100 }'返回里有choices[0].message.content就说明通道正常。如果返回 401,检查 Key 有没有复制完整;如果返回 model not found,检查模型 ID 拼写。这一步过了再往下走,能省很多排查时间。
3. 可复制配置:飞书应用权限清单与 OpenClaw config.toml 骨架
这一节是全文最核心的部分,配置错了后面全跑不通。分三块:飞书应用创建与权限、OpenClaw 的 config 文件、以及人设文件的挂载方式。
3.1 飞书自建应用创建与权限清单
登录飞书开放平台,创建企业自建应用。创建完成后,进入「权限管理」,开通以下权限。这些权限是写作助手场景的最小必要集,多开了反而增加安全风险:
| 权限代码 | 权限名称 | 用途 |
|---|---|---|
im:message | 获取与发送单聊、群组消息 | 接收用户写作指令、回复进度 |
im:message:send_as_bot | 以应用身份发消息 | 机器人主动推送成稿通知 |
docx:document | 创建及编辑新版文档 | 把成稿写入飞书文档 |
drive:drive | 查看、编辑、管理云空间文件 | 定位目标文件夹 |
contact:user.base:readonly | 获取用户基本信息 | 识别指令发送者身份 |
开通后,在「事件订阅」里配置请求地址。这里填你 OpenClaw Gateway 暴露出来的回调 URL,格式是:
https://你的域名或IP:端口/feishu/event如果你是本机跑,没有公网域名,可以用内网穿透工具把本地端口映射出去。注意事件订阅需要飞书能回调到你的地址,所以本地开发时这一步必须做。
事件订阅里要订阅的事件类型勾选im.message.receive_v1,这是接收用户消息的核心事件。加密方式建议选「明文模式」先跑通,稳定后再换加密。
3.2 OpenClaw config.toml 配置骨架
OpenClaw 的配置文件默认在~/.openclaw/openclaw.json,但为了可读性和版本管理,建议用 TOML 格式的config.toml放在项目目录,通过openclaw config --file加载。下面是写作助手场景的完整骨架:
[gateway] mode = "local" port = 18789 bind = "loopback" [model] # TaoToken 统一 API 通道 provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" default_model = "claude-sonnet-4-20250514" # 按任务类型切换模型 [model.routing] writing = "claude-sonnet-4-20250514" polish = "gpt-4o" research = "claude-sonnet-4-20250514" [workspace] # 写作助手独立工作区 path = "~/.openclaw/workspace-writer" soul = "SOUL.md" identity = "IDENTITY.md" user = "USER.md" memory = "MEMORY.md" agents = "AGENTS.md" [feishu] app_id = "${FEISHU_APP_ID}" app_secret = "${FEISHU_APP_SECRET}" verification_token = "${FEISHU_VERIFICATION_TOKEN}" event_path = "/feishu/event" encrypt_key = "" [feishu.permissions] allow_doc_write = true allow_message_send = true allowed_users = ["ou_你的用户ID"] [skills] enabled = ["duckduckgo-search", "de-ai-tone", "feishu-doc-writer"]几个关键点说明。api_key用环境变量引用,不要明文写。model.routing是 OpenClaw 支持的任务路由,写作任务走一个模型,润色走另一个,调研走第三个,这样你可以在不换 Key 的情况下按需切换。allowed_users限制只有你自己能触发机器人,避免群聊里被误触发。
环境变量在启动 Gateway 前设置:
export TAOTOKEN_API_KEY="sk-你的Key" export FEISHU_APP_ID="cli_你的AppID" export FEISHU_APP_SECRET="你的AppSecret" export FEISHU_VERIFICATION_TOKEN="你的VerificationToken"3.3 人设文件挂载
写作助手的 Workspace 目录结构如下,每个文件的作用在系列第一集讲过,这里只强调写作场景的定制点:
~/.openclaw/workspace-writer/ ├── SOUL.md # 写作助手灵魂:15年经验内容创作者人设 ├── IDENTITY.md # 名字、角色 ├── USER.md # 你的写作偏好、发布平台 ├── AGENTS.md # 工作流程、搜索规则、红线 ├── MEMORY.md # 长期记忆:稳定偏好、常用术语 ├── memory/ │ └── 2026-04-04.md └── skills/ ├── duckduckgo-search/ │ └── SKILL.md ├── de-ai-tone/ │ └── SKILL.md └── feishu-doc-writer/ └── SKILL.mdSOUL.md 里要写清楚写作哲学和工作流,比如「读者优先、结构先行、细节为王、迭代优化」这四条,以及「初稿后至少一轮自审润色再交付」的硬性要求。USER.md 里写你的标题偏好(数字型标题)、段落风格(短段落每段一个要点)、发布平台(飞书文档、公众号、知乎)。AGENTS.md 里写搜索规则:时效性信息必须搜索、具体数据必须搜索、第三方产品功能必须查官方文档。
de-ai-tone 技能是写作助手的核心差异化能力,它的 SKILL.md 里定义了 AI 味词汇黑名单和改写规则。触发条件是用户说「去 AI 味」「改得像人写的」「去掉机器感」。改写原则是「你不是在美化文章,你是在还原它」,目标是让文章读起来像一个有经验的人坐下来认真写出来的。
4. 验证请求:从飞书发指令到成稿写入文档的完整链路
配置写完了,现在验证整条链路能不能跑通。分四步:启动 Gateway、飞书发消息、观察日志、检查文档。
4.1 启动 Gateway 并确认模型通道
openclaw gateway restart启动后看日志,确认三件事:Gateway 监听在 18789 端口、飞书事件订阅地址已注册、模型通道连通。日志里应该出现类似:
Gateway listening on ws://127.0.0.1:18789 Feishu event handler registered at /feishu/event Model provider: openai-compatible @ https://taotoken.net/api Default model: claude-sonnet-4-20250514如果模型通道报错,先用第 2 节的 curl 命令单独测通道,排除是 OpenClaw 配置问题还是通道本身问题。
4.2 飞书发指令测试
在飞书里找到你的机器人,发一条测试消息:
写一篇关于网络信息安全攻击的深度科普文章,3000-4000字,目标读者是对AI感兴趣但没有技术背景的产品经理和创业者,发飞书文档。机器人应该先回复一条确认消息,然后开始工作。你会在飞书里看到进度更新:需求澄清 → 素材调研 → 大纲拟定 → 初稿撰写 → 自我审阅 → 格式优化 → 交付成稿。
4.3 观察 OpenClaw 日志
在 Gateway 终端里观察日志,正常流程会依次出现:
[feishu] received message from ou_xxx: 写一篇关于网络信息安全攻击... [agent] task routed to model: claude-sonnet-4-20250514 [skill] duckduckgo-search triggered: 网络信息安全攻击 最新案例 [skill] de-ai-tone triggered: 初稿润色 [feishu] document created: https://xxx.feishu.cn/docx/xxx [feishu] message sent to ou_xxx: 成稿已写入文档如果卡在某一步,日志会给出具体错误。常见的是搜索技能没触发、文档权限不足、模型返回超时。
4.4 检查飞书文档
打开机器人发来的文档链接,确认内容完整、格式正确、没有明显的 AI 味。如果文档是空的或者只有标题,检查docx:document权限和drive:drive权限是否开通,以及allowed_users里有没有你的用户 ID。
验证通过后,你可以测试更复杂的场景,比如带数据调用的写作任务:
请先用 DuckDuckGo skills 调用 https://api.gold-api.com/price/XAU 获取黄金价格,再用同样方式调用 https://api.gold-api.com/price/XAG 获取银价,写一份黄金白银价格分析的日报,1000-2000字,发飞书文档。这个任务会触发搜索技能、数据提取、写作、去 AI 味、文档写入五个环节,能全面验证链路稳定性。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
配置过程中最容易卡在几个报错上,这一节按报错信息对照排查。
5.1 401 Unauthorized
Error: 401 Unauthorized {"error": {"message": "Invalid API key", "type": "invalid_request_error"}}原因:TaoToken 的 API Key 没配、配错、或者环境变量没生效。排查步骤:先确认echo $TAOTOKEN_API_KEY有输出,再确认 config.toml 里api_key = "${TAOTOKEN_API_KEY}"的变量名拼写一致。如果环境变量在 Gateway 启动后才设置,需要重启 Gateway 让配置重新加载。还有一种情况是 Key 复制时带了空格或换行,用cat -A检查一下。
5.2 local proxy failed
Error: local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused原因:系统里配置了本地代理,但代理服务没启动。OpenClaw 的 HTTP 客户端会读取系统代理设置。排查:检查HTTP_PROXY和HTTPS_PROXY环境变量,如果不需要代理就 unset 掉。注意这里说的是系统代理配置,不是让你去配代理,而是排查为什么请求被路由到了不存在的本地端口。
5.3 reading choices 报错
Error: reading 'choices' from response: unexpected end of JSON input原因:模型返回的响应不是标准 OpenAI 格式,或者响应被截断。常见于 Base URL 配错(比如漏了/v1或者多写了/v1)、模型 ID 不存在导致返回错误页、或者网络中断导致响应不完整。排查:用第 2 节的 curl 命令直接测,看返回的 JSON 结构。TaoToken 的 Base URL 是https://taotoken.net/api,OpenClaw 会自动拼接/v1/chat/completions,不要手动加/v1。
5.4 OAuth 相关报错
Error: OAuth token exchange failed: invalid_grant原因:飞书应用的 App ID 或 App Secret 配错,或者应用没发布。排查:在飞书开放平台确认应用状态是「已启用」,App ID 和 App Secret 从「凭证与基础信息」页面复制,不要从其他地方抄。如果用了加密模式,encrypt_key也要对应填上。
5.5 飞书事件回调不触发
机器人不回复,日志里也没有[feishu] received message。排查:确认事件订阅的请求地址是公网可达的,本地开发用内网穿透工具映射;确认订阅了im.message.receive_v1事件;确认verification_token和飞书后台一致。如果飞书后台显示「请求地址校验失败」,检查 Gateway 是否在运行、端口是否被防火墙拦截。
5.6 文档写入失败
机器人回复了成稿但文档是空的。排查:确认docx:document和drive:drive权限已开通并发布;确认allowed_users里有你的用户 ID;确认目标文件夹有写入权限。如果文档创建成功但内容为空,检查 de-ai-tone 技能是否在润色阶段把内容清空了,看日志里[skill] de-ai-tone的输出。
6. 长期运行建议与接入入口
写作助手跑通之后,有几个长期运行的建议。第一,把 config.toml 和 Workspace 目录纳入版本管理,人设文件的迭代是渐进的,每次调整都记录一下改了什么、为什么改。第二,MEMORY.md 定期维护,把稳定的写作偏好沉淀进去,过时的清理掉,保持记忆文件精简。第三,模型路由按任务类型固定下来,写作走一个模型、润色走一个模型,不要频繁换,换的时候在日志里记录一下效果对比。
如果你还没拿 Key,从这里开始:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys接入文档在这里,配置参数对照查:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc想先测试哪个模型写出来的东西最符合你的风格,去模型对话页面:
https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat长期跑写作 Agent 的话,Coding Plan 的额度方案比按量计费稳定:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan最后说一个实际踩过的坑:飞书文档的写入权限和文件夹权限是分开的,docx:document只给了文档内容编辑权限,如果要把文档放进指定文件夹,还需要drive:drive权限,并且目标文件夹要对应用可见。我第一次配的时候只开了文档权限,结果文档创建在根目录,找了好久才发现是文件夹权限没开。