OpenClaw技能开发指南为千问3.5-27B定制专属自动化模块1. 为什么需要自定义OpenClaw技能去年冬天我花了整整两周时间手动整理几百张产品规格表的截图——把图片里的表格数据转录到Excel。这种重复劳动让我开始思考既然千问3.5-27B能理解图片内容OpenClaw又能操作本地文件为什么不把它们结合起来做个自动化工具这就是自定义技能的用武之地。OpenClaw默认提供的技能虽然覆盖常见场景但当遇到像我的表格提取这种特殊需求时开发专属模块才是终极解决方案。通过本文你将完整经历从零开发一个图片转Excel技能的全过程包括如何建立ClawHub开发环境对接千问3.5-27B的多模态API处理图片和表格数据的转换逻辑最终打包发布你的技能2. 开发环境准备2.1 基础工具链配置首先确保本地已安装node -v # 需要v18 npm -v # 需要9 python3 --version # 需要3.8然后安装ClawHub脚手架npm install -g clawhub-cli clawhub init qwen-excel-skill --templatetypescript cd qwen-excel-skill这个模板会自动生成技能开发所需的目录结构├── src │ ├── actions # 技能动作实现 │ ├── models # 数据模型 │ ├── tests # 测试用例 │ └── index.ts # 技能入口 ├── package.json └── clawhub.json # 技能元数据2.2 连接千问3.5-27B服务在项目根目录创建.env文件配置模型端点QWEN_BASE_URLhttp://你的服务器IP:8080/v1 QWEN_API_KEYsk-your-key-here测试连接是否正常// src/tests/connection.test.ts import { QwenClient } from ../src/utils/qwen; describe(千问服务连接测试, () { it(应该成功连接多模态API, async () { const client new QwenClient(); const response await client.chat({ model: qwen-vl-plus, messages: [{ role: user, content: [{ type: text, text: 描述这张图片 }, { type: image_url, image_url: { url: base64编码的图片 } }] }] }); expect(response).toHaveProperty(choices); }); });3. 开发图片转Excel核心逻辑3.1 设计技能工作流我们的技能需要完成以下步骤接收用户上传的图片文件调用千问3.5-27B解析图片中的表格将返回的结构化数据转换为Excel保存文件并返回下载链接在src/actions/convert.action.ts中实现主逻辑import { ExcelBuilder } from ./excel-builder; import { QwenParser } from ./qwen-parser; export async function convertImageToExcel( imagePath: string, outputDir: string ): Promisestring { // 步骤1调用千问解析图片 const parser new QwenParser(); const tableData await parser.analyzeImage(imagePath); // 步骤2生成Excel文件 const excelBuilder new ExcelBuilder(); const outputPath path.join(outputDir, ${Date.now()}.xlsx); await excelBuilder.build(tableData, outputPath); return outputPath; }3.2 多模态API调用细节千问3.5-27B的图片理解接口需要特殊处理base64编码// src/utils/qwen-parser.ts export class QwenParser { async analyzeImage(imagePath: string): PromiseTableData { const imageBase64 await fs.promises.readFile(imagePath, base64); const response await this.client.chat({ model: qwen-vl-plus, messages: [{ role: user, content: [{ type: text, text: 提取图片中的表格数据以JSON格式返回。要求第一行为表头后续每行对应一条记录 }, { type: image_url, image_url: { url: data:image/png;base64,${imageBase64} } }] }], response_format: { type: json_object } }); return this.parseResponse(response.choices[0].message.content); } }3.3 Excel生成优化技巧使用exceljs库处理复杂表格时我遇到了两个典型问题及解决方案问题1千问返回的JSON可能包含合并单元格信息// src/actions/excel-builder.ts async build(data: TableData, outputPath: string) { const workbook new ExcelJS.Workbook(); const worksheet workbook.addWorksheet(Sheet1); // 处理表头 data.headers.forEach((header, colIndex) { const cell worksheet.getCell(1, colIndex 1); cell.value header.text; if (header.span 1) { worksheet.mergeCells(1, colIndex 1, 1, colIndex header.span); } }); // 处理数据行 data.rows.forEach((row, rowIndex) { row.cells.forEach((cell, colIndex) { worksheet.getCell(rowIndex 2, colIndex 1).value cell; }); }); await workbook.xlsx.writeFile(outputPath); }问题2中文编码导致的乱码 在clawhub.json中添加mime类型声明{ mimeTypes: { output: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charsetutf-8 } }4. 技能调试与发布4.1 本地测试方法开发过程中我使用两种测试方式单元测试验证核心函数// src/tests/convert.test.ts it(应该正确转换表格图片, async () { const output await convertImageToExcel( ./test/assets/sample-table.png, ./test/output ); expect(fs.existsSync(output)).toBeTruthy(); });集成测试通过OpenClaw控制台实际调用clawhub dev --watch然后在OpenClaw Web界面输入将test.png中的表格导出为Excel4.2 打包与发布完成开发后执行构建clawhub build这会生成dist目录包含编译后的JS代码资源文件package.json依赖发布到ClawHub仓库clawhub publish --public发布后其他用户可以通过以下方式安装你的技能clawhub install qwen-excel-skill5. 实际应用中的经验分享在真实使用这个技能三个月后我总结了几个关键优化点缓存处理频繁解析相同图片时可以添加本地缓存层const cacheKey createHash(md5).update(imageBuffer).digest(hex); if (await cache.has(cacheKey)) { return cache.get(cacheKey); }批量处理模式支持传入图片目录批量转换async function batchConvert(imageDir: string) { const files await fs.promises.readdir(imageDir); return Promise.all( files.filter(f f.endsWith(.png)) .map(f convertImageToExcel(path.join(imageDir, f))) ); }质量检查有些模糊图片的识别结果需要人工复核// 在clawhub.json中添加复核步骤 { workflow: { confirmBeforeExecute: true } }开发自定义技能最有趣的部分是看到AI真正融入日常工作流。现在我的团队每周用这个技能处理上百张表格图片节省的时间远超当初的开发投入。更重要的是这个过程中积累的经验可以复用到其他场景——比如最近我们正在开发基于相同技术的发票识别模块。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。