Qwen3-VL:30B多场景应用飞书OKR群自动解析目标截图生成执行计划与关键结果追踪你是不是也遇到过这种情况团队群里有人发了一张OKR表格的截图大家七嘴八舌地讨论但具体谁负责什么、下一步该做什么总是理不清楚。或者你作为管理者每周都要手动整理各个部门的OKR进展耗时费力还容易出错。今天我就带你用最强的多模态大模型Qwen3-VL:30B结合Clawdbot打造一个能“看懂”图片、自动分析OKR、生成执行计划的飞书智能助手。整个过程在CSDN星图AI云平台上完成从零开始手把手教你搭建。1. 为什么需要智能OKR助手在开始技术细节之前我们先聊聊这个项目能解决什么实际问题。1.1 传统OKR管理的痛点我见过太多团队在使用OKR时陷入这样的困境信息碎片化OKR可能写在文档里、表格里甚至只是会议白板的照片分散在各个地方。沟通成本高每次同步进展都需要人工整理、解读占用大量会议时间。追踪困难关键结果KR的完成度难以量化跟踪经常到最后才发现偏离目标。新人上手慢新加入的成员需要花很长时间才能理解当前的OKR全貌和执行状态。1.2 智能助手的价值我们构建的这个智能助手核心价值就三点自动识别直接“看懂”OKR截图提取文字和结构信息智能解析理解O目标和KR关键结果的逻辑关系自动生成根据解析结果生成可执行的任务计划和追踪模板想象一下这样的场景你在飞书群里发一张OKR截图一下机器人它马上就能回复“已识别出3个目标12个关键结果。建议的执行计划如下...”并且自动创建一个追踪表格。2. 环境准备在星图平台部署Qwen3-VL:30B2.1 选择适合的镜像Qwen3-VL:30B是目前开源多模态模型中的佼佼者既能处理文本又能理解图像内容。但它的参数量大需要足够的算力支持。在CSDN星图AI云平台我们可以直接使用预置的镜像省去复杂的环境配置。操作步骤登录星图AI平台进入“镜像市场”在搜索框输入Qwen3-vl:30b选择官方提供的镜像版本配置建议GPU显存至少48GB平台会默认推荐合适配置系统盘50GB以上内存240GB对于OKR解析这种任务30B版本在精度和速度上能达到很好的平衡。如果只是做简单的文字识别可以用小一点的模型但我们要的是“理解”而不仅仅是“识别”。2.2 一键部署与验证选择好镜像后直接点击“创建实例”。星图平台会自动配置好所有依赖环境包括Ollama服务。验证服务是否正常实例启动后在控制台找到“Ollama控制台”的快捷入口点击进入Web界面。在Web界面里你可以先简单测试一下上传一张图片问它图片里有什么输入一些文本看回复是否正常如果Web界面工作正常说明模型服务已经跑起来了。2.3 本地API测试虽然Web界面能用但我们后续需要通过API调用来集成。星图平台为每个实例提供了公网访问地址我们可以在本地用Python测试一下。from openai import OpenAI # 注意这里的base_url需要替换成你实例的实际地址 # 格式通常是https://你的实例ID-11434.web.gpu.csdn.net/v1 client OpenAI( base_urlhttps://gpu-pod697b0f1855ba5839425df6ea-11434.web.gpu.csdn.net/v1, api_keyollama # Ollama默认的API key ) try: # 先测试文本对话 response client.chat.completions.create( modelqwen3-vl:30b, messages[{role: user, content: 简单介绍一下OKR管理方法}] ) print(文本测试通过模型回复) print(response.choices[0].message.content[:200] ...) # 只打印前200字符 # 如果要测试图片需要准备图片的base64编码 # 这里先跳过后续在完整项目里演示 except Exception as e: print(f连接失败{e}) print(请检查) print(1. 实例是否正常运行) print(2. 端口11434是否开放) print(3. base_url地址是否正确)运行这个脚本如果能看到模型关于OKR的介绍说明API连接成功。3. 搭建Clawdbot连接模型与飞书的桥梁3.1 什么是ClawdbotClawdbot是一个开源的聊天机器人框架它最大的特点是“可插拔”——你可以轻松地接入不同的AI模型、不同的消息平台飞书、钉钉、微信等。在我们的项目里Clawdbot扮演这样的角色接收端接收飞书群里的消息和图片调度中心把用户请求转发给Qwen3-VL模型返回端把模型生成的结果发回飞书群3.2 安装Clawdbot星图平台已经预装了Node.js环境我们直接用npm安装# 全局安装Clawdbot npm i -g clawdbot # 验证安装是否成功 clawdbot --version安装过程大概1-2分钟取决于网络速度。如果遇到下载慢的问题可以配置国内的npm镜像源。3.3 初始化配置第一次使用Clawdbot需要运行初始化向导clawdbot onboard这个向导会带你完成基本配置。对于我们的项目有几个关键选择部署模式选择“Local”本地部署AI提供商先跳过我们后面手动配置消息平台先跳过后续在Web界面配置高级功能都选“Skip”保持简单向导完成后会在你的家目录下生成~/.clawdbot/clawdbot.json配置文件。3.4 启动服务并访问控制面板启动Clawdbot的网关服务clawdbot gateway服务启动后默认监听18789端口。在星图平台我们需要通过公网地址访问你的实例地址https://gpu-pod697b0f1855ba5839425df6ea-8888.web.gpu.csdn.net/ Clawdbot面板https://gpu-pod697b0f1855ba5839425df6ea-18789.web.gpu.csdn.net/注意把端口从8888改成18789。第一次访问可能会看到空白页面这是因为需要一些额外配置。4. 解决常见问题与配置优化4.1 解决控制面板空白问题如果你访问控制面板看到空白页面通常是网络配置问题。Clawdbot默认只允许本地访问我们需要修改配置。修改配置文件vim ~/.clawdbot/clawdbot.json找到gateway部分修改这几个关键配置gateway: { mode: local, bind: lan, // 把loopback改成lan允许局域网访问 port: 18789, auth: { mode: token, token: csdn // 设置一个访问密码自己记住 }, trustedProxies: [0.0.0.0/0], // 信任所有代理 controlUi: { enabled: true, allowInsecureAuth: true } }修改后重启Clawdbot服务# 先按CtrlC停止当前服务 # 重新启动 clawdbot gateway现在刷新页面应该能看到登录界面了。输入刚才设置的token比如csdn就能进入。4.2 配置模型连接这是最关键的一步让Clawdbot使用我们部署的Qwen3-VL:30B模型。继续编辑配置文件在models.providers部分添加我们的Ollama服务models: { providers: { my-ollama: { baseUrl: http://127.0.0.1:11434/v1, apiKey: ollama, api: openai-completions, models: [ { id: qwen3-vl:30b, name: 本地Qwen3-VL 30B, contextWindow: 32000 } ] } } }然后在agents.defaults中指定默认使用这个模型agents: { defaults: { model: { primary: my-ollama/qwen3-vl:30b } } }4.3 测试模型集成配置完成后重启Clawdbot服务然后打开控制面板的Chat页面。发送一条测试消息比如“你好请介绍一下你自己”。同时打开一个新的终端窗口运行watch nvidia-smi这个命令会实时显示GPU的使用情况。当你发送消息时应该能看到GPU显存使用量上升说明模型正在工作。在Chat界面你应该能看到模型的回复。如果一切正常恭喜你Clawdbot已经成功连接到了Qwen3-VL:30B模型。5. 开发OKR解析技能现在到了最核心的部分让AI能够理解OKR截图并生成执行计划。5.1 理解OKR的结构在写代码之前我们要先明确OKR的典型结构OObjective目标通常是定性描述如“提升产品用户体验”KRKey Results关键结果必须是可量化的如“用户满意度评分从3.5提升到4.2”责任人谁负责这个KR时间节点什么时候完成进度当前完成百分比我们的AI需要从图片中提取这些信息并理解它们之间的关系。5.2 创建技能文件在Clawdbot中功能通过“技能”Skills来实现。我们在项目目录下创建一个新的技能mkdir -p ~/okr-assistant/skills cd ~/okr-assistant/skills创建okr-parser.js文件// okr-parser.js - OKR解析与计划生成技能 export const name okr-parser; export const description 解析OKR截图并生成执行计划; // 技能触发关键词 export const triggers [ 解析okr, 分析目标, okr分析, 生成执行计划 ]; // 主要处理函数 export async function handle(input, context) { const { message, attachments } input; // 检查是否有图片附件 const images attachments?.filter(att att.type image || att.contentType?.startsWith(image/) ); if (!images || images.length 0) { return { text: 请发送OKR表格的截图我会帮您解析并生成执行计划。, suggestions: [你可以发送OKR的截图给我] }; } // 获取最新的一张图片 const latestImage images[images.length - 1]; try { // 第一步让模型描述图片内容 const imageDescription await analyzeImage(latestImage.url, context); // 第二步提取结构化信息 const okrData await extractOKRStructure(imageDescription, context); // 第三步生成执行计划 const actionPlan await generateActionPlan(okrData, context); // 第四步生成追踪模板 const trackingTemplate generateTrackingTemplate(okrData); return { text: formatResponse(okrData, actionPlan, trackingTemplate), format: markdown // 使用markdown格式让回复更美观 }; } catch (error) { console.error(OKR解析失败:, error); return { text: 解析过程中出现错误${error.message}\n请确保图片清晰包含完整的OKR表格。 }; } } // 分析图片内容 async function analyzeImage(imageUrl, context) { const response await context.models.generate({ model: my-ollama/qwen3-vl:30b, messages: [ { role: user, content: [ { type: text, text: 请详细描述这张图片中的表格内容。包括所有的文字、数字、以及表格的结构。如果有多张表格请分别描述。 }, { type: image_url, image_url: { url: imageUrl } } ] } ], max_tokens: 2000 }); return response.content; } // 从描述中提取OKR结构 async function extractOKRStructure(description, context) { const prompt 你是一个OKR管理专家。请从以下文本描述中提取OKR信息 ${description} 请按照以下JSON格式输出 { objectives: [ { name: 目标名称, description: 目标描述, keyResults: [ { name: 关键结果名称, metric: 衡量指标, target: 目标值, current: 当前值, owner: 责任人, deadline: 截止时间, progress: 进度百分比 } ] } ], summary: { totalObjectives: 目标总数, totalKeyResults: 关键结果总数, timeframe: 时间范围 } } 只输出JSON不要有其他文字。 ; const response await context.models.generate({ model: my-ollama/qwen3-vl:30b, messages: [{ role: user, content: prompt }], max_tokens: 3000 }); try { return JSON.parse(response.content); } catch (error) { // 如果JSON解析失败尝试清理后重试 const cleaned response.content.replace(/json\n?|\n?/g, ).trim(); return JSON.parse(cleaned); } } // 生成执行计划 async function generateActionPlan(okrData, context) { const prompt 基于以下OKR数据为每个关键结果生成具体的执行计划 ${JSON.stringify(okrData, null, 2)} 对于每个关键结果请提供 1. 3-5个具体的行动项 2. 每个行动项的负责人如果未指定请建议 3. 预计完成时间 4. 所需的资源支持 5. 潜在的风险和应对措施 请用清晰的结构输出便于团队执行。 ; const response await context.models.generate({ model: my-ollama/qwen3-vl:30b, messages: [{ role: user, content: prompt }], max_tokens: 4000 }); return response.content; } // 生成追踪模板 function generateTrackingTemplate(okrData) { let template # OKR执行追踪表\n\n; okrData.objectives.forEach((objective, idx) { template ## 目标${idx 1}: ${objective.name}\n; template ${objective.description}\n\n; template | 关键结果 | 责任人 | 截止时间 | 当前进度 | 状态 | 备注 |\n; template |----------|--------|----------|----------|------|------|\n; objective.keyResults.forEach(kr { const status kr.progress 100 ? ✅ 已完成 : kr.progress 70 ? 进行中 : kr.progress 30 ? 已开始 : 未开始; template | ${kr.name} | ${kr.owner || 待分配} | ${kr.deadline || 待确定} | ${kr.progress || 0}% | ${status} | |\n; }); template \n; }); return template; } // 格式化最终回复 function formatResponse(okrData, actionPlan, trackingTemplate) { return ## OKR解析完成 ### 概览 - **目标数量**: ${okrData.summary.totalObjectives} - **关键结果数量**: ${okrData.summary.totalKeyResults} - **时间范围**: ${okrData.summary.timeframe} ### 识别到的目标 ${okrData.objectives.map((obj, i) ${i 1}. **${obj.name}**\n ${obj.description} ).join(\n\n)} ### 执行计划建议 ${actionPlan} ### 追踪模板可直接复制使用 \\\markdown ${trackingTemplate} \\\ ### 使用建议 1. 将上面的追踪模板复制到团队文档中 2. 每周更新一次进度 3. 遇到阻塞及时在群内同步 4. 每月回顾OKR完成情况 需要我帮忙调整任何内容请随时告诉我 ; }这个技能文件做了几件事检查用户是否发送了图片用Qwen3-VL模型分析图片内容提取结构化的OKR信息生成具体的执行计划创建追踪模板5.3 注册技能到Clawdbot创建技能配置文件package.json{ name: okr-assistant-skill, version: 1.0.0, description: OKR解析与执行计划生成助手, main: okr-parser.js, clawdbot: { skills: [okr-parser] } }然后在Clawdbot控制面板中启用这个技能进入控制面板的Skills页面点击Add Skill选择Local Path指向~/okr-assistant/skills目录点击启用6. 测试OKR解析功能现在我们可以测试整个流程了。为了模拟飞书环境我们先在Clawdbot的Chat界面测试。6.1 准备测试图片找一张OKR表格的截图或者自己制作一个简单的OKR表格截图。内容可以像这样2024年Q2产品团队OKR 目标1提升用户活跃度 KR1日活跃用户从10万提升到15万负责人张三进度30% KR2用户平均使用时长从15分钟提升到25分钟负责人李四进度10% 目标2优化产品性能 KR1应用启动时间从3秒降低到1.5秒负责人王五进度60% KR2崩溃率从0.5%降低到0.1%负责人赵六进度40%把这张图片保存下来准备上传测试。6.2 在Chat界面测试在Clawdbot的Chat界面上传OKR截图输入“请解析这个OKR并生成执行计划”等待AI处理你应该能看到这样的回复首先确认收到了图片然后显示“正在分析图片内容...”最后输出完整的解析结果包括识别到的目标和关键结果具体的执行计划建议可复制的追踪模板6.3 验证解析准确性检查AI的输出是否准确是否正确识别了所有目标关键结果的指标和目标值提取是否正确责任人和进度信息是否准确生成的执行计划是否具体可行如果发现识别错误可能是图片不够清晰或者表格格式太复杂。可以尝试使用更清晰的截图调整图片大小和对比度在发送时添加更明确的指令如“请重点识别表格中的数字和百分比”7. 性能优化与实用技巧7.1 提高识别准确率在实际使用中可能会遇到识别不准的情况。这里有几个实用技巧优化提示词// 在analyzeImage函数中使用更具体的提示词 const prompt 请仔细分析这张OKR表格图片提取以下信息 1. 所有目标Objective的名称和描述 2. 每个目标对应的关键结果Key Results 3. 每个关键结果的指标名称、目标值、当前值、责任人、截止时间、进度百分比 4. 如果有时间范围如Q2 2024也请提取 请确保数字和百分比的准确性。如果某些信息缺失请标注为未提供。;图片预处理建议确保截图清晰文字可读避免复杂的背景干扰如果表格很大可以分段截图分别解析7.2 处理大表格和复杂格式对于特别大的OKR表格可以分段处理// 分段处理大图片 async function processLargeOKR(imageUrl, context) { // 第一步让模型先看整体结构 const overview await context.models.generate({ model: my-ollama/qwen3-vl:30b, messages: [{ role: user, content: [ { type: text, text: 这张OKR表格大概有多少行多少列主要有哪些部分 }, { type: image_url, image_url: { url: imageUrl } } ] }] }); // 根据整体情况决定如何处理 // 如果表格很大可以提示用户分段截图 // 或者让模型分部分描述 }7.3 添加缓存机制为了避免重复解析相同的OKR图片可以添加简单的缓存// 简单的内存缓存 const cache new Map(); async function analyzeImageWithCache(imageUrl, context) { const cacheKey image_${imageUrl}; if (cache.has(cacheKey)) { return cache.get(cacheKey); } const result await analyzeImage(imageUrl, context); cache.set(cacheKey, result); // 设置缓存过期时间1小时 setTimeout(() cache.delete(cacheKey), 60 * 60 * 1000); return result; }8. 总结与下一步到现在为止我们已经完成了8.1 本阶段成果环境搭建在星图平台成功部署Qwen3-VL:30B多模态大模型服务集成配置Clawdbot连接本地模型服务技能开发创建了OKR解析与执行计划生成技能功能测试验证了从图片识别到计划生成的全流程这个智能助手现在已经能够自动识别OKR截图中的文字和表格结构理解目标与关键结果的逻辑关系生成具体的执行计划建议提供可复制的进度追踪模板8.2 实际应用价值在实际团队协作中这个工具可以对于管理者快速收集和整理各部门OKR自动生成统一的追踪模板实时了解整体进展对于执行者明确自己的任务和责任获得具体的行动建议减少手动整理的时间对于团队统一OKR格式和进度同步方式减少沟通成本提高目标管理的透明度8.3 遇到的挑战与解决方案在开发过程中你可能会遇到挑战1图片识别准确率解决方案优化提示词要求模型重点关注表格结构和数字信息备用方案如果识别不准可以让用户确认或手动修正挑战2响应速度解决方案Qwen3-VL:30B模型较大首次加载需要时间。可以考虑使用模型预热提前加载对于简单查询使用小模型快速响应异步处理先回复“正在处理”完成后通知挑战3复杂表格处理解决方案分步骤处理先识别结构再提取内容用户引导建议用户提供清晰、规范的截图8.4 下篇预告在下一篇教程中我们将完成最后的关键步骤飞书平台接入将Clawdbot连接到飞书实现真正的群聊交互环境持久化打包整个环境发布到星图镜像市场高级功能扩展添加进度自动更新、风险预警等智能功能多团队支持让一个机器人服务多个飞书群组通过这个完整的项目你不仅学会了如何部署大模型更重要的是掌握了如何将AI能力应用到实际工作场景中解决真实的业务问题。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。