AstrBot OpenAI 兼容 硅基流动 图像生成插件
插件根据 薄暝的插件修改算三创
原创作者 喵喵 提供了硅基的函数调用
本人只会复制粘贴,当前代码会进行简单测试
修改内容
插件市场看到原作者插件,但是不会写代码,后面看到二创,但是OpenRouter 现在基本没有免费的model,硅基市场不管是免费也好收费(拉新费用还没用完)也好,对国内用户还是简单的
刚好看到原作者issues也有人要用硅基,就简单修改了下调用参数只添加了图片大小设置,别的参数都是默认有需要的可以自己添加,ttp.py 405行和413行 的 payload 添加就行,请确保参数有效性。最好写死
理论上支持硅基所有的生图
image_size: 配置项添加生成图片大小设置,可以看下图硅基对于尺寸生效设置
generate_image:
utils>ttp.py对这个函数简单修改了下,添加image_size和max_retries参数 图片大小和重试,对应配置项填写数据,默认1024x1024和3对比
generate_image_openrouter这个函数 原本是默认10次重试。修改为获取配置次数generate_image本身是没有设计多apiKey循环的 ,我也复制不明白,就直接使用了配置项openrouter_api_keys第一个key作为调用的key
硅基的 参考图 参数是image image2 image3来设置的,main.py中input_images是_generate_image函数获取消息流中的base64来组成的一个数组,目前我只设置了一个image取数组中的第一个图来参考,未设置多图参考_generate_image: 二创插件中生成图片的函数,二创中几个指令都是调用这个来生成,所以只要修改这个参数调用就可以实现想要的效果,引入了原创作者的
generate_image原逻辑直接调用默认的
generate_image_openrouter生成图片, 新逻辑 根据配置custom_api_base自定义api 来判断,写入只要含有siliconflow字符串直接调用硅基的生图api,不是直接原逻辑,不知道代码怎么写多写了一层逻辑,不影响使用

简单测试
测试了 /aiimg 画一个猫

测试了 /aiimg 根据下面图生成一个猫 {图片}

- 其余无测试
其余无任何修改
AstrBot 图像生成插件,默认使用 Google Gemini 2.5 Flash 模型免费生成高质量图像。
功能特点
- 🎨 图像生成: 使用 openai 格式模型
- 🔧 自定义模型支持: 可配置使用任何支持 openai 格式平台支持的图像生成模型
- ️ 参考图片支持: 支持基于用户提供的图片进行生成或修改
- 🔑 多 API 密钥支持: 支持配置多个 API 密钥,自动轮换避免额度耗尽
- ♻️ 智能重试机制: 支持可配置的自动重试,提高请求成功率和稳定性
- 🚀 异步处理: 基于 asyncio 的高性能异步图像生成
- 🔗 智能文件传输: 支持本地和远程服务器的文件传输
- 🧹 自动清理: 自动清理超过 15 分钟的历史图像文件
- 🛡️ 错误处理: 完善的异常处理和错误提示
- 🌐 多语言支持: 自动将中文提示词翻译为英文
安装配置
1. 获取 API Key
2. 配置参数
通过 Web 界面配置(推荐)
- 访问 AstrBot 的 Web 管理界面
- 进入"插件管理"页面
- 找到"openai-image-command"插件
- 点击"配置"按钮进行可视化配置
配置参数说明
- openrouter_api_keys: API 密钥列表(支持多个密钥自动轮换)
- model_name: 使用的模型名称(默认:google/gemini-2.5-flash-image-preview:free)
- max_retry_attempts: 每个 API 密钥的最大重试次数(默认:3 次,推荐 2-5 次)
- custom_api_base: 自定义 API Base URL(可选,没有特殊需求别填)
- nap_server_address: NAP cat 服务地址(同服务器填写
localhost) - nap_server_port: 文件传输端口(默认 3658)
- calls_per_minute_per_group:用于限制同一 QQ 群在一分钟内触发 /aiimg 和 /aiimg 手办化 的次数,避免刷屏。
使用方法
/aiimg 命令调用
/aiimg 帮助 获取帮助
/aiimg <描述> 根据文字描述生成图像,支持参考图片
/aiimg 手办化 将参考图片转换为手办风格(模版 1)
/aiimg 手办化 2 将参考图片转换为手办风格(模版 2)
智能重试机制
插件内置了双层重试机制,提高图像生成的成功率:
重试策略
- API 密钥轮换: 当一个 API 密钥失败时,自动切换到下一个可用密钥
- 单密钥重试: 对每个 API 密钥都会进行用户配置次数的重试
- 智能错误分类: 额度/速率限制错误直接切换密钥,网络/临时错误进行重试
- 指数退避: 重试间隔 2 秒 →4 秒 →8 秒,最大 10 秒
总重试次数计算
总重试次数 = API密钥数量 × max_retry_attempts
例如:3 个 API 密钥,每个重试 3 次 = 最多 9 次尝试
使用场景
插件支持以下使用场景:
- 纯文本生成图像: 直接通过文字描述生成图片
- 基于参考图片生成/修改: 上传图片后,可以基于该图片进行修改或生成新图片
- 智能参考控制: 插件会自动判断是否使用参考图片
技术实现
核心组件
- main.py: 插件主要逻辑,继承自 AstrBot 的 Star 类
- utils/ttp.py: API 调用和图像处理逻辑
- utils/file_send_server.py: 文件传输服务器通信
工作流程
- 接收用户的图像生成请求和可选的参考图片
- 根据
use_reference_images参数决定是否使用参考图片 - 构建多模态请求消息(文本+图片)发送到服务器
- 调用用户选择的模型进行图像生成或修改
- 解析返回的 base64 图像数据
- 自动清理超过 15 分钟的历史图像文件
- 保存新生成的图像到本地文件系统
- 通过文件传输服务发送图像(如需要)
- 返回图像链到聊天
支持的模型
插件支持配置任何 openai 格式平台上可用的图像生成模型,包括但不限于:
google/gemini-2.5-flash-image-preview:free(默认免费模型)google/gemini-2.0-flash-exp:freeopenai/gpt-4oanthropic/claude-3.5-sonnet- 其他支持图像生成的生图模型
您可以在插件的配置文件中的 model_name 字段指定要使用的模型。
文件结构
AstrBot_plugin_gemini2.5image-openrouter/
├── main.py # 插件主文件
├── metadata.yaml # 插件元数据
├── _conf_schema.json # 配置模式定义
├── utils/
│ ├── ttp.py # OpenRouter API 调用
│ └── file_send_server.py # 文件传输工具
├── images/ # 生成的图像存储目录
├── LICENSE # 许可证文件
└── README.md # 项目说明文档
错误处理
插件包含完善的错误处理机制:
- API 调用失败处理: 详细的 API 错误信息记录
- Base64 图像解码错误处理: 自动检测和修复格式问题
- 参考图片处理异常捕获: 当参考图片转换失败时的回退机制
- 文件传输异常捕获: 网络传输失败时的错误提示
- 自动清理失败处理: 清理历史文件时的异常保护
- 详细的错误日志输出: 便于调试和问题定位
版本信息
- 当前版本: v1.8
- 更新内容:
- ✨ 新增智能重试机制,支持用户可配置的重试次数
- 🔧 添加 Web 界面可视化配置支持
- ♻️ 实现双层重试策略(API 密钥轮换+单密钥重试)
- 📊 改进错误分类和指数退避算法
- 📝 完善配置文档和使用说明
- 🐛 新增自定义模型配置功能,支持配置不同的 OpenRouter 模型
- 🔑 优化 API 密钥管理,支持多个密钥自动轮换
- 🛡️ 改进错误处理和日志记录
- 📸 新增参考图片支持功能
- 🧹 添加自动清理机制
- 使用 astrbot 命令调用
开发信息
- 二改作者: 薄暝
- 原作者: 喵喵
- 版本: v1.8
- 许可证: 见 LICENSE 文件
- 原项目地址: GitHub Repository
- 现项目地址: GitHub Repository
贡献
欢迎提交 Issue 和 Pull Request 来改进这个插件。
非常感谢原作者喵喵的插件!
许可证
本项目采用开源许可证,详见 LICENSE 文件。