Skip to content
 
 

Repository files navigation

通用生图插件 (Image Generation)

面向 AstrBot 的通用图像生成插件,支持多供应商、文生图、图生图、LLM 工具调用、预设/人设、任务队列、限流、任务历史和安全审核。

兼容 Xero-Team/AstrBot >=4.27.3,<5,要求 Python >=3.14;目标 AstrBot 仓库的测试解释器为 Python 3.14.6。本插件使用当前公开插件 SDK 与 Dashboard Extension Protocol v1,不兼容旧版插件 Web API 或内部 Agent 接口。

安装与兼容性

环境要求

  • AstrBot:>=4.27.3,<5
  • Python:>=3.14(目标 AstrBot 仓库固定使用 3.14.6)。
  • 插件运行时依赖:aiohttpPillowpydantic,版本约束见 requirements.txt。AstrBot 会在加载插件时按该文件检查依赖。

安装方式

  1. 从可信来源下载插件 ZIP,在 AstrBot WebUI 的“插件”页面上传并安装;安装后启用插件。
  2. 在插件配置页添加至少一个“图像模型供应商”,填写 API Key,并维护可用模型列表。
  3. 使用 /image(或 /生图)测试生成。没有可用供应商或 API Key 时,插件会拒绝创建任务并提示原因。

源码开发可在 AstrBot 源码根目录执行:

uv run astrbot plug install --editable /absolute/path/to/astrbot_plugin_image_generation

插件不依赖某个消息平台的私有接口:可在 AstrBot 支持命令和图片发送的消息平台中使用;图片发送能力仍由实际平台适配器决定。Dashboard 控制台需要通过 AstrBot WebUI 使用。

功能

  • 多供应商配置:一个插件中配置多个生图服务,每个供应商可独立设置 API Key、Base URL、代理、模型列表和模型能力。
  • 多适配器支持:内置 Gemini、OpenAI Chat、OpenAI Images、火山方舟、Gitee AI、硅基流动、Agnes AI、Jimeng2API、Grok 和自定义 HTTP 接口。
  • 文生图与图生图:自动收集消息图片、引用消息图片、@ 用户头像和人设参考图;模型不支持图生图时会自动忽略参考图。
  • 模型动态切换:通过指令查看和切换模型。
  • 多图任务:单个任务可生成多张图片,支持请求级并发、任务级队列和分批发送。
  • LLM 工具调用:可作为 LLM 工具自动生图、查询预设/人设、管理生图任务,也可按配置启用预设编辑工具。
  • 预设与人设:支持普通预设、高级 JSON 预设、多人设拼接和人设参考图。
  • Dashboard 控制台:在 AstrBot Dashboard 中提交任务、选择模型/预设/人设、上传参考图、查看任务详情与下载生成结果。
  • 使用限制:支持会话黑名单、管理员/白名单绕过、请求频率限制、每日额度和参考图大小限制。
  • 安全审核:支持屏蔽词、AI 提示词审核、AI 图片审核和审核白名单。
  • 插件间公共 API:其他插件可提交任务、查询状态、取消任务、等待结果并获取本地图片路径。

命令

命令 说明
/image <预设/人设...> [额外提示词] --count <数量>(别名 /生图 生成图片。开头连续命中的预设/人设会依次应用;数量使用 Orbit option --count-n 指定。消息、引用消息、@ 用户和人设参考图会作为参考图。
/image-task [编号或任务ID](别名 /生图任务 查看当前会话的任务或详情。编号只匹配进行中的任务;完整任务 ID 可查看仍保留的已结束记录。
/image-cancel <编号或任务ID>(别名 /生图取消 取消当前会话中排队或运行中的任务。
/image-model [序号](别名 /生图模型 查看或切换模型。
/image-preset(别名 /预设 查看预设和人设。
/image-preset 添加 <预设名:预设内容> 添加或覆盖预设,支持英文冒号 : 和中文冒号
/image-preset 删除 <预设名> 删除预设。

Dashboard 控制台

插件在元数据中注册了 Dashboard Extension Protocol v1 页面 dashboard(标题为“通用生图控制台”)。启用插件后,该页面可执行以下受限操作:

  • 读取当前模型、队列状态、可用模型、预设和人设;
  • 提交生图任务、查看任务列表/详情、取消进行中的任务;
  • 逐张上传参考图(单次任务最多选用 8 张)、预览较小的结果图和下载完整结果图。

上传仅接受 JPEG、PNG、GIF、WebP、HEIC 或 HEIF 图片;除 AstrBot Dashboard 提供的受限 Action 外,页面不会直接访问 Dashboard API 或外部网络。控制台中的模型选择会写入插件当前模型设置,因此会影响该插件后续任务,而不是仅影响当前浏览器页面。

适配器

适配器类型 使用接口类型 文生图 图生图 尺寸控制 说明
gemini Gemini 原生 generateContent Gemini 原生图像生成接口。
openai_chat OpenAI 兼容 chat/completions 通用 Chat Completions 图像生成接口,可配置提示词前缀、输出模态和额外请求体。
openai OpenAI Images API /v1/images/generations/v1/images/edits DALL-E / GPT Image 系列;图生图仅 GPT Image 系列支持。
volcengine_ark 火山方舟 Images Generations /api/v3/images/generations Seedream 系列;按模型能力发送水印、提示词优化、组图与联网搜索(5.0 Pro 自动跳过不支持参数)。
gitee_ai Gitee AI /v1/images/generations/v1/images/edits Gitee AI 通用图像接口,可自动或手动选择生成/编辑接口。
siliconflow_adapter SiliconFlow Images API /v1/images/generations 支持 Kolors、Qwen-Image、Qwen-Image-Edit、Z-Image,并可配置反向提示词、步数和提示词遵循强度。
agnes_ai Agnes AI Images API /v1/images/generations 支持 agnes-image-2.0-flashagnes-image-2.1-flash;参考图通过 extra_body.image 数组发送。
jimeng2api jimeng-api /v1/images/generations/v1/images/compositions 适用于 iptag/jimeng-api,支持启动和每日自动领积分任务。
grok xAI Images API /v1/images/generations/v1/images/edits 按 xAI 官方 JSON 格式请求;单图用 image,多图用 images(最多 3 张)。
codex_responses Codex Responses API /codex/responses 固定请求 modelinputimage_generation 工具;支持同步图像编辑。
modelscope ModelScope API-Inference /v1/images/generations + task poll 按配置 按配置 异步提交、轮询并下载结果;收到远端任务 ID 后不会自动重新提交;详见 ModelScope 接口配置
custom_http 用户自定义 HTTP JSON 接口 高级接口模板,详见 自定义 HTTP 接口配置

能力开关以“模型能力”配置为准。未勾选的能力不会在请求中使用,LLM 工具参数也会按当前适配器能力动态隐藏。

配置

基础配置

配置名 默认值 说明
启用 LLM 工具 生图工具、预设查询工具、生图任务工具 选择允许 LLM 调用的工具。可选项包括生图工具、预设查询工具、生图任务工具和预设编辑工具;预设编辑工具开启后 AI 可创建或删除预设。

API 供应商配置

每个供应商都包含以下通用配置,部分供应商会额外提供适配器专属配置项。

配置名 说明
供应商名称 供应商显示名,也是模型格式 供应商名称/模型名称 的前半部分。
接口地址 供应商接口地址。多数适配器可留默认值或填写中转地址。
代理地址 HTTP 代理,例如 http://127.0.0.1:7890
API 密钥 API Key 或 Token 列表;多个 Key 会自动轮询和重试。
可用模型列表 /生图模型 中展示和切换的模型列表。
模型能力 按实际模型能力勾选文生图、图生图、宽高比、分辨率。
超时时间覆盖 单个供应商的超时时间;填 0 使用“运行控制”中的默认超时。
重试次数覆盖 单个供应商的重试次数;填 0 使用“运行控制”中的默认重试次数。

常见专属配置:

  • openai_chat:可配置提示词前缀、modalities 和额外请求体 JSON。
  • openai:可选择模型系列,auto 会按模型名识别 GPT Image 或 DALL-E 请求格式。
  • volcengine_ark:可配置水印、组图模式、最大参考图数量、提示词优化模式和联网搜索;Seedream 5.0 Pro 会自动跳过组图与联网搜索参数,并将参考图上限限制为 10。
  • gitee_ai:可通过图像接口模式自动或手动选择 generations / edits
  • siliconflow_adapter:可配置反向提示词、推理步数和提示词遵循强度。
  • agnes_ai:可选择 base64url 响应格式;图生图参考图通过 extra_body.image 数组发送。
  • codex_responses:固定向 POST /codex/responses 发送 modelinputtools: [{"type":"image_generation","output_format":"png"}];填写服务根地址后会自动拼接路径,使用 Bearer API Key。无参考图时发送文本 input,有参考图时发送多模态 Responses input,仅支持同步结果;详见 Codex Responses 接口配置
  • modelscope:调用 API-Inference 异步图像接口,使用 ModelScope Access Token 提交、轮询并下载结果;可配置轮询间隔、总等待时间、反向提示词和尺寸映射。默认模板仅启用文生图;需要模型明确支持后才启用图生图。收到 task_id 后不会通过外层重试重新提交任务;详见 ModelScope 接口配置
  • custom_http:可配置请求方法、请求头、查询参数、请求体、图片结果路径、结果类型、错误路径和成功状态码。

生成与结果配置

配置名 默认值 说明
生图模型 自动选择首个可用模型 当前使用的模型,可通过 /生图模型 更新。
默认出图数量 1 未通过指令的 --count / -n option 或 LLM 工具指定数量时,单个生图任务默认生成的图片数量。
单次最大出图数量 10 单个生图任务最多生成的图片数量;用户请求超过该值时会自动截断。
单条消息最多图片数 5 多张图片发送给用户时,每条消息最多携带的图片数量;结果信息附加在最后一批。
默认图片宽高比 不指定 可选不指定、1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9;不指定时请求中不携带比例字段。
默认分辨率 不指定 可选不指定、1K、2K、4K;不指定时请求中不携带分辨率字段,仅部分适配器支持。
显示结果信息 用量 发送图片后可附加耗时、模型、生成数量、用量和任务ID;用量仅在开启每日额度时显示。
开始生图任务提示模板 已开始生图任务 生图开始时发送的提示文本;留空则不发送,默认包含任务 ID。

开始生图任务提示模板支持这些占位符:{reference_image_count}{image_count}{count}{prompt}{preset}{presets}{persona}{personas}{aspect_ratio}{resolution}{task_id}{model}{mode}{reference_images_block}{image_count_block}{count_block}{preset_block}{persona_block}。其中 {preset}/{presets} 仅表示命中的预设,{persona}/{personas} 仅表示命中的人设。

当同时使用人设、预设和附加提示词时,插件会将最终提示词整理为轻量分块,例如 [人物设定][预设提示词][附加提示词],帮助模型区分不同来源的意图;只有单一来源时会保留原始文本。

运行控制配置

配置名 默认值 说明
超时时间 180 秒 单次模型请求的默认超时时间;供应商配置可单独覆盖。
重试次数 3 单次模型请求失败后的默认重试次数;供应商配置可单独覆盖。
打印调试请求日志 关闭 开启后以 debug 日志打印 JSON 请求/响应结构;长字符串、Base64 和 data URL 会摘要处理。
向用户显示详细错误信息 关闭 开启后,生图失败消息会包含经过脱敏和摘要处理的远端错误详情;关闭时只显示错误类型和状态码。
不可重试 HTTP 状态码 内置 命中这些状态码时会立即失败,例如参数错误、鉴权失败、权限不足或资源不存在。
不可重试错误关键词 内置 错误文本包含这些关键词时会立即失败,用于识别参数错误、模型不支持或内容安全拒绝。
最大并发生图请求数 3 同时调用图像模型接口的请求数量上限;多图任务会在该限制内并发请求,完成一个后继续补发剩余请求。
最大并发完整生图任务数 3 同时运行的完整生图任务数量上限;每个运行中任务内部仍受请求级并发限制控制。
最大排队生图任务数 20 尚未开始运行的完整生图任务队列上限,不包含运行中任务;队列满时会拒绝新任务。

任务持久化配置

配置名 默认值 说明
持久化生图任务历史 开启 将任务状态、会话标识、提示词摘要、结果路径和错误摘要保存到插件数据目录;关闭后仅保留运行期内存任务。
生图任务历史保留条数 1000 最多保留的生图任务记录数量;活跃任务不会因历史裁剪被删除。
生图任务历史保留天数 0 已结束任务超过该天数会被清理;0 表示不按时间清理,仅按条数限制。

使用限制配置

配置名 默认值 说明
会话 UMO 黑名单 命中的会话无法使用指令和 LLM 工具。
管理员无视使用限制 开启 AstrBot 管理员跳过会话黑名单、频率限制和每日额度,但仍记录每日用量;成功提示中显示为 n/∞
使用限制白名单 UMO 额外配置可跳过使用限制的会话 UMO,行为同管理员绕过。
黑名单拒绝提示 ❌ 当前会话已被加入黑名单,无法使用生图功能 黑名单命中时返回的文本,留空则不提示。
速率限制 0 秒 同一用户两次请求之间的最小间隔;0 表示不限。
最大参考图大小 10 MB 超过限制的参考图会被忽略。
启用每日额度 关闭 是否限制每日生成数量。
每日额度 10 开启每日额度后,每个会话每天可生成的最大图片数量。

安全审核配置

配置名 说明
审核白名单 UMO 命中的会话会跳过提示词和图片审核。
屏蔽词列表 提示词包含任一词时直接拒绝生图请求。
启用 AI 提示词审核 生图前调用对话模型审核提示词。
AI 审核模型 指定提示词或图片审核使用的对话模型;留空时使用当前会话模型。
审核模型重试次数 审核模型调用失败、返回为空或无法解析时的最大尝试次数。
AI 提示词审核提示词 提示词审核模板,支持 {prompt} 占位符,未包含时会自动附加用户提示词。
启用 AI 图片审核 生图后、发送前调用对话模型审核生成图片。
AI 图片审核提示词 图片审核模板;只有显式写入 {prompt} 时才附带生图提示词。

提示词模板配置

预设提示词和人设模板在同一个配置组中维护。

配置名 说明
预设提示词 预定义提示词模板,可通过 /预设 命令增删。
人设名称 用于 /生图 <人设名称...> [额外提示词] 匹配。
人设文本描述 使用该人设生图时会作为人物设定提示词。
人设参考图 可选;当前模型支持图生图时会自动作为参考图。

简单预设格式:名称:提示词

高级预设格式:名称:{"prompt":"提示词","aspect_ratio":"16:9","resolution":"2K","description":"描述"}

/image-preset(或别名 /预设)会同时展示预设和人设。预设与人设同名时,/image 优先使用预设。/image 会从提示词开头按空格连续解析多个预设或人设,遇到第一个未命中的词后,剩余内容作为额外提示词;生成数量使用 --count / -n 指定。

LLM 工具

工具名 配置项名称 说明
generate_image 生图工具 根据提示词、预设、人设、参考图、头像引用和生成数量提交生图任务。
query_image_presets 预设查询工具 查询预设或人设列表,也可查看指定预设/人设详情。
manage_image_tasks 生图任务工具 查看当前会话任务列表、查看任务详情、取消仍在进行的任务。
edit_image_presets 预设编辑工具 创建或删除预设;默认不启用,开启后 AI 可修改预设配置,但不会编辑人设。

LLM 生图工具支持 presetpersonaaspect_ratioresolutionimage_countavatar_referencesreference_images 参数。avatar_references 可填写 selfsender 或用户 ID;reference_images 支持网络图片 URL 与插件私有数据目录中的文件。

任务体系

  • /生图 指令、LLM 生图工具和公共 API 共用统一任务体系:任务提交后会生成 task_id,进入排队/运行/完成/失败/取消状态。
  • 完整任务级并发由“最大并发完整生图任务数”控制,超过后任务保持排队,不会开始参考图转换或模型调用。
  • 模型接口请求级并发仍由“最大并发生图请求数”控制,多图任务会在请求并发限制内发起多个子请求,完成一个后继续补发剩余请求。
  • 插件会在收集参考图和预约额度前预检查队列容量;队列满时会直接拒绝新任务,避免不必要的下载和图片处理。
  • requested_count 表示模型接口子请求数量,不保证等于最终图片数量;result_count 表示实际保存的结果图片数量。部分适配器单次子请求可能返回多张图片。
  • 生成多张图片时会按“单条消息最多图片数”自动分批发送,结果信息附加在最后一批。
  • /生图任务 只展示当前会话正在进行的任务,并为列表项添加编号;可通过 /生图任务 <编号或任务ID> 查看详情,通过 /生图取消 <编号或任务ID> 取消仍在排队或运行中的任务。
  • 取消排队任务后会立即更新用户可见状态并释放占用;底层队列项由 worker 后续惰性跳过,不会开始参考图转换或模型调用。
  • 历史任务元数据可持久化到插件数据目录,插件重载后最近的已结束任务仍可查询;重启前未完成的任务会恢复为已取消,不会继续执行。
  • 历史记录中的 result_paths 只是当时保存的图片路径,临时文件可能已被 AstrBot 清理,调用方需要容忍路径不存在。

使用示例

基础生图:

/生图 一只在森林里野餐的兔子

使用预设:

/预设 添加 赛博朋克:cyberpunk style, neon lights, futuristic city
/生图 赛博朋克 猫

使用人设:

/生图 看板娘 在咖啡店读书

组合多个预设/人设:

/生图 手办化 看板娘 夜景 微笑

一次生成多张:

/image 手办化 看板娘 夜景 微笑 --count 3

图生图:

发送或引用一张图片后输入:/生图 变成动漫风格
/生图 变成像素风 @用户A

切换模型:

/生图模型
/生图模型 2

查看或取消任务:

/生图任务
/生图任务 1
/生图任务 1a2b3c4d
/生图取消 1
/生图取消 1a2b3c4d

插件间公共 API

本插件提供 plugin.public_api 供其他 AstrBot 插件复用生图能力。公共 API 复用本插件的任务、审核、参考图处理和结果保存流程,但不会主动向用户发送图片;调用方通过任务 ID 或等待接口获取生成图片的本地路径。

接口 说明
submit_generation_task(...) 提交后台任务,立即返回任务 ID。
get_generation_task(task_id) 查询任务快照。
cancel_generation_task(task_id, *, unified_msg_origin=None) 取消任务。
wait_generation_result(task_id, *, timeout_seconds=None, poll_interval_seconds=0.5) 等待任务结束并返回图片路径。
generate_image_files(...) 提交任务并等待完成的快捷方法。

详细接口参数、返回对象和调用示例见:插件间公共 API 文档

注意事项

  • 火山方舟的可用模型列表需要按控制台实际 Model ID 或 Endpoint ID 配置。
  • 配置 jimeng2api 后,插件会在启动时和每天日期变更后自动领取积分;仅直接连接即梦逆向服务时有效。
  • 即梦逆向图生图使用 /v1/images/compositions,使用中转可能会导致图生图失败。
  • Codex Responses 接口支持在单次 HTTP 请求内返回最终图片的文生图和图生图;参考图会作为多模态 input_image data URL 发送,但宽高比和分辨率会被忽略。若日志在约 150 秒显示 Server disconnected、后续任务仍成功,通常是服务端或中间网络主动断开后触发了插件重试,而不是本插件的请求超时;详见 Codex Responses 接口配置
  • 自定义 HTTP 接口为高级功能,建议先阅读 自定义 HTTP 接口配置
  • 开启调试请求日志或详细错误信息时,插件会做脱敏和摘要处理,但仍建议避免在公共环境暴露日志。

开发

开发与验证应使用 Xero-Team/AstrBot 源码根目录及其 Python 3.14.6 工具链。插件只依赖 astrbot.api 提供的公开接口;修改 Dashboard 前端资源后,需要同步更新 pages/dashboard/assets.v1.json 中的文件大小和 SHA-256 摘要。

安装质量工具后,可使用与 AstrBot 一致的 Python 3.14 / Ruff 规则运行:

python -m pip install -r requirements-dev.txt
make format   # 自动格式化并修复安全的 Ruff 问题
make check    # 格式、Ruff、编译、测试、配置与 Dashboard 资源检查
make quality  # check + Bandit、依赖审计、复杂度门禁

如本机有目标 AstrBot 源码,还可运行完整插件契约检查:

make check-contract ASTRBOT_ROOT=/path/to/AstrBot

真实消息平台、模型服务和 Dashboard 页面仍应在对应环境中手动验证。

About

通用图像生成插件

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages