"AI 帮我写完文档了,但我还得手动复制粘贴到飞书..." —— 这不科学!
关于作者
某大厂前端开发,热爱折腾,喜欢自动化。日常工作是写代码,业余爱好是优化写代码的流程。
座右铭:
- 能用代码解决的,绝不动手
- 能自动化的,绝不手动
- 能偷懒的,绝不勤快
开篇:AI 时代的新烦恼
2024 年,AI 已经能帮我们写代码、写文档、写周报了。作为一个拥抱 AI 的程序员,我每天都在用 Claude、ChatGPT 生成各种技术文档。
但是...
作为大厂程序员,年底述职需要数据支撑。我需要整理这一年做了多少技术文档、解决了多少问题。AI 写完文档后,我还得:
- 复制 Markdown 内容
- 打开飞书网页
- 新建文档
- 粘贴(格式还经常乱)
- 调整格式
- 设置权限
- 移动到指定文件夹
- 手动记录到表格(为了后续统计)
AI 帮我省了 5 分钟,我却要花 3 分钟做这些机械操作。 更要命的是,没有统一的归档,年底统计数据时简直是噩梦。
转折:发现宝藏文章
就在我准备自己撸一个上传脚本的时候,我在知乎刷到了一篇神文:
《飞书文档操作神器!用AI+Feishu MCP实现文档自动化,效率提升10倍》
看完我直接跪了:原来 MCP(Model Context Protocol)可以直接操作飞书文档!
MCP 是什么?简单说就是让 AI 能调用各种外部服务的协议。有了它,AI 不仅能写文档,还能直接把文档传到飞书上!
这不就是我梦寐以求的自动化吗? 🤩
第一次翻车:系统权限的尴尬
按照文章配置好 MCP,我兴奋地让 AI 创建了第一个飞书文档。
# 使用 tenant_access_token(系统权限)
AI: "文档已创建成功!链接:https://xxx.feishu.cn/docx/..."
我点开链接,然后...
抱歉,你没有权限查看此文档
???我自己创建的文档我自己看不了?
原来用系统权限(tenant_access_token)创建的文档,默认只有应用自己能访问。我把链接发给同事,他们也是一脸懵:
"你发的啥玩意?打不开啊!"
第一次尝试,翻车。 🚗💨
第二次翻车:Token 过期的噩梦
既然系统权限不行,那就用用户权限(user_access_token)吧!
这次文档终于能打开了,我和同事都能看到内容。正当我以为大功告成时...
第二天,Token 过期了。 😱
AI: "上传失败:token_invalid"
飞书的 user_access_token 默认只有 2 小时有效期。也就是说,我每隔 2 小时就要:
- 打开飞书开放平台
- 重新授权
- 复制新的 Token
- 更新 MCP 配置文件
这比手动复制粘贴还麻烦啊! 我是来解决问题的,不是来制造新问题的!
破局:写个服务自动刷新 Token
作为一个程序员,遇到重复劳动的第一反应就是:写个脚本自动化它!
我用 Express 搭了个简单的 OAuth 服务器:
// feishu-oauth/server.js
const express = require('express');
const app = express();
// 授权回调:获取 Token
app.get('/callback', async (req, res) => {
const code = req.query.code;
// 用授权码换取 access_token 和 refresh_token
const tokens = await getTokens(code);
// 自动同步到 MCP 配置文件
syncToMcpConfig(tokens.access_token);
});
// 刷新 Token
app.get('/refresh', async (req, res) => {
// 用 refresh_token 换新的 access_token
const newToken = await refreshToken();
// 自动同步到所有需要的地方
syncToAllConfigs(newToken);
});
现在只需要:
# 启动服务
node feishu-oauth/server.js
# 需要刷新时
curl http://localhost:3000/refresh
Token 问题解决了! 🎉
服务会自动:
- 刷新 Token
- 更新 Cursor MCP 配置
- 保存到本地文件
从此告别手动更新 Token 的噩梦!
大规模使用:新问题接踵而至
Token 问题解决后,我开始大规模使用这个工具。每天让 AI 写完文档,直接上传到飞书,爽得飞起!
但好景不长...
问题 1:测试同学的需求
测试同学找到我:
"能不能在文档里加上应用名和分支名?我们需要知道这个文档对应哪个项目的哪个分支。"
合理需求!于是我在文档模板里加了个表格:
## 项目信息
| 字段 | 说明 |
|-----|------|
| 应用名 | [应用名] |
| 分支名称 | [分支名] |
通过解析当前路径和 git 信息,自动填充这些字段。
// 自动提取应用名(敏感信息已脱敏)
const appName = process.cwd().split('/').pop();
// 自动获取分支名
const branch = execSync('git branch --show-current').toString().trim();
通过解析当前路径和 git 信息,自动填充这些字段。
// 自动提取应用名
const appName = process.cwd().split('/').pop();
// 自动获取分支名
const branch = execSync('git branch --show-current').toString().trim();
问题 2:同事看不了文档
文档上传成功了,信息也齐全了,但同事又来找我:
"你发的文档我打不开,说没有权限。"
又是权限问题? 😤
原来新创建的文档默认是私有的,需要手动添加协作者。于是我写了个脚本:
// 自动添加协作者(敏感信息已脱敏)
async function addCollaborators(docToken, maintainers) {
for (const name of maintainers) {
await feishuApi.addPermission({
token: docToken,
member_type: 'user',
perm: 'edit' // 可编辑权限
});
}
}
现在创建文档时,自动给部门全员加上编辑权限。
问题 3:文档散落各处,述职数据难统计
随着使用量增加,我发现一个新问题:文档到处都是!
有的在个人空间,有的在临时文件夹,想找个文档比大海捞针还难。更要命的是,年底述职需要统计数据,我根本不知道自己写了多少文档!
作为大厂程序员,述职 PPT 上没有数据支撑,那就是耍流氓。领导要看的是:
- 产出了多少技术文档
- 解决了多少技术问题
- 提升了多少团队效率
解决方案:统一迁移到 AI 文件夹,自动记录统计数据!
// 自动移动到指定文件夹
async function moveToFolder(docToken, folderToken) {
await feishuApi.moveFile({
token: docToken,
folder_token: folderToken
});
}
// 自动记录到本地 JSON(按周归档)
async function saveRecord(data) {
const weekPath = getWeekPath(); // 2026/01月第4周_01月27号到02月02号
const recordFile = `${weekPath}/records.json`;
const records = readRecords(recordFile);
records.push({
title: data.title,
token: data.token,
path: data.path,
timestamp: Date.now()
});
writeRecords(recordFile, records);
}
这样不仅方便管理,还能自动统计数量:
"本月 AI 生成文档:127 篇,节省时间:635 分钟,提升效率:60%"
年底述职 PPT 上,这些数据直接拿来用,领导看了都说好! 😊
意外收获:AI 知识库联动的可能性
统一归档到 AI 文件夹后,我突然意识到一个更大的价值:这些文档可以成为 AI 知识库的数据源!
想象一下这个场景:
新同事:这个功能怎么实现的?
AI 助手:[自动检索 AI 文件夹] 根据《XX技术方案文档》,这个功能的实现思路是...
新同事:之前遇到过类似的坑吗?
AI 助手:[检索历史文档] 在《XX问题排查记录》中提到过,解决方案是...
所有的技术文档、问题记录、方案设计,都可以成为团队的知识资产!
现在飞书已经支持 AI 知识库功能,只要把文档统一放在一个文件夹里,就可以:
- 智能问答:新人提问时,AI 自动从历史文档中找答案
- 经验传承:老员工的技术经验不会因为离职而流失
- 快速检索:不用翻遍所有文档,AI 帮你找到最相关的内容
- 持续学习:AI 会随着文档增多而变得更智能
这才是自动化的终极形态:不仅提升个人效率,还能沉淀团队知识!
我已经在规划下一步:
- 给每个文档打上标签(技术栈、问题类型、难度等级)
- 建立文档关联关系(这个方案参考了哪些文档)
- 定期生成知识图谱(团队的技术全景图)
从单纯的文档上传工具,到团队知识库的基础设施,这个小工具的价值远超我的预期! 🚀
问题 4:效率还是太慢
到这里,上传一个文档需要:
- AI 生成文档
- 刷新 Token(如果过期)
- 上传到飞书
- 添加协作者
- 移动到指定文件夹
- 记录到本地 JSON
虽然比手动快多了,但还是要执行好几条命令。
作为一个懒惰的程序员(褒义),我决定:把所有操作合并成一个脚本!
// feishu-oauth/hooks.js
async function processDocument(options) {
const { token, title, folder, path, maintainers } = options;
// 1. 添加协作者
await addCollaborators(token, maintainers);
// 2. 移动到指定文件夹
await moveToFolder(token, folder);
// 3. 记录到本地 JSON(按周归档)
await saveRecord({
token,
title,
path,
timestamp: Date.now()
});
console.log('✅ 所有操作完成!');
}
现在只需要一条命令:
node feishu-oauth/hooks.js \
--token "[文档token]" \
--title "[文档标题]" \
--folder "[目标文件夹token]" \
--path "[本地路径]" \
--maintainers "[维护者1],[维护者2],Claude AI"
一条命令,搞定所有后续操作! 🚀
但这还不够,我希望 AI 能直接帮我完成这些操作,而不是我手动执行命令。
终极形态:封装成 Push 命令
经过这么多次迭代,我意识到:这个工具已经足够成熟,可以封装成一个 AI 命令了!
我在 Cursor 中创建了一个 push 命令(.cursor/commands/push.md):
---
name: push
description: 上传当前 Markdown 文档到飞书云文档
---
# 上传到飞书文档
## 前置条件
刷新 Token:curl http://localhost:3000/refresh
## 上传流程
1. 使用 MCP 的 mcp_lark_mcp_docx_builtin_import 上传文档
2. 自动执行 hooks.js 完成后续操作
## 自动化操作
- ✅ 添加协作者权限(部门全员可编辑)
- ✅ 移动到 AI 文件夹
- ✅ 记录到本地 JSON(按周归档)
- ✅ 自动提取应用名和分支信息
现在的工作流程:
我:@Cursor 帮我写一个技术方案文档
AI:[生成文档内容]
我:/push
AI:[自动上传到飞书,完成所有后续操作]
我:喝口咖啡 ☕️
从写文档到上传完成,全程 AI 自动化,我只需要说一句话!
这个 push 命令成为了其他高级 AI 操作的基石:
- 自动化周报:AI 写完周报 →
/push→ 自动上传并通知 - 代码审查报告:AI 分析代码 → 生成报告 →
/push→ 团队可见 - 技术文档同步:本地 Markdown 更新 →
/push→ 飞书同步更新
一个小命令,撬动了整个工作流的自动化! 💪
效果对比:从 5 分钟到 5 秒
让我们来看看优化前后的对比:
优化前(手动操作)
1. AI 写文档:2 分钟
2. 复制粘贴到飞书:30 秒
3. 调整格式:1 分钟
4. 设置权限:30 秒
5. 移动文件夹:30 秒
6. 添加项目信息:30 秒
总计:5 分钟
优化后(自动化)
1. AI 写文档:2 分钟
2. 执行一条命令:5 秒
总计:2 分钟 5 秒
效率提升:60%! 而且完全不需要人工干预,可以批量处理!
技术细节:给想复现的同学
1. MCP 配置
使用 ~/.cursor/mcp.json 中添加:
{
"mcpServers": {
"lark-mcp": {
"command": "npx",
"args": [
"-y",
"@yingyeothon/lark-mcp@latest",
"u-[token]" // 这里会自动更新
]
}
}
}
2. OAuth 服务器
核心是实现 Token 的自动刷新和同步:
const hooks = {
onTokenSuccess: [
syncLarkMcpSettings, // 同步到 Cursor MCP
syncTokenToFile // 保存到本地文件
]
};
3. 上传文档
使用 mcp_lark_mcp_docx_builtin_import 工具:
{
data: {
file_name: "文档标题",
markdown: "# 内容..."
},
useUAT: true // 使用用户权限
}
4. 后续操作脚本
// hooks.js
const operations = [
addCollaborators, // 添加协作者
moveToFolder, // 移动文件夹
saveRecord // 保存记录
];
for (const op of operations) {
await op(docToken, options);
}
踩坑总结
-
系统权限 vs 用户权限
- 系统权限:创建的文档只有应用能访问
- 用户权限:创建的文档可以正常分享
- 结论:用用户权限!
-
Token 过期问题
- 手动更新:每 2 小时一次,太痛苦
- 自动刷新:写个服务,一劳永逸
- 结论:自动化是王道!
-
权限设置
- 默认私有:同事看不了
- 自动添加协作者:部门全员可见
- 结论:创建时就设置好权限!
-
文件管理
- 散落各处:难以查找和统计
- 统一归档:方便管理和追踪
- 结论:规范化很重要!
-
操作流程
- 多步操作:容易遗漏
- 一键完成:省心省力
- 结论:能合并就合并!
未来展望:从工具到生态
这个工具还有很多可以优化的地方:
短期优化(已在规划)
- 批量上传:一次上传多个文档
- 增量更新:本地文档更新后自动同步到飞书
- 双向同步:飞书文档修改后同步回本地
- 权限模板:不同类型文档使用不同权限配置
- 统计面板:可视化展示文档创建数量、节省时间等
长期愿景(AI 知识库生态)
更激动人心的是 AI 知识库联动:
-
智能文档分类
- AI 自动识别文档类型(技术方案、问题记录、代码审查等)
- 自动打标签、建立关联关系
- 生成知识图谱
-
团队知识问答
- 新人提问 → AI 从历史文档中找答案
- 遇到问题 → AI 推荐相关的解决方案
- 技术选型 → AI 总结团队的历史经验
-
知识沉淀与传承
- 老员工的经验自动归档
- 技术债务可追溯
- 团队技术栈全景图
-
智能推荐系统
- 写新方案时,AI 推荐相关的历史文档
- 代码审查时,AI 提醒类似的历史问题
- 技术分享时,AI 生成知识脉络图
想象一下:
场景 1:新人入职
新人:这个项目的架构是怎样的?
AI:[检索 AI 文件夹] 为你找到 15 篇相关文档,按重要性排序...
场景 2:技术选型
你:我们要不要用 XXX 技术?
AI:[分析历史文档] 团队在 3 个月前评估过,当时的结论是...
场景 3:问题排查
你:这个 bug 之前遇到过吗?
AI:[检索问题记录] 在《XX问题排查》中有类似案例,解决方案是...
这不仅是效率工具,更是团队知识资产的基础设施!
从一个简单的文档上传工具,到团队知识库的核心引擎,这个演进路径让我越来越兴奋。
AI + 自动化 + 知识沉淀 = 团队效能的指数级提升! 🌟
写在最后
从最开始的手动复制粘贴,到现在的一键上传,再到未来的 AI 知识库联动,这个工具的演进让我深刻体会到:
好的工具不仅解决当下的问题,更要为未来创造可能性。
当初只是想偷个懒,少复制几次粘贴。没想到最后做出了一个:
- 提升个人效率的自动化工具
- 方便述职统计的数据系统
- 团队知识沉淀的基础设施
- AI 知识库联动的数据源
程序员的浪漫,就是把重复劳动变成一行命令,再把一行命令变成团队资产。
现在每次同事问我:"能不能把这个文档发到飞书上?"
我只需要淡定地回一句:
"AI 写完就自动上传了,你去飞书 AI 文件夹找吧。顺便,这些文档以后都能用来训练团队知识库。"
这种感觉,真爽! 😎
彩蛋:关于 AI 知识库
如果你对 AI 知识库联动感兴趣,可以关注我的后续文章。我会分享:
- 如何用飞书 AI 知识库构建团队问答系统
- 如何给文档打标签、建立知识图谱
- 如何让 AI 从历史文档中学习团队经验
从工具到生态,这才刚刚开始! 🚀
相关资源
- 开源项目:GitHub - feishu-auto-upload ⭐️
- 灵感来源:飞书文档操作神器!用AI+Feishu MCP实现文档自动化
- MCP 官方文档:Model Context Protocol
- 飞书开放平台:open.feishu.cn/
快速开始
想要使用这个工具?只需三步:
# 1. 克隆项目
git clone https://github.com/mczhaozl/feishu-auto-upload.git
# 2. 安装依赖
cd feishu-auto-upload && npm install
# 3. 启动服务
npm start
详细使用文档请查看 GitHub README
如果你也被飞书文档折磨过,欢迎在评论区分享你的故事!
如果这篇文章对你有帮助,别忘了:
- 👍 点赞支持
- ⭐️ GitHub Star
- 💬 评论交流