Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
astrbot_plugin_qq_group_daily_analysis: 군채 분석·포스터 생성
✨ AstrBot 群日常分析总结插件 —— 自动总结群聊提取有趣信息并生成精美海报或网页链接,还能制作群趣味连环漫画;自带管理后台,可查看运行链路、历史报告、异常日志和数据审计;支持 QQ 官方机器人、OneBot (NapCat / LLOneBot / SnowLuma)、Telegram 与 Discord 等消息平台。
플러그인Python · HTMLGitHub @SXP-Simon직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗✨ 一个基于 AstrBot 的智能群聊分析插件,支持 OneBot ( NapNeko/NapCatQQ, LLOneBot/LuckyLilliaBot, SnowLuma/SnowLuma)、QQ 官方机器人、Telegram、Discord,未来支持更多平台。 ✨
[!NOTE] 以下配置情况仅供参考,请仔细阅读插件配置页面中各个字段的说明,以插件配置中的说明为准。
| 配置项 | 说明 | 备注 |
|---|---|---|
| 自动分析时间列表 | 控制定时报告的每日触发时间。 | 清空并保存后会移除已注册的定时报告;增量分析仍按其独立配置和新增消息量触发 |
| 定时分析名单模式 + 列表 | 控制哪些群参与定时任务(报告时间点触发)。 | 可选 inherit 继承基础群权限;whitelist + 空列表 表示不注册定时任务 |
| 增量分析名单模式 + 列表 | 控制哪些群走增量模式,其他群走传统全量。 | 可选 inherit 继承定时分析最终名单;whitelist + 空列表 表示不启用增量周期任务 |
| 每日群漫画 | 分析结果完成后并行生成漫画,也可用 /群漫画 单独生成。 | enable_daily_comic 是总开关,enable_auto_daily_comic 控制分析后自动联动 |
| HTML 格式 (自建) | 配置 html_base_url 后,机器人会发送可直接点击的报告外链。 | 输出格式需设为 html |
| 自定义 LLM 服务 | 用户可自行选取个人提供的服务商。 | 留空则回退到默认服务商 |
每日群漫画不按自然日限流:每次成功得到群分析结果时都会尝试生成一张。手动群分析、定时传统分析、定时增量最终报告,以及开启“增量分析立即报告”后的即时增量最终报告都适用。同一群已有漫画在排队或生成时,新请求会直接跳过,避免重复出图;不同群仍受漫画并发配置限制。
也可以使用 /群漫画 [天数] 单独生成漫画。这个命令只拉取消息、提取话题并启动漫画生成,不会生成日报、称号、金句、聊天质量,也不会写入日报历史。
enable_daily_comic 是漫画总开关:关闭时,手动 /群漫画 和所有自动联动漫画都不会出图。enable_auto_daily_comic 是自动联动开关,默认开启。它同时控制手动群分析、定时分析和增量最终报告完成后的漫画生成;关闭后仍可使用 /群漫画 按需出图。分析功能 配置组保持 topic_analysis_enabled 开启,让漫画直接复用报告已提取的话题;手动 /群漫画 会单独提取话题。漫画群名单模式 和 漫画群白/黑名单列表 控制哪些群可以生成漫画。默认 inherit 会继承基础群权限:分析报告触发的漫画会直接复用已通过的手动/定时/增量入口判定,不需要重复填写名单。若只想开放漫画、不开放分析,可把漫画名单模式改为 blacklist(空列表=所有群允许)或 whitelist(只允许列表里的群)。drawing_backend:builtin(默认,使用本插件内置绘图客户端);general_plugin(调用 「通用生图」插件 公共 API);big_banana(调用 「大香蕉」插件 绘图管线)。外部后端需在对应插件中配置其自身的 API/提供商。外部后端失败时由 drawing_external_fallback 决定是否回退内置后端(默认回退,关闭则直接取消本次漫画)。绘图供应商配置表 点击“添加条目”,选择与上游服务匹配的预设;每个条目独立填写 API Key、端点、模型、尺寸、宽高比、超时与可选代理。至少保留一个启用且包含 API Key 的条目。priority 从高到低尝试;优先级相同时按表中顺序尝试。当前条目请求失败后会自动切换到下一个候选,全部失败才判定本次漫画生成失败。drawing_prompt_provider_id。它用于把分析结果整理成绘图分镜提示词;留空时使用插件的常规 Provider 回退策略。漫画角色方案 中新增一个或多个方案:每个方案可单独选择漫画专用人格、编辑漫画场景分析提示词,并上传 jpg、jpeg、png 或 webp 参考图;没有参考图时仍会走文生图。具体会发送多少张参考图取决于当前绘图供应商的能力和条目上限。每天随机切换漫画角色 后,插件会在运行环境时区的每天首次生成漫画时随机选择一个已启用方案,并在当天持续使用同一方案;优先读取 TZ 环境变量,未设置或无效时使用系统本地时区。角色方案内的人格和场景提示词只作用于漫画分镜提示词,不会改变话题、金句或最终报告的人格。漫画参考图 会自动迁移为 默认角色方案,迁移前数据会备份到插件数据目录的 config_backups。既有角色方案会继承升级时的全局漫画场景分析提示词;新建角色方案自带默认提示词,清空后回退到全局默认模板。致谢:@piexian/astrbot_plugin_gemini_image_generation
供应商预设负责将漫画分镜和角色参考图转换为各家的原生请求格式。是否可用仍取决于你的账号权限、模型名称、区域和上游服务状态;选择 OpenAI 兼容 Chat 预设时,也需要上游模型本身能够在聊天响应中返回图片。
| 预设 | 请求协议 | 参考图 | 主要能力与限制 |
|---|---|---|---|
| Google Gemini | Gemini generateContent | 支持,最多 14 张 | 支持 1K/2K/4K 与宽高比。 |
| OpenAI / Z.ai / grok2api | OpenAI 兼容 Chat Completions | 支持 | 将尺寸与布局要求写入提示词,图片从聊天响应中提取;由上游模型决定是否支持生图。 |
| OpenAI Images | /v1/images/generations、/edits | 支持,可设置上限 | GPT Image 可设置质量、背景、响应格式、JPEG/WebP 压缩、审核和仅文生图模式。 |
| xAI | xAI Images | 支持,最多 5 张 | 自动在文生图与 edits 间切换。 |
| Agnes AI | 原生 Images | 支持 | 通过 extra_body.image 发送参考图。国际站使用 apihub.agnes-ai.com,中国站使用 api.agnes-ai.cn,请按 API Key 所属站点选择预设。 |
| MiniMax | /v1/image_generation | 支持,最多 9 张 | 使用 subject_reference 角色参考图字段。 |
| 阶跃星辰 | Images generations / edits | 支持,首张 | 有参考图时使用官方 multipart edits 请求。 |
| 豆包 Seedream | 火山方舟 Images | 支持 | 普通模型最多 14 张,Seedream 5.0 Pro 最多 10 张且不支持组图;支持 Endpoint ID、自定义尺寸、提示词优化和组图。 |
| SenseNova U1 Fast | SenseNova Images | 不支持 | 仅文生图;支持官方尺寸映射,单次生成数量限制为 1-4 张。 |
| DashScope | 通义万相 / 千问原生接口 | 支持,最多 9 张 | 支持自定义尺寸、数量、水印、负面提示词和提示词扩展;wan2.7 的推理与顺序组图互斥,qwen-image-2.0 最多 6 张。 |
| 自定义协议 | Images / Chat / Grok / Gemini | 取决于协议 | 用于未列出的兼容服务;请选择与实际端点一致的协议。 |
所有条目均可单独配置 proxy;条目代理优先于全局 drawing_proxy,全局代理也会用于下载同次生图响应中的图片。请求超时按条目配置,重试、下载代理和投递策略仍为全局设置。
分析结果完成后,自动联动漫画会立即在后台运行,报告渲染与发送不会等待出图完成。反过来,报告发送失败也不会取消已经开始的漫画任务。自动联动只复用报告中的有效话题总结,因此需要开启话题分析;话题功能关闭、话题 LLM 无结果或标题为空时会跳过本次自动漫画。手动 /群漫画 则会独立提取话题,不依赖报告功能开关。
下面只讲“在面板里怎么点”。
系统会按下面顺序判断,前一关没过就直接停止:
basic)auto_analysis)incremental,只决定模式,不决定放行)一句话版:
basic 决定“能不能参与自动分析” -> auto_analysis 决定“会不会自动触发” -> incremental 决定“触发后用哪种分析方式”。
inherit 不保存或复制任何名单,而是在判定时复用上一级的最终结果:
| 配置组 | 设为 inherit 后的行为 | 该组列表 |
|---|---|---|
定时分析(auto_analysis) | 直接继承基础群权限。基础白名单允许的群会参与定时分析;基础黑名单排除的群不会参与。 | 忽略 |
增量分析(incremental) | 直接继承“基础群权限 + 定时分析名单”的最终结果。通过定时分析的群全部使用增量。 | 忽略 |
因此,最省配置的组合是:基础名单填一次,定时分析设为 inherit,增量分析也设为 inherit。名单变更后,定时目标和增量消息计数状态会按新的继承结果刷新。
兼容性边界:定时分析和增量分析仍默认 whitelist,且空列表仍表示未启用,升级不会意外创建自动任务。只有显式改为 inherit,才会开始继承上一级名单。
定时分析设置。定时分析名单模式 设为 whitelist。定时分析群列表 里添加你的目标群(建议粘贴 /sid 拿到的完整会话ID)。自动分析时间列表 里填时间(例如 09:00、21:30)。增量分析设置:增量分析名单模式 设为 whitelist,并保持 增量分析群列表 为空。定时分析设置 里把 定时分析名单模式 设为 blacklist。定时分析群列表 里填“不要自动跑”的那个群。自动分析时间列表 里填每天自动运行时间。增量分析设置 把 增量分析名单模式 设为 blacklist,并把 增量分析群列表 留空。基础设置 配置群聊白名单或黑名单。定时分析设置 把 定时分析名单模式 设为 inherit。增量分析设置 把 增量分析名单模式 设为 inherit。自动分析时间列表 填入需要的时间。例如,基础白名单只填写群 A、群 B 后,定时任务只会处理 A、B,且 A、B 都会走增量;不用再把 A、B 填到后两组列表。
telegram2:GroupMessage:-1001234567890)。/sid,复制结果粘贴到列表里就行。定时分析名单模式 选 whitelist 时,如果 定时分析群列表 为空,任务不会自动跑。增量分析名单模式 选 whitelist 时,如果 增量分析群列表 为空,增量不会生效,会走普通分析。inherit 时,基础白名单为空也不会有自动目标;基础黑名单或无限制模式则会让所有未被基础名单排除的群成为自动目标。inherit 时,所有通过定时名单的群都会走增量;若只想让部分群增量,请改用 whitelist 或 blacklist。增量失败自动回退全量分析 建议保持开启,这样增量异常时也能尽量产出报告。不在“定时白名单”里,但在“增量白名单”里,会触发吗?
不会。因为会先被“定时白名单”拦住,进不到增量判断。
不在“基础群权限”里,但你开了定时分析,会触发吗?
不会。基础群权限是第一关,不通过就不会进入后续流程。
[!IMPORTANT] 多平台配置注意:
- 自动发现: 插件会自动发现已登录的 Bot 实例。
[!TIP] 自定义 LLM 服务回退机制:性能优先,策略如下:
- 尝试从配置获取指定的 provider_id
- 回退到主 LLM provider_id
- 回退到当前会话的 Provider (UMO)
- 回退到第一个可用的 Provider
/群分析 [天数]
/群分析 3 分析最近3天的群聊/群漫画 [天数]
/群漫画 3 根据最近3天群聊话题生成漫画/增量状态
/分析设置 [操作]
enable: 为当前群启用分析功能disable: 为当前群禁用分析功能status: 查看当前群的启用状态/分析设置 enable/查看模板 [模板名称或序号]
/设置模板 [模板名称或序号]
/查看模板: 查看可用模板及预览图;QQ 官方 Bot 每次展示一张,可用按钮填入翻页或切换命令,没有相关权限时使用普通消息/查看模板 [序号或名称]: 查看指定模板,例如 /查看模板 2;查看和设置仍需管理员权限/设置模板: 查看当前模板和可用模板列表/设置模板 [序号]: 切换到指定序号的模板/设置模板 1 或 /设置模板 scrapbook发送预览时会自动转为 JPEG 并复用缓存,兼容平台图片接口;WebUI 画廊仍使用 WebP。
插件原生接入 AstrBot @filter.llm_tool 规范,为宿主大模型(Agent)注入群聊分析记忆与调度能力。用户无需记忆任何 / 斜杠指令,在日常自然语言对话中即可与 AI 助手无缝交互:
群友: "今天群里聊了什么?大家都在讨论什么热点话题?"
AI: (自动调用 group_daily_analysis_get_report)
"今天群里主要讨论了两个话题:1. Docker 容器网络配置... 2. 新番讨论..."
管理员: "帮我重新分析一下今天的群聊,发到群里"
AI: (自动调用 group_daily_analysis_trigger)
"已为您提交今日群聊的异步重算任务(预计耗时约 1 分钟)。分析完成后将自动把长图推送到本群!"
| 工具标识 (Tool Name) | 操作类型 | 调用权限 | 响应时延 | 默认行为 |
|---|---|---|---|---|
group_daily_analysis_get_report群日报只读检索 | 纯只读检索 | 全体成员 | 毫秒级直出 | 提取历史快照,组装为紧凑 Markdown 返回给模型回答,0 额外 Token 消耗 |
group_daily_analysis_trigger按需分析异步触发 | 重型分析流水线 | 仅管理员 | ~500ms 异步受理 | 启动后台分析流水线(预计 1 分钟左右完成),默认自动渲染长图推送至群聊 |
只读报告检索 (group_daily_analysis_get_report):
今天、昨天、前天 以及标准 YYYY-MM-DD 格式;当指定日期尚无报告时,自动向后滑动探测最近一天的有效快照。按需异步触发 (group_daily_analysis_trigger):
render_to_chat):
render_to_chat=True):符合用户自然期待,分析完成后自动调用派发器将渲染出的高清日报长图发送至目标群聊。render_to_chat=False):当明确要求“后台更新不要发群”时,仅完成数据持久化落库,不打扰群友。[!TIP] 📖 想要了解工具调用协议细节、上下文防反问设计与 8 大 Corner Cases 边界规范?请参阅 《大模型工具 (LLM Tools) 技术规格与开发指南》。
| 平台 | 适配器类型 | 驱动与方言支持 | 特殊要求/说明 |
|---|---|---|---|
| QQ (OneBot) | OneBot v11 / v12 | 方言驱动架构:内置 NapCat、LLOneBot (LuckyLilliaBot)、SnowLuma、Standard (go-cqhttp / Lagrange / onebots / WeChatBridge) 驱动 | 插件通过 get_version_info / get_version 自动探测并动态绑定最佳方言驱动;支持多端群相册、群文件多级解包、协议端真实头像与全链路观测日志。 |
| QQ 官方机器人 | QQ Bot API v2(WebSocket/Webhook) | 官方统一 API | 需开启群全量消息;只分析启用后实时缓存的消息;图片/HTML 优先显示事件昵称,缺失时使用群内稳定匿名名;Markdown 文本使用成员艾特。 |
| Discord | Discord | Discord Gateway | 必须 拥有 Read Message History (查看消息历史记录) 权限。 |
| Telegram | Telegram Bot API | Telegram Bot API | 若机器人不是群管理员,入群前需先在 BotFather 关闭隐私模式 (/setprivacy -> Disable)。若机器人已在群内且非管理员,关闭后需要先移出机器人再重新拉入,设置才会生效。 |
[!TIP] OneBot 协议端方言驱动架构特性:
插件采用了开放闭合原则 (OCP) 的方言驱动解耦架构,在连接时自动探测后端实现并无缝自适应:
- NapCat.Onebot:支持标准逆序分页、独有的
upload_file_stream分块流式上传大图/兜底、get_qun_album_list群相册列表与协议端真实头像解析。- LLOneBot (LuckyLilliaBot):支持相册上传专属
files列表参数、相册列表data: list数组解包与多层嵌套兼容。- SnowLuma:支持专属
message_id锚点分页拉取群历史(不传reverseOrder)、精准识别result=120/rejected发送拒绝与禁言错误。- Standard (go-cqhttp / Lagrange / onebots / 微信桥接 WeChatBridge):
- 真实用户头像:针对微信/企业微信接入等映射数字 ID 场景,优先通过
get_stranger_info/get_user_info获取真实头像 URL(带 1 小时正缓存与并发去重),失败时自动回退官方 CDN 并进入 10 分钟负缓存,杜绝重复无效请求。- 群文件与相册多级解包:自动兼容
data.folders、data.album_list、顶层列表等不同协议端返回格式,确保文件夹自动创建与归档不回退。- 全链路可观测日志:动作发起、参数目标、原始响应 Payload 与解析降级流转全景上报,方便快速诊断排障。
[!IMPORTANT] QQ 官方机器人用户注意: 插件同时支持 AstrBot 的
qq_official与qq_official_webhook平台。
- 在群聊中需要由群主允许机器人接收群内全部消息,使 AstrBot 能收到
GROUP_MESSAGE_CREATE事件;只开放 @ 消息时,报告只能覆盖 @ 机器人的聊天。- QQ 官方 API 不提供“按群拉取历史消息”的接口。插件会从启用后开始实时保存消息,并从 AstrBot 本地消息历史库分页读取;启用前的群聊无法自动回填。
- 官方群和成员使用
group_openid/member_openid,不是群号或 QQ 号。配置白名单、定时任务时建议先在群内执行/sid,填写完整 UMO。- 官方群事件提供有效昵称时会用于报告;昵称缺失时使用群内稳定匿名名,避免直接展示
member_openid。- QQ 官方文本报告使用自定义 Markdown,并默认通过 AstrBot T2I 生成透明背景的群聊概览图,将日期、基础统计和 24 小时竖向直方图合并为紧凑布局。可在
QQ 官方机器人配置组关闭;渲染失败时自动回退为包含文字条形图的完整文本报告。- Markdown 概览图直接使用 AstrBot T2I 返回的公网 URL。请确保当前 T2I 端点域名已加入 QQ 开放平台的消息 URL 配置。
- 本次适配只覆盖普通 QQ 群,不包含频道或子频道。
[!CAUTION] Discord 用户重点注意: 如果机器人无法获取群列表或分析报
403 Forbidden,请检查 Discord 开发者面板中:
- Privileged Gateway Intents: 开启
Message Content Intent。- 频道权限: 确保机器人所在的频道,对应的角色拥有 “查看消息历史记录” 权限。
[!IMPORTANT] Telegram 用户重点注意:
- 如果 TG Bot 不是群管理员,务必在拉入群前先关闭 BotFather 隐私模式。
- 如果 Bot 已经在群里且不是管理员,关闭隐私模式后必须先移除再重新拉入群,否则新设置不会生效。
注:群聊隐私模式关闭流程:
@BotFather→左下角Open→选择要调整的bot→Bot Settings→将Group Privacy关闭
[!WARNING]
- 性能考虑: 大量消息分析可能消耗较多 LLM tokens
- 数据准确性: 分析结果基于可获取的群聊记录,可能不完全准确
增量分析模式是为了解决消息量大的群聊(如日均消息 > 500 条)在单次分析时容易丢失上下文的问题。
核心特性:
启用方法:
incremental_group_list_mode + incremental_group_list 指定哪些群走增量模式,并使用 incremental_min_messages 设置每批触发消息数。如果你希望在群里发送的不是图片,而是一个可以点击跳转的精美网页链接,可以使用 HTML 格式输出。
basic 设置中将 output_format 改为 html。html_output_dir):设置 HTML 文件在服务器上的保存路径。留空则默认保存在插件数据目录。html_base_url):这是关键。如果你使用 Nginx/Apache 等 Web 服务器将上述目录映射到了公网,请在这里填写访问的前缀(如 https://report.example.com)。html_base_url 拼接成完整链接发送到群里。插件支持深度的“人格化”分析,让 AI 能够以特定的人设风格(口吻、偏好、语气)来产出摘要和锐评。
插件在构建分析任务时,会按以下顺序确定最终使用的“人设状态”:
强制使用插件指定人格 并选择 ID。此时 全平台、所有群聊 都会统一使用这一种人设,忽略群聊本身的设置。继承会话人设风格。插件会尝试识别当前群聊在 AstrBot 中设置的人格(如通过 /persona 指令设置的人设)。如果该群已有人设,分析报告将尽量模拟其说话倾向。插件支持动态加载和实时识别用户自定义或第三方的报告视觉排版模板:
custom_t2i_templates/reporting_templates/<模板英文或拼音目录名>/(例如 custom_t2i_templates/reporting_templates/genshin/)。image_template.html:长图海报主骨架(接收并组合以下各小模块生成的 HTML 片段)。html_template.html:独立网页报告主骨架。topic_item.html:话题总结列表模块(渲染 topics_list)。user_title_item.html:群友称号与画像模块(渲染 titles_list、头像与 MBTI 标签)。quote_item.html:群友金句与锐评模块(渲染 quotes_list)。activity_chart.html:24小时活跃轨迹折线图/热力图模块(渲染 chart_data)。chat_quality_item.html:群聊质量多维锐评模块(渲染质量得分与维度评价)。image_template.html),插件的 Jinja2 多层回退引擎会自动使用默认手账模板(scrapbook)中对应的小模块 HTML 作为兜底加载,确保即使子模块不全也能稳定渲染。https://github.com/owner/repo,支持 /tree/<分支>)自动下载安装,
或直接上传 zip 压缩包;安装后立即生效,可随时通过「卸载模板」移除。
内置模板不可卸载,仅可卸载通过安装器下载的自定义模板。
📖 完整模板制作指南(变量契约、回退机制、打包规范、调试、贡献清单)见
《报告视觉模板开发指南》,参考示例仓库:lingyun14beta/daily-analysis-report-theme。插件会在每次正常启动时记录当前版本与配置结构。后续只要检测到配置结构发生变化,就会把上一次正常加载的插件配置快照保存到插件数据目录(注意不是插件目录)的 config_backups;文件名包含旧版本和备份时间,只保留最新二十份。插件版本仅用于标识备份来源,不是备份条件;调整描述或提示文本不会生成备份。日志会显示旧版本、备份文件名和完整路径。通过 WebUI 修改配置后,请正常重载插件或重启 AstrBot,使该配置成为下一次升级可保护的快照。
官方内置模板(src/infrastructure/reporting/templates/)与用户自定义模板(data/plugin_data/astrbot_plugin_qq_group_daily_analysis/custom_t2i_templates/reporting_templates/)完全解耦分离。内置模板跟随插件统一升级维护,自定义模板可在 WebUI「安装模板」或通过独立目录存放,无需改动源码,升级不丢失。
AstrBot 更新插件时会先删除旧插件目录,再解压或移动新目录,并在实例化插件前依据新 schema 清理旧配置项。因此升级保护依赖上一次正常启动预先保存的配置快照。WebUI 每次保存都会自动重载插件,正常保存过的配置会成为下一次升级可保护的快照。
现象:
后台日志出现 [warn] ... 似乎是旧版客户端 ... [error] ... 获取不到带记录的引用消息。
原因: 这是由于 NapCat/NTQQ 消息 ID 格式变动、消息过期或临时会话限制导致的。机器人尝试降级使用旧版序号查找失败。
忽略:如果只是偶尔出现(如回复久远消息),不影响机器人核心功能(收发消息),可以直接忽略。
496e7465726e616c... 的排查指南[!WARNING] 常见报错特征:
[群分析插件] 渲染引擎返回了非图片数据: HTTP 500 (Internal Server Error) ...[群分析插件] 渲染结果似乎不是有效的图片数据 (头部: 496e7465726e616c2053)playwright._impl._errors.TimeoutError: Page.goto: Timeout 50000ms exceeded. navigating to "file:///app/data/rendered_....html", waiting until "load"
十六进制 496e7465726e616c2053 转为 ASCII 文本即为 Internal S(Internal Server Error)。说明 T2I 渲染服务在调用 Playwright / Chromium 无头浏览器生成T2I时遭遇了内部错误或超时,向 AstrBot 返回了 HTTP 500 纯文本而非合法的 PNG/JPEG 二进制图片流。
[!IMPORTANT] 排查手段 1:外链大字体包/图片 CDN 下载阻塞(国内服务器高发)
- 每轮单独配置资源:在插件 WebUI 的「图片渲染方案」点击「添加渲染方案」(AstrBot 配置页为「添加条目」),选择海外、内地或自定义 T2I 方案,再修改这一轮的模板 CDN、Google Fonts 和 Gstatic 地址。AstrBot 配置页使用下拉预设和“自定义地址”入口,保存后会显示并保留实际地址;插件 WebUI 可直接在选框中输入。两端共用配置,已打开的页面需重新打开后查看另一端的修改。CDN 需支持
/gh/和/npm/。使用前请测试T2I服务所在网络的速度和可达性;「检测可用性」检查的是机器人服务器,远程 T2I 仍需实际生成报告确认。- 自定义服务的字体加载方式:通常保持「在线字体」。已在T2I服务安装字体,或字体下载经常超时且愿意接受备用字体时,可选择「使用已安装字体」;只影响本轮图片报告,素材图片仍需 CDN。安装位置、完整字体清单及适用情况见字体安装指南。
- 配置多轮回退:可为不同轮次填写不同 CDN,也可以只更换字体地址。优先级越小越先执行,同优先级按列表顺序执行;资源地址变化时重新准备 HTML,成功后停止。所有轮次共用 5 分钟总等待上限。独立 HTML 报告和模板预览采用第一优先级方案的资源地址。
- 先单独测试渲染服务:三种方案均有「测试渲染」按钮,不用先保存,也不消耗大模型 Token 或向群里发消息。海外/内地方案可测试 AstrBot 默认配置,或已有群聊绑定的配置;自定义方案测试当前填写的地址和 Token。测试小图不加载外链字体和图片,不能代替完整报告的素材检查。容器名称支持下划线,但两个容器需要网络互通;配置示例见渲染方案与容器网络说明。
- 添加自定义T2I服务:添加时可选「海外方案」「内地方案」或「自定义 T2I 方案」。前两种跟随本群绑定的 AstrBot 配置,未配置地址时仍由框架使用官方服务。自定义方案默认填入
http://127.0.0.1:8999/text2img,可修改地址并填写可选 Token,兼容官方独立服务与 插件形式的 T2I 服务。它直接连接指定服务,不读取 AstrBot 地址或环境代理。T2I超时默认 20 秒,请求等待上限默认 40 秒,两项可独立设置,为服务内部切换备用地址和返回图片留出时间;停止操作与五分钟总上限仍生效。自定义方案的资源环境默认海外,可切换内地;空资源地址跟随环境预设,手填地址优先。容器中的127.0.0.1指向该容器,其他容器或宿主机服务需填写对应地址。本地T2I不会自动缓存外链素材。- 查看升级前的配置:在「数据管理 → 存储空间概览 → 配置自动备份」点击「查看备份」,可以查看旧版本、备份时间和原始 JSON 层级。升级时先归档旧快照再迁移配置,正常保存后同步更新保护快照;旧资源项不再长期保留在正式配置中。没有历史快照时只能使用预设,无法自动找回已被宿主清理的旧地址。
- 默认与旧配置:初始提供海外(优先级 10)和内地(优先级 20)两项方案(均为 PNG、高分辨率、20 秒),默认 CDN 保留原地址。旧方案缺少资源字段时,升级会将原环境级地址补入方案并保存一次;已有的新字段和自定义图片保留。之后每轮独立生效,新字段留空使用该预设的默认地址。保存后列表按优先级排列,同优先级保持原顺序;清空列表后恢复上述两项,已有非空列表不会自动增加条目。渲染成功但缺少个别素材时,不会自动进入下一轮。
- 原因:Playwright
page.goto默认使用wait_until="load"策略,会阻塞等待 HTML 报告中引入的所有外链 CSS、字体包及角色立绘图片全部下载完毕。部分精美模板包含 30MB+ 的中文字体文件或引用的海外 CDN(如 jsDelivr/Fastly),若国内服务器网络波动,50 秒内未全部下载完毕便会触发超时抛出 500。- 解决方案:
- 优先走 IPv4 路由(推荐):国内云服务器(如腾讯云/阿里云)默认启用了 IPv6,但访问海外 CDN 经常遭遇 IPv6 握手黑洞(超时等待 15~30s)。在宿主机编辑 ,追加 强制系统优先走 IPv4。
[!IMPORTANT] 排查手段 2:容器化部署未挂载共享数据卷 (Volume)
- 原因:AstrBot 生成的 HTML 报告保存在宿主机的
astrbot_data目录;如果 T2I 服务容器在启动时未正确挂载该目录,容器内部的 Chromium 访问file:///app/data/rendered_*.html时将找不到该文件,直接抛出TimeoutError或ERR_FILE_NOT_FOUND。- 解决方案:检查 Docker / Podman 启动参数,确保挂载了与 AstrBot 相同的数据卷:
# T2I 容器必须挂载 AstrBot 数据目录至 /app/data 与 /AstrBot/data -v /path/to/astrbot_data:/app/data \ -v /path/to/astrbot_data:/AstrBot/data
[!TIP] 排查手段 3:无头环境 Chromium 沙箱或共享内存限制
- 原因:在资源受限环境下,Chromium 渲染大型高清图片容易因
/dev/shm共享内存不足(默认仅 64MB)或系统 seccomp/沙箱策略拦截导致浏览器进程假死崩溃。- 解决方案:为 T2I 服务容器补充以下安全参数与内存分配:
--shm-size=1g \ --security-opt seccomp=unconfined \ -e PLAYWRIGHT_CHROMIUM_SANDBOX=0
# Podman 部署环境
podman logs -f --tail 100 astrbot-t2i-service
# Docker 部署环境
docker logs -f --tail 100 astrbot-t2i-service
头部: 1f8b0800...):
[!NOTE] 更换 T2I 端点或自部署参考:
- Hugging Face 服务:
https://huggingface.co/spaces/clown145/astrbot-t2i-service- API 接口地址:
https://clown145-astrbot-t2i-service.hf.space
- 说明:
- 复制空间:可访问上方空间地址并点击 Duplicate Space 复制到自己的账号下使用。
- 配置填写:在 AstrBot 系统配置 中填入相应的 API 地址(格式通常为
https://用户名-空间名.hf.space)。- 稳定性:上方地址为维护者提供 T2I 服务(国外网络环境),在一段时间内大概率稳定,但不保证长期有效,如果自己不想部署可以使用。
- 休眠保活:由于免费空间若长时间(约 48 小时)无人访问会进入休眠。可选择使用保活服务(如 UptimeRobot)定期访问 API 地址以保持其处于唤醒状态。
- 国内加速:
https://t2i.vercel.ciallo.de5.net
- 说明: 在国内直接访问原始域名下载图片可能较慢,可选择使用此代理域名。在一段时间内大概率稳定。
我们非常欢迎社区参与插件的开发与改进!
如果你希望:
👉 请参阅完整的 贡献指南 (CONTRIBUTING.md)。
❤️ 特别感谢所有 Contributors 的贡献 ❤️
[!TIP] 如果这个项目对你的生活或工作有帮助,或者你对它的未来发展感兴趣,请给这个项目一个 Star。这是维护这个开源项目的动力 <3
MIT License
欢迎提交Issue和Pull Request来改进这个插件!
/etc/gai.confprecedence ::ffff:0:0/96 100