OpenClaw 实操指南 33|豆包 Seedream 接入与图片能力打通指南
为什么你的 Agent 需要“眼睛”?
在之前的实操系列中,我们已经让 OpenClaw 具备了强大的文本处理能力:从微信公众号的自动写稿,到小红书笔记的合规生成,再到飞书多维表格的数据流转。但对于内容创作者而言,纯文本的产出往往只是完成了工作的一半。在这个“读图时代”,一篇没有配图的文章就像是一顿没有摆盘的晚餐,哪怕味道再好,也难以第一时间抓住读者的眼球。
很多开发者在使用 OpenClaw 时面临一个痛点:大模型擅长写代码、写文案,但原生的文本模型(如早期的 GPT-3.5 或纯文本版的豆包)无法直接生成图片。以往的做法往往是“人工割裂”——先在对话框让 AI 写文案,再复制提示词去专门的绘图工具生成图片,最后手动拼凑。这种流程不仅打断了心流,更无法实现真正的自动化闭环。
引入多模态能力,特别是像豆包 Seedream 这样具备高质量中文理解与绘图能力的模型,是打破这一瓶颈的关键。它不仅能根据文字描述直接生成符合语境的插图,还能对已有图片进行风格迁移或细节重绘。本文将带你实战打通 OpenClaw 与豆包 Seedream 的连接,利用 Coze 平台作为桥梁,解决本地 Gateway 与云端服务的通信难题,最终实现“一句话指令,图文同步交付”的自动化工作流。
架构拆解:Coze 为何是最佳中转站?
在着手配置之前,我们需要理清技术链路。OpenClaw 作为一个运行在本地的 AI Agent 框架,其核心优势在于数据隐私与本地文件系统的控制权;而豆包 Seedream 作为字节跳动旗下的多模态大模型,拥有强大的云端算力与绘图引擎。两者直接对接存在协议差异与网络隔离的问题。
这里我们引入 Coze(扣子) 作为中间件,并非多此一举,而是工程上的最优解。
首先,协议标准化。OpenClaw 原生支持 Webhook 和标准的 HTTP 请求,而 Coze 提供了可视化的“对话流”编排能力,可以将复杂的 Seedream API 调用封装成简单的 HTTP 节点。你无需在本地编写复杂的 Python 脚本来处理鉴权、参数拼接和错误重试,只需在 Coze 上拖拽即可完成逻辑编排。
其次,上下文管理。Coze 的智能体具备记忆功能,可以维护多轮对话的上下文。当你在微信中对 OpenClaw 说“把刚才那张图的风格改成赛博朋克”时,Coze 能准确识别“刚才那张图”指代的是哪一次生成的任务 ID,从而精准调用重绘接口,而不是重新随机生成。
最后,生态兼容性。通过 Coze 发布的服务天然具备公网回调能力(或通过简单的内网穿透即可暴露),完美解决了本地 OpenClaw Gateway 处于内网、无法直接被云端模型回调的技术卡点。
整个数据流向非常清晰:微信用户指令 → OpenClaw 本地 Gateway → Coze 智能体 (HTTP 触发) → 豆包 Seedream 绘图引擎 → 图片 URL 回传 → OpenClaw 技能处理 → 微信端展示。
第一步:在 Coze 搭建“绘图桥梁”
登录 Coze 开发者平台(https://www.coze.cn/),我们开始构建专属的绘图智能体。
1. 创建智能体与选择模型
点击“创建 Bot",命名为"OpenClaw-Seedream-Bridge"。在模型选择环节,务必切换到 “豆包角色扮演模型” 或直接选择 Seedream 相关的基础模型。注意,不要选择纯文本模型,否则后续无法调用绘图插件。
在“插件”或“工具”栏中,搜索并添加 "AI 绘画” 或 “Image Generation” 类插件。字节系通常内置了基于 Seedream 的绘图工具,支持文生图(Text-to-Image)和图生图(Image-to-Image)。如果官方插件不满足需求,也可以在工作流中直接调用豆包的开放 API。
2. 编排对话流(Workflow)
这是最关键的一步。进入“工作流”编辑页面,我们需要设计一个能接收 OpenClaw 指令并返回图片链接的流程。
- 开始节点:定义输入变量,至少包含
prompt(绘图提示词)和session_id(用于区分会话)。 - 大模型节点:连接一个 LLM 节点,作用是对用户输入的简短指令进行“提示词优化”。例如,用户输入“一只猫”,LLM 将其扩写为“一只可爱的橘猫,坐在窗台上,阳光洒在身上,高分辨率,摄影风格”。这一步能显著提升 Seedream 的出图质量。
- 绘图工具节点:将优化后的提示词传入绘图插件。设置好图片比例(如 16:9 适合公众号封面,1:1 适合朋友圈)、分辨率等参数。
- 结束节点:输出绘图工具返回的
image_url。确保输出格式为 JSON,方便 OpenClaw 解析。
配置完成后,点击右上角“发布”,选择发布到"API"或"Bot",并记下生成的 Bot ID 和 Personal Access Token。
第二步:打通本地与公网的“任督二脉”
OpenClaw 运行在你的本地电脑或局域网服务器上,而 Coze 在公网。为了让 Coze 的工作流能被 OpenClaw 触发,或者让 OpenClaw 能主动调用 Coze,我们需要解决网络连通性问题。
方案 A:OpenClaw 主动调用(推荐)
这是最稳定的方式。OpenClaw 作为客户端,主动向 Coze 的 API 发起 HTTP 请求。这种方式不需要将本地端口暴露到公网,安全性最高。
在 OpenClaw 的配置文件(通常是 config.json 或 .env)中,我们不需要做特殊的内网穿透配置,只需确保本地机器能访问外网即可。
方案 B:Coze 回调本地(需内网穿透)
如果你希望 Coze 在绘图完成后主动推送消息给 OpenClaw(例如异步长任务),则需要将本地的 Gateway 端口映射到公网。
推荐使用 Cloudflare Tunnel 或 ngrok。以 ngrok 为例:
ngrok http 18789
假设获得的转发地址是 https://abc123.ngrok.io。然后在 Coze 的工作流中,添加一个"HTTP 请求”节点,指向 https://abc123.ngrok.io/api/callback。但在本教程的同步绘图场景中,我们主要采用方案 A,即由 OpenClaw 发起请求并等待结果,这样架构更简单,延迟更低。
第三步:编写 Skill 让 OpenClaw“看懂”绘图指令
仅仅有 API 是不够的,OpenClaw 需要知道什么时候该调用绘图功能。这就需要编写一个自定义 Skill。
在 OpenClaw 的工作目录 ~/.openclaw/workspace/skills/ 下,新建一个文件夹 seedream-drawer,并创建 SKILL.md 和主逻辑文件(如 index.js 或 main.py,取决于你的开发语言偏好,这里以 Node.js 为例)。
SKILL.md 定义
# Skill: seedream-drawer
# Description: 调用豆包 Seedream 模型生成图片
# Trigger: 当用户指令中包含“画一张”、“生成图片”、“配图”等关键词时触发
# Input: prompt (string)
# Output: image_url (string), local_path (string)
核心逻辑实现
在代码中,我们需要封装 HTTP 请求逻辑。以下是一个简化的 Node.js 实现思路:
const axios = require('axios');
const fs = require('fs');
const path = require('path');
async function drawImage(prompt, context) {
const COZE_BOT_ID = process.env.COZE_BOT_ID;
const COZE_TOKEN = process.env.COZE_TOKEN;
try {
// 调用 Coze API
const response = await axios.post(
'https://api.coze.cn/open_api/v2/chat',
{
bot_id: COZE_BOT_ID,
user: context.sessionId,
query: `请根据以下描述生成图片:${prompt}`,
stream: false
},
{
headers: {
'Authorization': `Bearer ${COZE_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
// 解析返回结果,提取图片 URL
// 注意:实际返回结构需根据 Coze 具体 API 文档调整
const imageUrl = response.data.messages.find(m => m.type === 'answer')?.content;
if (imageUrl) {
// 下载图片到本地 workspace,方便后续排版使用
const imgResponse = await axios.get(imageUrl, { responseType: 'stream' });
const fileName = `draw_${Date.now()}.png`;
const localPath = path.join(context.workspaceDir, 'images', fileName);
// 确保目录存在
if (!fs.existsSync(path.dirname(localPath))) {
fs.mkdirSync(path.dirname(localPath), { recursive: true });
}
const writer = fs.createWriteStream(localPath);
imgResponse.data.pipe(writer);
return {
success: true,
url: imageUrl,
localPath: localPath,
message: "图片已生成并保存至本地。"
};
} else {
return { success: false, message: "未能生成图片,请检查提示词。" };
}
} catch (error) {
console.error("Drawing failed:", error);
return { success: false, message: "绘图服务暂时不可用。" };
}
}
module.exports = {
name: 'seedream-drawer',
onMessage: async (message, context) => {
// 简单的意图识别,实际生产中可用 LLM 判断
if (message.content.includes('画') || message.content.includes('图')) {
const prompt = message.content.replace(/(画一张|生成|配图)/g, '').trim();
const result = await drawImage(prompt, context);
return result.message + (result.localPath ? `\n[图片]: ${result.localPath}` : '');
}
}
};
环境变量配置
为了安全起见,密钥不要硬编码在代码里。在 OpenClaw 的 .env 文件中添加:
COZE_BOT_ID=你的 Bot ID
COZE_TOKEN=你的 Personal Access Token
重启 OpenClaw Gateway,使新 Skill 生效。
实战演练:从文字到封面的闭环
配置完成后,我们来测试一下完整流程。
场景:你需要为刚刚写好的公众号文章《OpenClaw 实操指南》生成一张封面图。
- 发送指令:在微信中向绑定的 OpenClaw 机器人发送:“帮我为《OpenClaw 实操指南》这篇文章画一张封面图,风格要科技感,蓝色调,包含代码元素。”
- 路由匹配:OpenClaw 接收到消息,
seedream-drawer技能检测到关键词“画”,拦截该指令。 - 云端执行:Skill 将优化后的提示词发送至 Coze,Coze 调用 Seedream 模型进行绘图。
- 本地落盘:几秒后,OpenClaw 收到图片 URL,自动下载并保存到本地的
workspace/images/目录下。这一步至关重要,因为后续的“自动排版”技能(如实操 35 的内容)需要读取本地图片路径来插入 Markdown 文档。 - 反馈结果:微信端收到回复:“图片已生成!预览如下:[图片卡片]。本地路径:~/clawd/images/draw_171688xxxx.png。”
此时,你不仅得到了一张图,更得到了一个可以被后续自动化流程直接调用的本地文件资源。
避坑指南与进阶思考
在实操过程中,有几个细节值得注意:
- 提示词工程:Seedream 对中文理解很好,但过于抽象的描述(如“大气一点”)可能导致结果不稳定。建议在 Skill 中加入一层“提示词润色”逻辑,将用户的自然语言转化为包含光影、构图、风格的具体描述词。
- 异步处理:绘图通常耗时较长(5-15 秒),可能会造成微信端的超时假象。对于复杂任务,建议设计为“异步模式”:先回复“正在绘制中,请稍候”,生成完成后再通过微信主动推送结果(需配合消息队列或定时轮询)。
- 成本控制:虽然豆包目前可能有免费额度,但商业化使用后需注意 Token 和绘图次数的成本。可以在 Skill 中加入频率限制,避免恶意调用。
通过接入豆包 Seedream,OpenClaw 不再只是一个文本处理机器,它进化为了一个真正的多模态内容工厂。结合前文的公众号写稿技能,你现在已经拥有了一个能“写”又能“画”的全能助手。下一步,我们将探讨如何将这些图文素材自动排版,并推送到草稿箱,完成发布的最后一公里。
获取更多 AI 咨询、一人公司、创业读书笔记、Openclaw、Claude Code 实战干货,欢迎关注我「Rubin 智造社」
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)