OpenClaw技能开发入门:为Phi-3-vision-128k定制图片翻译模块
1. 为什么需要自定义图片翻译技能
去年我在整理海外技术文档时,经常遇到带文字的截图需要翻译。传统做法是先OCR识别再粘贴到翻译软件,整个过程要切换多个工具。直到发现OpenClaw可以通过技能扩展实现端到端自动化,才决定动手开发这个图片翻译模块。
选择Phi-3-vision-128k作为后端模型有两个原因:一是其多模态能力可以直接理解图片内容,二是128k上下文窗口适合处理高分辨率图像。这个组合让翻译过程无需中间OCR步骤,直接从图片到目标语言。
2. 开发环境准备
2.1 基础工具链配置
我的开发环境是macOS + VS Code,先通过Homebrew安装必要依赖:
brew install node@22 imagemagick npm install -g openclaw@latest clawhub@latest验证环境时遇到个小坑:ImageMagick需要额外授权屏幕录制权限。在系统设置的"隐私与安全性"中手动开启后,图片预处理功能才能正常工作。
2.2 创建技能脚手架
使用ClawHub CLI初始化项目:
mkdir image-translator && cd image-translator clawhub init --type=skill --name=image-translator --author=yourname生成的项目结构包含三个关键文件:
skill.json:技能元数据声明index.js:主逻辑入口config.schema.json:配置参数校验规则
3. 核心功能开发
3.1 图片预处理逻辑
考虑到模型对输入图像的尺寸限制,我添加了自动缩放功能。在index.js中实现:
const { execSync } = require('child_process') const fs = require('fs') async function preprocessImage(imagePath) { const tempPath = '/tmp/processed.jpg' try { execSync(`convert ${imagePath} -resize 1024x1024 -quality 90 ${tempPath}`) return { buffer: fs.readFileSync(tempPath), mimeType: 'image/jpeg' } } catch (error) { throw new Error(`图片处理失败: ${error.message}`) } }这段代码使用ImageMagick的convert命令,确保输出图像不超过1024x1024分辨率,同时保留90%的JPEG质量。
3.2 多模态API调用
对接Phi-3-vision需要构造特定的消息格式。我参考了模型文档,封装出请求方法:
async function callPhi3Vision(imageData, targetLang) { const response = await openclaw.models.generate({ model: 'phi-3-vision-128k', messages: [{ role: 'user', content: [ { type: 'text', text: `将图片中的文字翻译成${targetLang},保持原格式` }, { type: 'image_url', image_url: `data:${imageData.mimeType};base64,${imageData.buffer.toString('base64')}` } ] }], max_tokens: 4096 }) return response.choices[0].message.content }关键点在于构造multimodal messages数组,其中同时包含文本指令和base64编码的图片数据。
4. 技能打包与测试
4.1 本地调试技巧
在skill.json中声明测试命令:
{ "test": { "commands": [ { "name": "测试英文翻译", "command": "node test/en-to-zh.js" } ] } }创建测试脚本test/en-to-zh.js:
const skill = require('../index') const fs = require('fs') const imageBuffer = fs.readFileSync('test/sample.jpg') skill.execute({ image: imageBuffer, targetLang: '简体中文' }).then(console.log)通过clawhub test运行测试时,我发现模型有时会返回多余的解释文字。于是增加了后处理函数,用正则表达式提取核心翻译内容。
4.2 发布到ClawHub市场
发布前需要完善技能元数据:
{ "name": "image-translator", "version": "1.0.0", "description": "基于Phi-3-vision的图片翻译技能", "tags": ["translation", "multimodal", "phi3"], "compatibility": { "openclaw": ">=1.2.0" } }执行发布命令:
clawhub publish --access-token your_token发布后约5分钟,技能就会出现在ClawHub市场。其他用户可以通过clawhub install image-translator直接安装。
5. 实际应用效果
在我的MacBook Pro上测试,翻译一张包含300个英文单词的技术图表平均耗时12秒(包括图片预处理和模型推理)。相比传统OCR+翻译的流程,节省了至少2分钟的手动操作时间。
目前发现的限制主要有:
- 复杂排版(如多栏文档)的格式保持不够理想
- 某些专业术语的翻译需要人工校对
- 超大图片(超过8MB)需要额外切割处理
这些都可以通过后续迭代优化。比如针对第三条,我计划在下个版本加入自动分块功能。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。