原文教大家把飞书云文档进阶命令整段复制给 Codex,让它自己调 lark-cli 找文件夹、建文档。但我把那句「帮我在飞书里找到“工作周报”文件夹,然后创建文档」发出去,Codex 还没输出任何计划,终端先跳出一行401 Unauthorized。这个 401 不是飞书那边拒绝,而是 Codex 自己连模型通道时没通过验证,后面的 lark-cli 自然一句都没执行。排障思路其实一句话:先到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建一把 API Key,把 Codex 的模型通道指到 TaoToken,Base URL 写 https://taotoken.net/api,不要再往后面加/v1。
很多人在原文里复制「帮我找文件夹」「帮我创建文档」时,默认 Codex 一定能听懂。但 Codex 要先连上模型,才会思考、才会决定调用 lark-cli;模型通道 401,它连「好的」都回不了。这篇就从 401 的现场往后查:先确认是不是通道问题,再去拿 Key、改~/.codex/config.toml,最后把原文那两个核心动作drive +search和docs +create重新跑通。
1. 401 Unauthorized 出现在回复之前,先别怪 lark-cli
1.1 Codex 和 lark-cli 谁先工作
Codex 是终端里的 AI 编程代理,lark-cli 是它要调用的飞书命令行工具。原文说的是「命令直接复制发给 Codex」,很多人只看到了后半句,忽略了前半句的前提:Codex 要能正常调用模型,它才知道怎么用 lark-cli。
你把「帮我在飞书里找文件夹」发给 Codex 后,它会先向配置好的模型 API 发一次请求。拿到这个请求的响应,它才能理解你的意图,才知道要执行lark-cli drive +search。如果模型 API 返回 401,整个过程在第一环就断了。lark-cli 有没有装、飞书凭证对不对,都还没走到那一步。
所以收到 401 时,第一个判断是:Codex 是在回答前就报错,还是回答到一半再报错。前者是模型通道失效,后者才可能是 lark-cli 自己的飞书凭证失效。可以这样理解:lark-cli 是已经插在电脑上的飞书插头,Codex 才是那个下指令的人;插头没坏,但下指令的人还没醒,后面全是白搭。
1.2 这个 401 到底错在哪
401 的完整含义是「未认证」:你的请求没带对身份,或身份被服务端拒绝。放在 Codex 这里,常见的原因有三处。
第一,API Key 复制得不完整,或者复制到一把已经失效的旧 Key。第二,Key 本身没问题,但 Base URL 填错了地方,填成了官网页面而不是 API 入口。第三,Base URL 后面多写了/v1,导致请求被送到一个不存在的路径,服务端也按未授权处理。
这三处都和模型通道有关,和 lark-cli 无关。你不需要去动飞书开放平台的应用凭证,也不需要重新执行npx skills add larksuite/cli。先把你现在手上的 API Key 和 Base URL 对一遍,比重新安装工具更省时间。
2. 先到 TaoToken 拿 Key,Base URL 只填到 /api
2.1 官网页面和 API 入口是两回事
TaoToken 提供的是统一 API 兼容通道,官网页面和接口地址要分开记。注册账号、创建 API Key、看模型广场、查用量,都走官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。而填进 Codex 的 Base URL 是https://taotoken.net/api,末尾没有/v1。
创建 Key 的操作不复杂:打开 TaoToken,注册登录,进控制台的 API Keys 页面点新建,把生成的 Key 复制出来。后面我会一直用YOUR_API_KEY占位,你换成自己复制的字符串即可。官网页面上一般会显示一把完整 Key,也可以随时重建,旧 Key 会立即失效。
2.2 为什么特别强调别多写 /v1
很多 AI API 提供商要求客户端请求里带/v1,例如 OpenAI 的https://api.openai.com/v1。但 TaoToken 的接入地址本身就是https://taotoken.net/api,它已经包含了通道根路径。如果你图省事写成https://taotoken.net/api/v1,请求会落到一个不存在的路径,网关直接拒绝,表现也是 401 或 404 这类鉴权/路由错误。
记住这条边界:https://taotoken.net/api只用于填进工具、终端命令、环境变量;而https://taotoken.net/?utm_source=taotoken_aicg_blog_end只用于浏览器里注册、看模型、管理 Key。两者不要互相替换,更不能把 UTM 参数加进 API 地址。
3. 在 ~/.codex/config.toml 里新增 model_provider
3.1 最小可用配置示例
Codex 的配置文件位于~/.codex/config.toml。你不需要动其他字段,只需在文件末尾加一段 provider 配置,并把默认 provider 指到它:
model = "你的模型ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"上面model里面的内容先不要照着抄,你要去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场找一个模型 ID 填进去。不同时期模型广场的列表会变,凭记忆写一个不确定的模型 ID,会在请求阶段直接报 model not found,比 401 更让人迷惑。
env_key是 Codex 读取 API Key 用的环境变量名。你可以沿用TAOTOKEN_API_KEY,也可以自己改成别的名称,但一定要和下面的环境变量保持完全一致。
3.2 让 Codex 读到这把 Key
保存配置后,在终端里导出 Key:
export TAOTOKEN_API_KEY=YOUR_API_KEY然后重新启动 Codex。这里说的重启不是只开一个新终端,而是要确保 Codex 进程重新加载环境变量和 config.toml。如果你是用codex命令启动的,关掉当前终端再重新打开最省事。
常见误区是:配置写在文件里,Key 也 export 了,但没重启,Codex 还是拿旧配置去请求,于是继续 401。按「改配置 → 导出 Key → 重启 Codex」三步走完,这条通道才算真接上。
4. 重新跑通原文的前两步:先 drive +search,再 docs +create
4.1 让 Codex 先找到文件夹
前面通道修好,现在就回到原文的核心流程。先让 Codex 执行搜索,确认它能拿到文件夹 ID:
lark-cli drive +search --query "项目周报"Codex 会把这个命令解释成「去飞书搜一遍名字带‘项目周报’的云空间项目」,然后返回类似fld_xxxxxxxx的文件夹 ID。你也可以用lark-cli drive +list列出云空间顶层文件,自己挑一个文件夹。
这一步原来最容易失败,不是命令写错,而是 Codex 被 401 挡住后,根本执行不到。现在通道通了,你只要把这句话发给 Codex:
「帮我在飞书里搜索名称为‘项目周报’的文件夹,存在就返回它的 ID,不存在就告诉我缺少什么权限。」
4.2 在文件夹下创建 Markdown 文档
拿到文件夹 ID 后,可以手动指定建文档:
lark-cli docs +create --title "2026年5月第一周周报" --markdown "# 本周完成\n- 跑通 TaoToken 通道\n- 恢复 lark-cli 调用" --folder "fld_xxxxxxxx"注意--folder的值换成上一步拿到的真实 ID,不要照抄字面量。原文推荐的做法是让 Codex 自动完成搜索再创建,省去手动复制。你可以把这整段发给 Codex:
「帮我在飞书里找到‘项目周报’文件夹,没有就新建,然后在这个文件夹里创建一篇周报,标题叫《2026年5月第一周周报》,内容用 Markdown,要含一个完成事项表格,创建完把文档链接返回。」
这段自然语言提示词里同时包含了「搜索文件夹」「创建文档」「返回链接」三个动作,Codex 会拆成drive +search和docs +create两次调用。如果 Base URL 还是错的,它会先报 401;配好之后,它才会像原文描述的那样一步步执行。
4.3 自动从消息和日历生成周报
原文还提到一个更高阶的玩法:从飞书消息和日历提取内容生成周报。这条链路依赖 lark-cli 的读权限,和模型通道是否通不冲突。通道修好后,你可以这样发:
「读我本周飞书群聊里的关键进展和日历上的会议,整理成一份带表格的周报,用 docs +create 放到‘项目周报’文件夹下,标题里带本周日期,最后把链接给我。」
Codex 会先调用搜索或列表命令确定文件夹,再聚合内容,再创建文档。它执行这些动作时不会再被模型通道卡住。
5. 排障对照:多写 /v1、Key 失效、飞书凭证失效
5.1 多写 /v1 为什么最容易误判
把 Base URL 写成https://taotoken.net/api/v1,请求会被送到一个不存在的资源路径。网关返回的往往是 401 或 404,日志里不会写「你多了个 /v1」,只会写unauthorized或not found。所以排障时优先检查配置里有没有多这个尾巴。
一个判断技巧是:只改 Base URL 不动 Key,如果报错从 401 变成 404,说明身份验证其实已经通过,是路径不对,多半就是/v1的事。如果继续 401,再看 Key 是否复制完整、有没有前后空格。注意,Key 不要发到公共聊天窗口里,泄露后要在控制台立即重建。
5.2 区分模型通道 401 与 lark-cli 的 401
lark-cli 调用飞书 API 时,用的是飞书开放平台的应用凭证,它也有可能报 401。区分方法很简单:Codex 根本没有发起 lark-cli,且输出一开始就是红字 401,那就是模型通道;Codex 正常回答你的话、然后 lark-cli 单独报 401,那才是飞书凭证过期,需要去飞书开放平台重新配置。
本文流程只解决前者。如果你改完 config.toml,模型通道 401 消失,但 lark-cli 执行时依然报权限错误,请检查飞书应用是否开启了「云文档读写」权限,而不是继续改 Base URL。
6. 原来的 Skill 流程不用重建,直接继续用
6.1 已装的 lark-cli Skill 不受影响
你通过npx skills add larksuite/cli装好的 lark-cli Skill,本质是把一组命令和使用说明交给 Codex。模型通道修好后,Codex 能读取 Skill 里的说明并使用这些命令。重启 Codex 时,它会重新扫描已安装的 Skill,不需要重新安装。
假如你发现/skills列表里没有 lark-cli,先别怀疑 TaoToken,可能是环境变量没加载,或 Codex 的工作目录不对。回到第 3 节,确认export那行和config.toml都存在,再重启一次。
6.2 建专属 Skill 也不影响
原文教的 Skill 创建方法仍然适用。例如你常写周报,可以新建一个feishu-weekly-report文件夹,里面放SKILL.md:
--- name: feishu-weekly-report description: 当用户要求写周报、月报、总结时自动触发,使用 lark-cli 搜索飞书内容并创建文档。 --- 步骤: 1. 用 lark-cli 查询最近的飞书消息和日历。 2. 整理成结构化 Markdown,包含表格。 3. 用 lark-cli docs +create 创建文档,放到“项目周报”文件夹。 4. 返回文档链接给用户。description写得越具体,Codex 越知道什么时候触发它。同一个 SKILL.md 在通道修好后就能被 Codex 正确执行,跟 TaoToken 没有冲突。
6.3 配好之后去控制台对一下这次调用
等 Codex 把文档链接返回,说明模型通道和 lark-cli 都正常了。你可以顺手在 模型对话 里用同一把 Key 发一条消息,确认模型 ID 与 Base URL 没有错位;再回到 控制台 API Keys 看这把 Key 的调用记录,确认刚才建文档的过程已经记上账。如果担心 Key 存在终端历史里,建议在控制台重建一把,把旧的删掉。长期写文档的话,Coding Plan 页面可以顺便看看套餐够不够;以后在 Claude Code 里走同一套 Key,参考 Claude Code 接入文档 就能少走同样的弯路。