前面给大家科普过 Hermes Plugin 的核心能力:插件是 Hermes 智能体拓展外部能力的最佳方式,零侵入核心代码、可插拔、易维护。
很多小伙伴玩 Hermes 智能体时,最刚需的功能就是AI 绘图。原生 Hermes 没有生图能力,而本地部署的 ComfyUI 生图质量高、可自定义工作流、免费无额度限制。
今天手把手带大家从零开发一款专属 Hermes 插件,实现:Hermes 对话触发指令 → 调用本地 ComfyUI 接口 → 自动生成图片 → 智能体返回图片结果。全程纯实操,代码可直接复用,新手也能一次跑通。
先上最终效果:对 Hermes 说“画一张赛博朋克城市”,智能体自动调用 ComfyUI 工作流,完成绘图并返回图片链接/本地路径。
开发前先确保环境就绪,避免后续报错:
- 已部署 Hermes Agent 开源框架,可正常运行对话
- 本地 ComfyUI 部署完成,开启 API 监听(默认本地地址
http://127.0.0.1:8188) - ComfyUI 提前保存好一套可用绘图工作流,导出 API 格式 JSON
- 设备安装 Python 环境,支持 requests 网络请求
重点提示:ComfyUI 普通保存的工作流无法用于 API 调用,必须通过「Save (API Format)」导出,否则会参数缺失、调用失败。
二、实现原理:整体流程拆解
这款自定义插件的核心逻辑非常清晰,全程 5 步闭环:
- 指令监听:Hermes 识别用户生图指令(画画/生成图片/绘制等)
- 插件触发:匹配到关键词后,加载自定义 ComfyUI 插件能力
- 参数组装:提取用户输入的提示词,替换工作流中的绘图参数
- API 调用:向后端 ComfyUI 推送绘图任务,等待队列执行
- 结果回传:获取 ComfyUI 生成的图片路径/链接,返回给 Hermes 前端展示
三、Hermes ComfyUI 插件完整开发实操
Hermes 插件有固定目录规范和文件格式,我们从零创建完整插件目录。
1. 创建插件目录结构
进入 Hermes 全局插件目录,新建comfyui_draw 插件文件夹,目录结构如下:
~/.hermes/plugins/comfyui_draw/
├── __init__.py # 插件核心逻辑代码
└── plugin.yaml # 插件配置文件(必填)
2. 编写插件配置文件 plugin.yaml
该文件是插件的身份信息,Hermes 依靠该文件识别、加载插件,配置简洁通用:
name: comfyui_draw
version: 1.0.0
description: 调用本地ComfyUI接口,实现AI智能体一键生图
author: 自定义开发
tags: ["AI绘图", "ComfyUI", "工具扩展"]
enabled: true
3. 编写核心逻辑代码 __init__.py
核心功能:注册工具、监听用户指令、替换提示词、调用 ComfyUI API、获取图片结果。代码做了精简优化,自带异常捕获,可直接复用:
import requests
import json
import os
from typing import Optional
from hermes.plugin import PluginContext, register_plugin
# 配置ComfyUI本地接口地址
COMFYUI_API_URL = "http://127.0.0.1:8188"
# 替换为你自己的ComfyUI API工作流JSON
COMFYUI_WORKFLOW = {
"3": {
"class_type": "KSampler",
"inputs": {
"seed": -1,
"steps": 20,
"cfg_scale": 7,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0]
}
},
"4": {"class_type": "CheckpointLoaderSimple", "inputs": {"ckpt_name": "v1-5-pruned-emaonly.safetensors"}},
"6": {"class_type": "CLIPTextEncode", "inputs": {"text": "positive_prompt", "clip": ["4", 0]}},
"7": {"class_type": "CLIPTextEncode", "inputs": {"text": "negative_prompt", "clip": ["4", 0]}},
"8": {"class_type": "VAEDecode", "inputs": {"samples": ["3", 0]}},
"9": {"class_type": "SaveImage", "inputs": {"images": ["8", 0], "filename_prefix": "hermes_draw"}}
}
# 固定负面提示词
DEFAULT_NEGATIVE = "worst quality, low quality, blurry, deformed, watermark"
def call_comfyui_draw(prompt: str) -> Optional[str]:
"""调用ComfyUI生成图片,返回图片本地路径"""
try:
# 替换工作流提示词
COMFYUI_WORKFLOW["6"]["inputs"]["text"] = prompt
COMFYUI_WORKFLOW["7"]["inputs"]["text"] = DEFAULT_NEGATIVE
# 提交绘图任务
resp = requests.post(
url=f"{COMFYUI_API_URL}/prompt",
json={"prompt": COMFYUI_WORKFLOW},
timeout=30
)
resp_data = resp.json()
prompt_id = resp_data.get("prompt_id")
if not prompt_id:
return "绘图失败:未获取到ComfyUI任务ID"
# 查询任务执行状态
output_resp = requests.get(f"{COMFYUI_API_URL}/history/{prompt_id}", timeout=60)
history_data = output_resp.json()
if not history_data:
return "绘图失败:任务执行超时"
# 解析图片路径
task_info = history_data[prompt_id]
images = task_info.get("outputs", {}).get("9", {}).get("images", [])
if not images:
return "绘图失败:未生成有效图片"
img_name = images[0]["filename"]
img_path = os.path.join(os.path.expanduser("~"), "ComfyUI", "output", img_name)
return f"✅ 图片生成成功!\n本地路径:{img_path}"
except Exception as e:
return f"绘图异常:{str(e)}"
# 注册Hermes插件工具
@register_plugin
def plugin_entry(ctx: PluginContext):
# 注册生图工具指令
ctx.register_tool(
name="comfyui_ai_draw",
description="根据用户文字描述生成AI图片,可绘制风景、人物、插画、赛博朋克等所有风格图像",
func=call_comfyui_draw
)
四、代码核心修改说明(必看)
直接运行大概率会报错,只需修改两处个人专属配置,即可适配你的设备:
- 替换工作流 JSON:把代码中
COMFYUI_WORKFLOW替换成你自己导出的 API 工作流,适配你的模型、分辨率、采样器; - 修正模型名称:工作流中
ckpt_name改为你 ComfyUI 本地真实的模型文件名; - 调整图片路径:如果你的 ComfyUI 输出目录非默认,手动修改
img_path路径。
五、插件加载与测试
1. 重启 Hermes 加载插件
插件文件配置完成后,重启 Hermes 服务,框架会自动扫描插件目录,加载 comfyui_draw 插件。可通过插件列表命令查看是否成功启用。
2. 对话测试生图功能
在 Hermes 对话窗口输入生图指令,示例:
- 画一张赛博朋克风格的未来都市夜景,高清细节
- 生成一张日系治愈风樱花插画,唯美清新
智能体会自动调用插件工具,请求 ComfyUI 执行绘图任务,等待数秒后返回生成成功提示与图片本地路径,直接打开即可查看成品。
六、常见问题排查
- 插件加载失败:检查目录是否正确、yaml文件是否格式报错、是否缺少
__init__.py - 调用超时:确认 ComfyUI 已正常启动、8188 端口未被占用
- 生成空白图/报错:工作流非 API 格式、模型文件名不匹配、提示词参数错误
- 找不到图片:核对 ComfyUI 输出目录,修正代码中本地路径配置
七、进阶优化方向
基础功能跑通后,可以继续迭代升级插件,适配更多场景:
- 支持自定义分辨率、步数、CFG、风格参数,用户可指令控制绘图参数;
- 对接图床,将本地图片转为在线链接,支持前端直接预览;
- 添加历史绘图记录、批量生图、图生图功能;
- 增加异常重试机制,提升稳定性。
八、总结
通过 Hermes Plugin 对接 ComfyUI 生图,是低成本拓展 AI 智能体视觉能力的最优方案。无需修改框架源码,一个轻量插件就可以让对话智能体拥有专业 AI 绘图能力,兼顾灵活性、可控性和私密性,完全本地运行、无第三方额度限制。
掌握这套开发逻辑后,你还可以举一反三,开发插件对接视频生成、语音合成、数据分析等各类外部工具,彻底解锁 Hermes 智能体的全部拓展能力!
#Hermes插件开发 #ComfyUI教程 #AI智能体实战 #本地AI生图 #大模型应用开发