
AI 很会“说”,但让它碰一下你电脑上的文件——PDF、Excel、Word——它就傻眼了。
就像你招了一个特别聪明的助理,语数外样样精通,但你让他"把桌面上的合同打印出来",他说"我不会用打印机"。
今天这一课,给 AI 装上「操作文件」的能力——读 PDF、写 Excel、批量重命名。学完你会发现,那些每周要花你半小时的"文件杂活",AI 几秒钟就能干完。
一、文件处理 Skill 能干什么
文件处理 Skill,简单说就是——让代码帮你在电脑上操作文件。
说白了,就是把你在电脑上"点点点"的操作,变成代码自动执行。
二、实战一:写一个「PDF 转文字」Skill
很多合同、报告、论文都是 PDF 格式。每次想找一段关键信息,得打开翻半天。
这个 Skill 的功能:你告诉它 PDF 文件在哪,它帮你把里面的文字全部提取出来。
第 1 步:创建文件夹
skills/
└── pdf_reader/
第 2 步:SKILL.md
# PDF 阅读器
## 功能
读取指定 PDF 文件,提取其中的全部文字内容。
## 使用场景
- 用户让 AI 读合同内容
- 用户让 AI 总结 PDF 论文
- 用户让 AI 从 PDF 报表中提取数据
## 输入参数
- path(必填):PDF 文件的完整路径
## 输出格式
返回 PDF 中的全部文字内容。
第 3 步:skill.json
{
"name": "pdf_reader",
"version": "1.0.0",
"description": "读取PDF文件并提取文字",
"author": "我",
"keywords": ["PDF", "阅读", "提取文字"],
"permissions": ["filesystem"]
}
注意 ——操作文件必须有这个权限。"permissions": ["filesystem"]
第 4 步:index.js
' PDF 阅读器 Skill
' 需要先安装 pdf-parse 包:npm install pdf-parse
import fs from'fs'' fs 是文件系统模块,能读写电脑上的文件
import pdf from 'pdf-parse' ' pdf-parse 是专门解析 PDF 的库
exportdefaultasyncfunction(query) {
try {
' ===== 1. 取参数 =====
const filePath = query.path
if (!filePath) {
return '⚠️ 请提供 PDF 文件的路径。例如:读 PDF C:/合同.pdf'
}
' ===== 2. 检查文件是否存在 =====
if (!fs.existsSync(filePath)) {
return `⚠️ 文件不存在:${filePath}。请检查路径是否正确。`
}
' ===== 3. 读取 PDF =====
' fs.readFileSync 就是"读取这个文件的内容"
const fileBuffer = fs.readFileSync(filePath)
' pdf() 把读取到的内容解析成文字
const data = await pdf(fileBuffer)
' ===== 4. 返回提取的文字 =====
const text = data.text ' data.text 就是 PDF 里的全部文字
' 如果文字太长,只返回前 2000 字 + 提示
if (text.length > 2000) {
return text.slice(0, 2000) +
`\n\n……(共 ${text.length} 字,以上为前 2000 字)`
}
return text
} catch (error) {
return `⚠️ PDF 读取失败:${error.message}`
}
}
核心就两步:fs.readFileSync 读文件,pdf() 解析文字。其他代码都是在做"安全检查"和"格式处理"。
三、实战二:写一个「生成 Excel」Skill
需求:「帮我把这些销售数据生成一个 Excel 表格,第一列是月份,第二列是销售额。」
文件结构
skills/
└── excel_writer/
├── SKILL.md
├── skill.json
└── index.js
index.js
' Excel 写入器 Skill
' 需要先安装 xlsx 包:npm install xlsx
import XLSX from'xlsx'
exportdefaultasyncfunction(query) {
try {
' ===== 1. 取参数 =====
const filePath = query.path || './output.xlsx' ' 默认保存在当前目录
const headers = query.headers || [] ' 表头:[月份, 销售额]
const rows = query.rows || [] ' 数据:[[1月,100],[2月,200]]
const sheetName = query.sheetName || 'Sheet1'' 工作表名
if (rows.length === 0) {
return '⚠️ 请提供要写入的数据。例如:生成表格,数据为[["1月",100],["2月",200]]'
}
' ===== 2. 组装数据 =====
' 把表头和数据拼成一个大数组
const allData = [headers, ...rows] ' ...rows 就是"把 rows 展开"
' ===== 3. 创建工作表和工作簿 =====
' XLSX.utils.aoa_to_sheet 把二维数组转成 Sheet
const worksheet = XLSX.utils.aoa_to_sheet(allData)
const workbook = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(workbook, worksheet, sheetName)
' ===== 4. 写入文件 =====
XLSX.writeFile(workbook, filePath)
return `✅ Excel 已生成:${filePath}。` +
`共 ${rows.length} 行数据,${headers.length} 列。`
} catch (error) {
return `⚠️ Excel 生成失败:${error.message}`
}
}
当你对 Agent 说「帮我把这些数据生成一个 Excel」,Agent 会自动提取参数—把表头填进 headers,把数据填进 rows—然后调用这个 Skill。
四、实战三:写一个「批量重命名」Skill
需求:把 文件夹下所有 PNG 文件的文件名前面加上 前缀。images/photo_
重命名前:a.png, b.png, c.png
重命名后:photo_a.png, photo_b.png, photo_c.png
index.js
' 批量重命名 Skill
import fs from 'fs'
import path from 'path' ' path 模块用来处理文件路径
exportdefaultasyncfunction(query) {
try {
' ===== 1. 取参数 =====
const folder = query.folder ' 要处理的文件夹
const prefix = query.prefix || ''' 要加的前缀
const suffix = query.suffix || '' ' 要加的后缀
const extension = query.extension || '.png'' 要处理的文件类型
if (!folder) {
return '⚠️ 请提供文件夹路径。例如:重命名 C:/images 下的文件'
}
' ===== 2. 检查文件夹 =====
if (!fs.existsSync(folder)) {
return `⚠️ 文件夹不存在:${folder}`
}
' ===== 3. 读取文件夹,筛选目标文件 =====
const files = fs.readdirSync(folder)
.filter(f => f.endsWith(extension)) ' 只保留 .png 文件
if (files.length === 0) {
return `⚠️ 在 ${folder} 中没有找到 ${extension} 文件`
}
' ===== 4. 逐个重命名 =====
let count = 0
for (const oldName of files) {
const oldPath = path.join(folder, oldName) ' 旧路径
const newName = prefix + oldName + suffix ' 新文件名
const newPath = path.join(folder, newName) ' 新路径
fs.renameSync(oldPath, newPath) ' 执行重命名
count++
}
return `✅ 重命名完成!共处理 ${count} 个 ${extension} 文件。`
} catch (error) {
return `⚠️ 重命名失败:${error.message}`
}
}
100 个文件,手动改要 5 分钟,Skill 跑完只要 1 秒。这就是自动化的力量。
五、文件处理的三个安全守则
文件操作比你想象的危险——删错了文件没有回收站。
守则 1:操作前先检查文件是否存在。
if (!fs.existsSync(filePath)) {
return`⚠️ 文件不存在:${filePath}`
}
就像拿快递前先确认门牌号——地址错了,拿到的不是你的东西。
守则 2:写文件前先备份(重要文件)。
' 如果目标文件已存在,先备份
if (fs.existsSync(filePath)) {
const backupPath = filePath + '.backup'
fs.copyFileSync(filePath, backupPath)
}
守则 3:在 SKILL.md 里明确声明这个 Skill 会操作哪些文件。
## 注意事项
- 此 Skill 会读取并修改指定文件夹内的文件
- 建议在操作前备份重要文件
- 不会删除任何文件(仅重命名/读取/写入)
动手:选一个你最需要的文件 Skill 来实现
最常用:PDF 阅读器(上面的代码直接复制就能跑) 最省时间: 批量重命名(整理文件夹的神器) 最高频:Excel 生成器(周报月报自动生成)
三个里面选一个,跟着上面的代码敲一遍。文件 Skill 的套路都一样:检查文件 → 读取/写入 → 返回结果。搞懂一个,剩下两个你一看就懂。
文件 技能 = AI 的「双手」
之前 AI 只有嘴,现在它有手了。能拿起你桌面的文件,能帮你填表,能帮你整理文件夹。
从今天开始,那些"重复操作文件"的琐事——你动嘴,AI 动手。
下一课,我们写一个数据处理 Skill——让 AI 帮你自动做报表、画图表。每周五的月报噩梦,从下周起彻底拜拜。
实现哪一个了?评论区告诉我,帮你 debug~ 📁
夜雨聆风