ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Agent 实战:OpenClaw + Hermes 实现无人值守任务自动化

AI Agent 实战:OpenClaw + Hermes 实现无人值守任务自动化 手机弹出一条消息我回了一段任务描述然后合上电脑。12 分钟后工作目录里多了一封 234 行的对照稿Agent 技能列表里多了一条从录屏里学来的操作 Skill邮件客户端里躺着一封只进草稿箱、没有发出去的周报。这不是科幻演示而是我自己部署 OpenClaw 和 Hermes 后把它们和 Grok Bot 放在同一批任务里做对照的真实测试结果。如果你也玩过 AI Agent会知道难点不在“聊天”而在“把零散任务拆成步骤、调用工具、安全落地”。Grok Bot 这类托管 Bot 开箱即用但无法访问我的服务器、收件箱和内部工作台。OpenClaw 负责任务编排和技能管理Hermes 负责本地推理和工具调用二者组合后才可能实现“合上电脑活照干”。这篇文章会从工具定位、部署、手机派活、录屏学活、自动生成对照稿到邮件草稿安全策略完整写一遍我的落地过程和踩坑记录。1. 先分清三种工具OpenClaw、Hermes 与 Grok Bot 的角色差异1.1 Agent 框架、本地模型和托管 Bot 不是同一种东西很多人第一次接触 AI Agent会把“模型”“框架”“Bot 产品”混为一谈。模型负责理解语言和生成文本框架负责把任务拆成步骤并调用工具Bot 产品是把模型、界面、对话历史和工具调用打包好的服务。这三层在架构上是可以拆开的实际部署时也建议拆开理解。OpenClaw 在这一组合中承担的是 Agent 编排层。它相当于一个常驻服务能接收来自 IM、Webhook、定时器的消息维护任务上下文加载 Skill调用外部命令和 API最后把结果写回文件或会话。OpenClaw 本身不一定包含很强的推理能力它更像“家务总管”知道什么活该找谁干、按什么顺序干、干完放哪里。Hermes 在我的环境里承担的是模型与执行层。它可以指本地部署的 Hermes 系列模型也可以指基于该模型封装的 Agent 执行器。实验中我通过 Ollama 拉起 Hermes 模型并使用它处理对照稿的框架生成、录屏关键步骤归纳和邮件草稿正文撰写。Hermes 负责“想”OpenClaw 负责“做”二者通过 HTTP 接口通信。Grok Bot 则作为外部托管 Bot 参与对照。它不用部署天然具备联网检索和对话生成能力缺点是权限边界受限于平台提供的 API不能直接操作我服务器上的文件、数据库和邮件客户端。把它放在对照组能看出“托管 Bot”和“自托管 Agent 本地模型”在真实任务中的差距到底在哪里。1.2 OpenClaw 的核心能力消息入口、Skill 和任务执行OpenClaw 的安装和配置在很多资料里被包装得很复杂但核心其实只有三件事配置消息入口让手机、IM、Webhook 可以把任务文本送进服务配置模型后端让 OpenClaw 有推理能力配置 Skill 目录让 OpenClaw 知道遇到某类任务时该调用哪些脚本、命令或 API。这里可以用一张表来理解三者的职责层次典型组件负责内容部署方式编排层OpenClaw消息接收、任务状态、Skill 调度自托管常驻进程模型层Hermes / Ollama文本生成、JSON 结构化输出、多模态理解本地或局域网服务器对照层Grok Bot对话、联网检索、内容生成托管服务消息层Bot API / Webhook手机到 Agent 的通道服务商提供接口Agent 侧做回调在这个结构里手机派活只是消息入口的一种形态。手机发消息IM 网关转成 WebhookOpenClaw 收到后把任务文本解析成 Job再交给 Skill 执行。真正干活的是 Skill不是模型本身。1.3 为什么需要本地模型 Hermes 而不是全部交给云端 API我选择 Hermes 作为实验模型主要有三个原因。第一任务指令里包含内部工作流信息例如服务器路径、邮件签名、内部系统操作步骤。把这些内容直接发给托管 Bot会出现数据落盘到第三方服务的问题。本地模型可以在数据不出内网的前提下完成推理。第二实验任务需要重复执行。录屏学活、生成对照稿、写邮件草稿这类任务每次只是内容不同流程都是一样的。本地模型跑起来之后API 调用成本比逐字计费的托管模型低也更容易做批量测试。第三OpenClaw 的 Skill 机制要求模型输出可解析的 JSON。本地模型可以和 OpenClaw 约定固定的响应格式出错时我能直接看日志改 Prompt调试链路更短。1.4 对照实验的公平性如何控制用 Grok Bot 和自托管的 OpenClaw Hermes 做对照不能直接拿“谁的文字好坏”做结论因为两个系统的上下文、工具权限和运行环境不同。我的做法是固定任务交付物只比较三件事交付物格式是否满足要求是否真正执行了任务所需的工具调用是否在无人值守状态下完成了从收到消息到产出文件的闭环。这样Grok Bot 可以证明模型本身能写出像样的内容OpenClaw Hermes 则证明在合上电脑之后任务还能被真正执行。二者不是替代关系而是互补关系。2. 部署自托管环境OpenClaw 与 Hermes 的最小可用组合2.1 环境准备先定服务器、目录和依赖我给这套实验准备的是一台 Linux 服务器2 核 4GB 内存起步磁盘 40GB。Ollama 加载 7B 量级模型时内存占用大概在 4GB 到 6GB 之间如果还要跑 Vision 模型抽帧理解建议内存调到 8GB 以上。操作系统以 Ubuntu 22.04 为例其他 Linux 发行版思路相同。目录规划上我把所有实验文件放在一个专用目录里mkdir -p /opt/agent/{openclaw,ollama,skills,logs,workspace} cd /opt/agent这里每个目录都有明确用途openclaw存放 OpenClaw 安装文件与配置ollama存放模型下载路径和临时缓存skills存放录屏生成的 Skill 和手动编写的 Skilllogs存放 OpenClaw 运行日志workspace任务产出文件统一写到这里。不要把所有文件丢在 root 家目录下。自托管 Agent 一旦开始使用真实文件路径和邮件配置目录混乱会直接导致后续排查困难。安装之前先确认 Python、Git、ffmpeg 已经存在python3 --version git --version ffmpeg -version如果缺少 ffmpeg录屏抽帧和视频预处理的步骤会卡住建议在部署阶段就装好sudo apt update sudo apt install -y python3 python3-venv git ffmpeg2.2 安装 OpenClaw 并完成初始化OpenClaw 的安装方式以项目仓库 README 为准。我这里给出的是常见模式先克隆仓库再执行安装脚本cd /opt/agent git clone openclaw 仓库地址 openclaw cd openclaw bash install.sh安装脚本会创建虚拟环境、安装 Python 依赖并生成一个示例配置文件。安装完成后先执行初始化命令让它生成默认目录和配置模板python3 -m openclaw init初始化完成后重点检查config.yaml是否生成。OpenClaw 服务本身不内置模型所以初始化后还不能直接使用必须先把 Hermes 模型接进来。2.3 用 Ollama 拉起 Hermes 本地模型Ollama 的安装命令直接从官网复制即可。装好后先拉取 Hermes 模型ollama pull hermes3确认模型已经能正常对话ollama run hermes3 用一句话介绍 Hermes 模型的能力如果输出正常说明本地模型已经可用。接着把 Ollama 的服务地址固定下来。默认 Ollama 监听127.0.0.1:11434如果 OpenClaw 和 Ollama 在同一台服务器可以保持不变。OpenClaw 调用 Ollama 时走的是 OpenAI 兼容接口所以模型后端地址一般写作http://127.0.0.1:11434/v12.4 把 Hermes 接入 OpenClaw打开 OpenClaw 的config.yaml找到模型配置段。不同版本的字段名可能不同核心参数如下model: provider: openai_compatible base_url: http://127.0.0.1:11434/v1 api_key: ollama model_name: hermes3 temperature: 0.2 max_tokens: 4096关键参数解释base_url是 OpenClaw 调用模型时使用的 API 地址api_key在 Ollama 本地模式下不会校验但字段不能留空temperature设置为 0.2是为了让结构化任务输出尽量稳定避免每次生成结果差异过大max_tokens根据任务文本长度调整生成 234 行对照稿时4096 一般够用。配置完成后启动 OpenClawpython3 -m openclaw start然后查看日志确认服务启动、模型连接成功tail -f /opt/agent/logs/openclaw.log如果日志里出现模型超时或 404先单独用 curl 测试 Ollama 接口curl http://127.0.0.1:11434/v1/chat/completions \ -H Content-Type: application/json \ -d {model:hermes3,messages:[{role:user,content:ping}]}这一步能迅速定位问题在模型服务还是 OpenClaw 配置。2.5 首次运行验证一个不需要工具的最简任务部署完成后的第一件事不是急着接手机而是先用命令行发一个简单任务验证链路python3 -m openclaw run 请生成一份开发环境检查清单输出到 workspace/checklist.md如果workspace/checklist.md正常生成说明 OpenClaw 的任务执行、模型推理、文件写入链路已经打通。这里有一个很容易踩的坑模型能回复不代表 Agent 能把回复写入文件。一定要验证到“文件真实出现”才算链路通。3. 手机派活把任务从 IM 送到 Agent3.1 为什么不用 SSH 而用手机消息“合上电脑活照干”的核心诉求是在我不坐在电脑前的时候任务仍然能进来、能执行、能产出结果。SSH 需要终端、密钥和持续连接而手机 IM 是我随身携带的交互入口。让 OpenClaw 接入一个消息网关后我只需要在手机上发一句话任务就会进入 OpenClaw 的任务队列。手机派活的工程本质是把 IM 消息转成 Webhook 请求OpenClaw 收到请求后解析出任务文本再按 Skill 规则执行。3.2 接入消息入口优先使用合规的 Bot 平台我建议优先使用企业微信自建应用、飞书自建应用或 Telegram Bot 这类有官方 API 的平台。不要使用非官方的个人微信协议这类方案既不稳定也有账号安全风险不适合作为生产型 Agent 的入口。以飞书自建应用为例配置逻辑是在开发者后台创建应用开启机器人能力配置事件订阅地址把事件回调地址指向 OpenClaw 暴露的 Webhook。OpenClaw 侧的配置大致如下channels: webhook: enabled: true path: /webhook/feishu token: 你的自定义校验 token这样飞书机器人收到消息后会通过事件订阅把 JSON 转发到 OpenClaw。OpenClaw 匹配到path后再经过 token 校验进入任务队列。3.3 配置用户白名单和命令前缀手机派活不代表任何人在群里发一句话Agent 都要执行。必须做两层限制。第一层OpenClaw 只响应配置了用户 ID 的请求authorization: enabled: true allow_users: - 你的飞书 user_id第二层任务指令需要带固定前缀避免误触发。例如agent 执行生成今日项目状态邮件草稿OpenClaw 收到消息后先判断用户是否在白名单再判断是否有执行前缀二者都满足才入队。这个设计能避免群聊里的闲聊被当作任务执行。3.4 任务队列与超时控制手机派活天然是异步任务。任务提交后OpenClaw 需要立即回执“任务已收到”然后真正进入执行。配置里要区分两个超时模型单次生成超时建议 120 秒整个任务执行超时如果是录屏学习这类长任务建议 1800 秒。配置示例task: queue_size: 20 max_execution_seconds: 1800 model_timeout_seconds: 120max_execution_seconds过短会导致录屏学习和长文档生成被中断。过长则会让异常任务一直占用资源所以要根据任务类型设置。3.5 验证手机到 Agent 的完整链路部署完成后我在手机上发了一条测试消息agent 执行检查 OpenClaw 服务状态并返回当前时间如果 Agent 返回了服务状态和时间说明手机、IM 网关、OpenClaw 的消息链路已经通了。此时不要急着测试大任务先跑小任务确认链路稳定再进入录屏学活。4. 录屏学活让 Agent 从录屏视频里生成 Skill4.1 什么是“录屏学活”给 Agent 看一段操作录屏让它理解“用户在哪个界面、点了什么、填了什么、最后得到什么结果”然后把操作步骤归纳成一个可复用的 Skill。这个流程叫“录屏学活”其实是多模态模型 Skill 生成机制的组合应用。它解决的核心问题是Agent 配置新技能时不一定需要人工手写脚本。只要操作路径是明确可复述的模型可以把录屏转成步骤文档和参数说明再由 OpenClaw 把文档注册成 Skill。4.2 录屏素材准备与格式要求录屏学活的效果很大程度取决于录屏素材质量。好的录屏应该满足操作步骤清晰每个动作之间有停顿涉及填写的表单字段尽量在画面上可见最后一步有明显的结果反馈比如页面跳转、成功提示、文件生成。我之前用手机录了一段在后台系统里创建项目分组的操作时长为 2 分 40 秒分辨率 1080p帧率 30fps。这个时长和清晰度足够模型理解但 2 分钟的视频如果直接丢给模型会导致上下文过大、响应变慢。4.3 用 ffmpeg 抽帧降低理解成本处理录屏的第一件事是抽帧。视频模型或视觉模型不需要连续帧每秒 1 到 2 帧即可还原大部分操作路径。先用 ffmpeg 抽帧mkdir -p /opt/agent/workspace/frames ffmpeg -i /opt/agent/workspace/demo.mp4 \ -vf fps1 \ /opt/agent/workspace/frames/frame_%03d.png抽帧之后按时间顺序生成一个文件列表方便让模型按顺序理解ls /opt/agent/workspace/frames/ | sort /opt/agent/workspace/frames/filelist.txt如果视频较长可以分成多个片段每个片段单独描述再由最终模型汇总。不要让单次请求的图片数量超过 15 张否则模型容易遗漏关键步骤。4.4 调用 Hermes 生成 Skill 的 Prompt 设计把抽帧后的图片和文件列表交给 Hermes 时Prompt 需要明确告诉模型四件事这是什么环境最终要得到什么结果输出的 Skill 应该包含哪些字段操作步骤必须按时间顺序排列。我使用的 Prompt 结构如下你是一名 Agent 技能生成器。下面提供了某后台系统的操作录屏帧。请按时间顺序识别操作步骤并输出一个 JSON 结构。 要求 1. skill_name 必须是小写下划线格式。 2. description 要说明该 Skill 的触发条件和用途。 3. steps 数组按时间顺序排列每步包含 action、target、value 三个字段。 4. 如果某个步骤是输入文本value 使用占位符 变量名。 开始分析 图片列表filelist.txt 内容为了避免模型把步骤写得过于笼统我还会在 Prompt 里追加一行判断步骤是否可执行不要用“用户点击按钮”这种描述要具体到按钮名称和页面位置。4.5 将 Skill 挂载到 OpenClaw 并测试Hermes 输出 JSON 后需要先交给一个脚本做格式校验再写入 Skill 目录。我用 Node.js 写的校验逻辑很简单const fs require(fs); const raw fs.readFileSync(/opt/agent/workspace/skill_raw.json, utf-8); const skill JSON.parse(raw); if (!skill.skill_name || !Array.isArray(skill.steps)) { console.error(skill 格式不合法); process.exit(1); } fs.writeFileSync( /opt/agent/skills/${skill.skill_name}.yaml, name: ${skill.skill_name}\ndescription: ${skill.description}\nsteps:\n skill.steps.map(s - action: ${s.action}\n target: ${s.target}\n value: ${s.value}).join(\n) );写入 YAML 后在 OpenClaw 的配置里把skills目录刷新就可以用手机发送“执行创建项目分组”来测试。如果 Agent 返回执行记录说明录屏学活链路已经可用。4.6 录屏学活最常见的三个坑第一个坑是视频太长直接把 MP4 传给模型导致请求超时。解决方法就是先抽帧必要时再缩短视频长度。第二个坑是模型把步骤顺序打乱。录屏学活的本质是时间线还原如果模型不按帧顺序分析生成的 Skill 会完全不可用。必须在 Prompt 里强调按 filelist 顺序并在输出后做顺序校验。第三个坑是录屏包含敏感信息。后台系统、邮箱界面、内部系统的录屏很可能包含账号、密码、客户数据。处理这类素材时一定要在本地模型上完成不能把录屏直接发给外部托管 Bot。5. 12 分钟生成 234 行对照稿一次完整无人值守任务5.1 任务需求Grok Bot、OpenClaw、Hermes 三方案对照这个任务的背景是我需要对三种 AI 工具做一个可复用的对比文档。如果手动写需要一边查资料一边整理格式至少半小时。而 Agent 的批量优势是只要把模板和来源资料准备好它可以快速生成一份结构完整的对照稿。我设计的需求如下输出文件名comparison.md行数目标200 行以上输出格式Markdown包含表格和结论内容范围Grok Bot、OpenClaw、Hermes 的定位、部署方式、适用场景、安全边界。5.2 把任务封装成 Skill而不是让模型自由发挥为了让任务可复现我没有直接给模型发一段长 Prompt而是把它封装成create_comparison_doc这个 Skill。Skill 的 YAML 结构如下name: create_comparison_doc description: 生成三个 Agent 工具的对比文档 inputs: - name: topic description: 对比主题 required: true - name: length description: 期望输出行数 required: false steps: - action: call_model prompt_template: | 请生成一份关于 {topic} 的对照稿。 要求 - 使用 Markdown 格式 - 包含适用场景、部署方式、安全边界三个维度 - 每个维度都要有具体对比点不能只写结论 - 输出到文件 workspace/{topic}_comparison.md。 output_file: workspace/{topic}_comparison.mdSkill 的好处是手机派活时只需要说agent 执行生成一份 OpenClaw、Hermes、Grok Bot 的对照稿OpenClaw 会自动匹配create_comparison_doc把topic解析为openclaw_hermes_grokbot然后执行对应步骤。这样任务描述变得非常短执行路径变得稳定。5.3 手机派活到文件落地的执行链路这次实测中我在手机上发送任务后OpenClaw 的执行链路是这样的收到 Webhook 消息校验用户白名单和命令前缀匹配 Skillcreate_comparison_doc调用 Hermes 模型生成 Markdown 内容模型输出后OpenClaw 将内容写入workspace/comparison.md任务完成后通过消息网关回传文件路径和耗时。整条链路不需要我打开电脑也没有任何人工干预。最终系统日志显示任务总耗时为 11 分 48 秒交付文件为 234 行 Markdown。这 12 分钟里模型生成时间占了大多数文件写入和回执时间很短。5.4 234 行是怎么构成的对一篇技术对照稿来说234 行并不算多。它的行数拆分大致如下内容块行数标题与背景说明18三工具定位与定义42部署方式对比表28适用场景对比表30安全边界分析56选型建议36代码与配置片段16结尾与检查清单8行数本身不是质量指标重要的是每个段落都有可验证的信息点。如果模型只是写了“各有优势”这类空话即使 1000 行也没有价值。我的检查方式是逐段看表格内容确认每一条对比都有明确的用途和边界。5.5 如何判断这份对照稿能不能直接使用我拿到comparison.md之后会按三个维度验收结构完整性是否包含部署、场景、安全边界三个章节事实准确性是否写明了 OpenClaw 是编排层、Hermes 是模型层、Grok Bot 是托管 Bot操作可用性结论部分是否给出了可执行的选型建议。如果某一段缺失我不会让 Agent 重写全文而是让它只补写缺失章节agent 执行补全 comparison.md 中的安全边界章节并在原文件追加内容这样做既保留原有内容又让修正范围最小。生产型 Agent 的“迭代修正”比“一次生成”更重要。6. 邮件只能进草稿箱权限隔离与安全护栏6.1 为什么默认只允许草稿而不是直接发信AI Agent 一旦接入邮件系统最大的风险不是生成不了邮件而是生成后直接发送出去。邮件是不可撤回的通信方式发错收件人、发错内容、附带错误附件后果都很难处理。所以我的默认策略是无论 Agent 生成什么邮件都只保存到草稿箱绝不自动发送。发送动作必须由人工在邮件客户端里确认后触发。这个约束要在 Skill 和邮件脚本两层同时生效。6.2 邮件配置SMTP、IMAP 和草稿箱标识OpenClaw 本身不处理邮件协议通常由 Skill 调用一个脚本完成。脚本需要三类信息SMTP 服务器地址和端口用于建立连接IMAP 或 Exchange 地址用于写入草稿箱账号认证信息使用应用专用密码或 OAuth Token。以下是一个 Python 脚本的草稿写入逻辑使用 SMTP 连接但不调用sendmail而是把邮件保存为草稿import smtplib from email.message import EmailMessage msg EmailMessage() msg[Subject] 项目状态周报 msg[From] agentexample.com msg[To] [teamexample.com] msg.set_content(这是由 Agent 生成的邮件草稿请人工确认后再发送。) # 只建立连接校验账号权限不发送 with smtplib.SMTP_SSL(smtp.example.com, 465) as server: server.login(agentexample.com, 应用专用密码) # 这里不调用 send_message只做连接测试 server.noop()这段代码最关键的地方是它只做连接和登录验证不调用发送方法。真正把草稿写进邮箱需要通过 IMAP 协议追加到Drafts文件夹。6.3 把草稿写入 IMAP Drafts 文件夹如果 SMTP 只负责验证写草稿需要单独处理。下面是使用 IMAP 追加草稿的示例import imaplib import time imap imaplib.IMAP4_SSL(imap.example.com, 993) imap.login(agentexample.com, 应用专用密码) draft msg.as_string().encode(utf-8) imap.append(Drafts, \\Draft, imaplib.Time2Internaldate(time.time()), draft) imap.logout()注意Drafts文件夹名称在不同邮件服务商下可能不同常见的是Drafts、INBOX.Drafts、草稿箱。脚本里可以通过列出文件夹来确认名称status, folders imap.list() print(folders)如果脚本找不到草稿箱目录先看返回的文件夹列表再调整路径字符串。6.4 在 OpenClaw Skill 里限制邮件动作即使脚本写得安全如果 Skill 允许用户传一个send: true参数风险依然存在。我在 Skill 配置里直接删除了发送相关动作只保留草稿相关动作name: send_email_draft description: 生成邮件草稿并保存到邮箱草稿箱不允许直接发送 steps: - action: run_script script: scripts/save_draft.py args: to: {to} subject: {subject} body: {body}同时在 OpenClaw 的权限配置里把邮件发送命令加入黑名单commands: blocked: - sendmail - mail send - smtp.send_message这层限制是为了防止模型在生成长邮件时自行调用系统命令把邮件发出去。只要黑名单存在即使模型输出了错误指令也不会执行成功。6.5 验证草稿是否真的没有发送任务完成后我需要确认两件事草稿箱里确实出现了邮件收件人没有收到任何邮件。验证方法是登录邮件客户端进入草稿箱查看同时检查发件箱或已发送目录确认为空。更严谨的做法是在 IMAP 账号里单独建一个规则把 Agent 生成的所有邮件标记为\Draft并关闭任何自动发送的规则。如果邮件服务商有 API也可以查询发送记录。生产环境建议每次邮件类任务结束后由另一个监控任务读取邮件 API 的发送日志一旦发现非人工发送记录就立刻告警。7. 常见问题与排查链路7.1 OpenClaw 安装后启动失败现象执行启动命令后进程立即退出日志里出现ModuleNotFoundError或Address already in use。可能原因和排查问题现象常见原因检查方式处理建议ModuleNotFoundError虚拟环境未激活或依赖未装全查看完整堆栈确认依赖包名重新执行 install.sh 或 pip install 依赖Address already in use端口被占用ss -lntpgrep 端口Config file missing未执行 init检查配置文件是否生成执行python3 -m openclaw init排查顺序先从依赖开始再看端口再看配置。不要一上来就重装系统。7.2 手机消息收不到 Agent 回执现象手机 IM 群里发送任务后没有收到“任务已收到”的回复。可能原因有三个Webhook 地址没有暴露到公网或者内网穿透策略失效校验 token 和 OpenClaw 配置不一致用户 ID 不在白名单。检查方式是在 IM 开发者后台查看事件回调日志确认请求是否到达。如果请求已经到达再看 OpenClaw 日志是否打印了 token 校验失败。解决方法是逐层定位先看 IM 后台再看 OpenClaw 入口日志最后看消息队列。7.3 Hermes 返回内容不是合法 JSON现象Skill 执行中模型返回了一段解释性文字而不是 JSON导致后续解析失败。解决方式是两层处理。第一层在 Prompt 里要求输出严格 JSON并给出示例。第二层在后处理脚本里加入 JSON 解析容错去掉 Markdown 代码块标记再解析import json import re raw model_output.strip() raw re.sub(r^json|$, , raw, flagsre.MULTILINE).strip() data json.loads(raw)如果仍然失败检查模型上下文是否太长或者温度是否设置过高。结构化任务建议温度保持在 0.2 以下。7.4 录屏文件太大导致任务超时现象手机派发“学习录屏”任务后运行一段时间后超时OpenClaw 日志显示max_execution_seconds超限。处理方式是把录屏文件尽量变小。先降低分辨率再降低帧率最后抽帧ffmpeg -i input.mp4 -vf scale1280:-1,fps5 output.mp4如果这样还超过模型上下文就把 5 分钟的视频拆成 3 段每段单独生成 Skill 片段最后再合并。不要试图用一次请求处理超长视频。7.5 邮件技能执行成功但草稿箱为空现象日志显示保存草稿成功IMAP 已连接但客户端草稿箱看不到邮件。这通常是因为草稿箱路径不对。不同邮件服务商的 IMAP 文件夹名称不同。先打印文件夹列表确认草稿箱名称。其次检查 IMAP 追加时使用的 flags 是否正确如果 flags 不是\\Draft邮件可能被追加到普通文件夹。7.6 排错顺序总结遇到自托管 Agent 问题我一般按这个顺序排查输入是否正确任务文本是否被正确解析文件路径和命名是否正确Skill 和产出目录是否存在依赖是否安装Python 包、ffmpeg、系统库配置是否生效模型地址、白名单、命令黑名单权限是否足够文件写权限、IMAP 登录、SMTP 端口日志是否有明确异常OpenClaw 日志、Ollama 日志、邮件脚本日志最后才怀疑模型本身能力不足。大多数问题都不是模型“不够聪明”而是链路某一环配置错了。8. 最佳实践合上电脑前要完成的检查清单8.1 无人值守运行检查清单每次让 Agent 合上电脑继续干活之前我会先过一遍这个清单[ ] OpenClaw 服务是否以 systemd 或 supervisor 方式常驻而不是挂在前台终端[ ] 模型服务Ollama是否设置开机自启[ ] 关键路径是否存在写权限workspace、logs、skills是否可写[ ] 手机消息入口是否能正常访问 Webhook[ ] 任务最大执行时间是否覆盖最长任务[ ] 邮件类任务是否只配置了草稿保存没有发送权限。这条清单的价值在于合上电脑前 5 分钟检查一次能避免人离开后任务卡在“模型起不来”“目录不存在”这种低级问题上。8.2 安全边界最小权限原则自托管 Agent 的权限一定不要给满。我的原则是Agent 只能写workspace和logs不能写系统目录邮件账号使用应用专用密码并限制只能访问邮件 API数据库和核心业务系统Agent 只通过只读账号访问危险命令如rm、sendmail、drop table默认加入黑名单任何自动发送动作必须由人工二次确认。生产环境里权限控制不是一项可选配置而是 Agent 能否上线的前提。8.3 日志与可观测性无人值守任务最怕“静默失败”。任务明明没执行成功但没有任何告警人会误以为已经完成。我的做法是每个任务结束后写一条 JSON 日志包含任务 ID、耗时、输出文件、错误信息超过 30 分钟的任务主动推送一条进度消息到手机失败任务自动重试最多两次重试仍失败则进入待人工处理队列。没有日志的 Agent 等于没有仪表盘的飞机飞起来不可怕降不下去才可怕。8.4 模型选型与后续扩展本文实验中我用 Hermes 完成推理但生产环境完全可以根据任务类型切换模型结构化文档生成优先本地 7B 到 14B 模型速度快、成本低复杂任务拆解可以接入更强云端模型但要注意数据边界录屏理解需要视觉能力建议单独部署一个支持图像输入的模型服务。下一步可以在 OpenClaw 里加入定时器让 Agent 每天早上自动生成工作日志草稿、每周五自动汇总版本发布清单。只要消息入口、Skill、模型、权限四个部分都稳定合上电脑活照干就不再是演示功能而是一种可以长期运行的工作方式。真正的边界不在模型会不会生成内容而在你敢不敢让它在没有人工盯着的时候执行文件操作、访问邮件、调用内部系统。建议先从“只生成文件草稿”开始把每一条 Skill 的权限边界都写清楚跑熟后再逐步放开更复杂的操作。
返回列表