一键导入
generic-issue-log-analysis
分析当前仓库或用户明确指定的公开 GitHub issue(完整 URL 或 `#1234`)。优先读取 issue 正文和评论,按需下载日志包、截图、配置导出和崩溃转储,建立时间线后结合仓库代码、文档和必要的上游依赖判断根因,并给出修复建议或下一步排查建议。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
分析当前仓库或用户明确指定的公开 GitHub issue(完整 URL 或 `#1234`)。优先读取 issue 正文和评论,按需下载日志包、截图、配置导出和崩溃转储,建立时间线后结合仓库代码、文档和必要的上游依赖判断根因,并给出修复建议或下一步排查建议。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | generic-issue-log-analysis |
| description | 分析当前仓库或用户明确指定的公开 GitHub issue(完整 URL 或 `#1234`)。优先读取 issue 正文和评论,按需下载日志包、截图、配置导出和崩溃转储,建立时间线后结合仓库代码、文档和必要的上游依赖判断根因,并给出修复建议或下一步排查建议。 |
#1234 视为当前仓库 issue。规范化输入。
#1234 视为当前仓库 issue。获取 issue 内容。
提取附件和现场证据。
.env、docker.env、bison_config)、崩溃转储、浏览器截图(playwright 相关问题)、平台订阅配置导出。log、report、debug、crash、dump、config、trace、screenshot、bison.log、nonebot.log 等关键词。下载并解压附件。
.cache/issue-logs/issue-<number>/。建立时间线。
sub_id、platform、target、用户 ID、群号、时间戳或其他稳定标识,再追踪细节。回溯到代码和文档。
platform/(各平台爬取逻辑)、scheduler/(调度器)、send.py(推送队列)、sub_manager.py(订阅管理)、plugin_config.py(配置项)。nonebot-plugin-saa、nonebot-plugin-apscheduler、nonebot-plugin-datastore 或下游 QQ 客户端,再按需查看相关仓库或文档。区分 issue 当时环境和当前分支。
t("...")、i18n.t("...")、枚举名或内部 ID 当成最终展示文本。输出结论。
plugin_config 相关)bootstrap.py 中的数据库迁移日志(alembic 版本检查)nonebot-bison bootstrap done、[nonebot_bison] 前缀的日志、nonebot.log 中的 ERROR 级别日志。platform/ 目录),包括微博、Bilibili、B站直播、RSS、明日方舟、网易云音乐、FF14。Fetching posts from platform xxx、Failed to fetch、Cookie expired、bison_use_browser 相关日志。scheduler/ 目录),基于 nonebot-plugin-apscheduler。Job xxx triggered、scheduler log level 调整相关。send.py),使用 nonebot-plugin-saa 和队列机制。ActionFailed 异常(适配器层面)bison_use_pic_merge)send msg failed, refresh bots、send msg err、QUEUE 相关内容。plugin_config.py、.env、docker.env、bison_config)。bison_use_pic:文本转图片风控防护bison_use_browser:是否启用浏览器(playwright)bison_use_queue:是否启用推送队列bison_proxy:代理配置bison_ua:User-Agentbison_resend_times:推送失败重试次数bison_filter_log:日志过滤bison_platform_theme:平台主题映射bison_to_me:是否 at 自己触发命令connect open 等 QQ 适配器连接日志TypeError: 'type' object is not subscriptable(Python 版本不兼容)TypeError: __init__() got an unexpected keyword argument 'proxies'(httpx 版本问题)ActionFailed 等发送层异常nonebot_plugin_datastore 管理)、迁移脚本(bootstrap.py、db_migration.py)。当前数据库版本:{t},不是插件的版本,已跳过、未发现默认版本数据库,开始初始化先从 issue 文本拿到这些锚点:
再从日志里找高价值信号:
ERROR、WARNING、CRITICALFailed、Exception、ActionFailedtimeout、retrybison_ 开头的配置项相关日志playwright、browser、cookiequeue、send、refresh_botssub_id、platform、target、group_id、user_id先锁定“这一次复现”再下钻。
区分表象和根因。
COMMAND_START)。ActionFailed 异常,应优先以该层为准,再回头解释用户看到的现象。回答时只保留关键片段。
Python 版本问题:报错 TypeError: 'type' object is not subscriptable → Python 3.10 以下不支持语法,检查用户 Python 版本,建议升级到 3.10 或使用 Docker。
httpx 版本不兼容:TypeError: __init__() got an unexpected keyword argument 'proxies' → httpx 0.28.0 之后不再支持 proxies 参数,需锁定 httpx 版本或修改代理配置代码。
Bot 不理我:
COMMAND_START 环境变量是否设为 [""] 或正确前缀bison_to_me 配置决定是否需要 at bot微博漏订阅:微博平台风控更新,某些含特定关键词的微博获取不到 → 建议用户确认平台状态或使用其他平台。
无法使用后台管理页面:
HOST=0.0.0.0(远程访问时)playwright 浏览器相关:bison_use_browser=True 但浏览器未安装或崩溃 → 检查 playwright 是否正确安装,Docker 镜像中是否包含浏览器。
数据库迁移问题:日志显示“当前数据库版本:xxx,不是插件的版本,已跳过” → 数据库版本与插件版本不匹配,需要按文档执行迁移或清理重建。
维护者评论已经给出判断,但日志和代码证据并不支持:以可验证证据为准,把维护者评论当成补强而不是唯一依据。
issue 文本说“失败 / 卡死”,但对应复现日志最终成功:先明确“本次日志没有复现出用户描述的问题”,再区分是用户补错了日志,还是代码里确实存在脆弱点但这次没触发。
用户日志里的流程与当前主线代码明显不一致:先确认 issue 当时的版本、tag 或 release,不要用当前主线直接否定旧版本问题。
配置快照和实际运行日志不一致:不要立刻认定是用户表述错误,先确认配置是否在复现后又被修改、是否有多个配置文件、是否存在缓存或导出时机差异。
日志显示截图、诊断包或转储已保存,但附件里没有对应文件:把“缺失的关键证据”单独写出来,不要假装已经验证过那部分现场。
核心原则:先用日志证据定位到具体模块和操作,再阅读对应代码。严禁未看证据直接猜测代码问题。
在阅读任何代码之前,先用证据回答以下问题:
错误发生在哪个层级?
错误的直接表现是什么?
ERROR、Exception、ActionFailed)问题是否可稳定复现?
根据 Phase 1 的结论,按以下优先级阅读文档和代码:
必读文档(优先于代码)
按错误类型定位代码
| 证据指向 | 优先阅读模块 | 入口文件/关键函数 |
|---|---|---|
| 插件启动/数据库问题 | bootstrap.py, db_migration.py | 检查 alembic 版本、datastore 初始化 |
| 命令不响应 | __init__.py, matcher/ | 检查 __usage__、命令前缀匹配逻辑 |
| 平台爬取失败 | platform/<平台名>.py | 定位 fetch 方法、cookie 处理、浏览器调用 |
| 调度未触发 | scheduler/ | 检查 nonebot-plugin-apscheduler 的 job 定义 |
| 推送失败 | send.py | 定位 send_msg、refresh_bots、队列逻辑 |
| 配置不生效 | plugin_config.py + 用户的 .env 快照 | 对比配置项默认值和用户实际值 |
| 数据库读写异常 | sub_manager.py + datastore 模型定义 | 检查订阅 CRUD 操作的 SQL 和错误处理 |
如果 Phase 2 初步定位后仍未找到根因,按以下步骤深入:
建立症状到代码的追溯链
用户看到"发送失败" → send.py 中的 ActionFailed → 适配器返回的错误码 → SAA 的 send 方法 → 调用时的参数(bot_id, group_id)逐层验证,不要跳跃
对比正常场景
当需要回溯多组件调用链时
root-cause-tracing.md 中描述的回溯方法当需要引用具体代码行时,必须满足以下要求:
https://github.com/MountainDash/nonebot-bison/blob/<commit>/<path>#L14-L20<commit> 必须是本次分析实际依据的代码版本:
HEAD(主分支 main)src/platform/weibo.py:127)如果问题指向 NoneBot2 框架或上游依赖,遵循同样原则:
引用时同样使用远端 GitHub blob 链接,并标注对应 commit SHA。
| ❌ 错误做法 | ✅ 正确做法 |
|---|---|
| 看到 issue 描述后直接猜测"可能是 xxx 模块的问题" | 先用日志证据确认错误发生在哪个模块 |
| 引用代码时写"参考 send.py 第 120 行" | 给出完整的 GitHub blob 链接 |
| 只看一个模块的代码就下结论 | 追溯完整调用链,验证每层的输入输出 |
| 用当前分支代码分析旧 issue | 确认 issue 当时的版本,使用对应 commit 的代码 |
| 跳跃式归因:"可能是代理配置问题"(未验证) | 逐层排除:先确认请求是否发出 → 确认响应内容 → 定位 |
nonebot_bison/ 目录下的 Python 文件中的中文字符串admin-frontend/ 中的中文界面文案__usage__ 变量(定义在 __init__.py)blob 行号链接,用尖括号包裹。https://github.com/MountainDash/nonebot-bison/blob/<commit>/<path>#L14-L20<commit> 必须是本次分析实际依据的代码版本:
HEAD(主分支 main)https://github.com/nonebot/nonebot2/blob/<commit>/<path>#L...https://github.com/nonebot/plugin-saa/blob/<commit>/<path>#L...最终回答用这个结构:
## Issue 概要
- issue:`#1234`
- Bison 版本 / NoneBot 版本 / Python 版本 / 部署方式:
- 平台 / 订阅目标:
- 关键配置项:重点关注 `bison_use_browser`、`bison_proxy`、`bison_use_queue`、`bison_resend_times`、`COMMAND_START` 等
- 关键提示 / 报错文案:
- 用户现象:
## 附件概览
- 实际可读文件:
- 缺失或未上传的证据:
## 关键证据
<details><summary>点击此处展开</summary>
- issue 正文 / 评论:
- Bison / NoneBot 日志:
- 平台爬取日志:
- 调度器日志:
- 推送队列日志:
- 配置快照:
- 现场图 / QQ 客户端截图:
- 代码依据:如需指向具体实现,直接附远端 GitHub 行号链接
</details>
## 根因判断
- 直接结论:
- 证据链:
- 当前主线是否可能已修复:
## 修复方案
1. 代码 / 配置 / 环境层修复
2. 需要补充的测试、日志或截图
3. 如问题属于不支持场景或平台风控,应如何调整预期或改进提示
## 给用户的建议
- 用户现在可以直接尝试的动作(检查配置、更新版本、更换部署方式、检查 Cookie)
- 是否建议升级 Bison 版本 / NoneBot 版本 / Python 版本
- 是否有临时绕过方案(关闭某些配置、切换平台、使用代理)
- 是否参考官方文档中的已知 [FAQ](https://nonebot-bison.netlify.app/usage/)
## 给修复 AI 的建议(可复制)
<details><summary>点击此处展开</summary>
~~~text
现象:
[一句话描述用户可见的问题]
关键证据:
[粘贴原始日志、堆栈、监控截图中的关键文本]
可能相关线索(待验证):
[根据日志/现象推测的可能方向,不保证准确,供参考]
~~~
</details>
## 置信度
- 高 / 中 / 低
- 还缺什么证据
bison_use_browser)、按钮名,优先先在代码中确认对应文案和配置项。blob 行号链接,用尖括号包裹,不要给本地路径加行号。