Skip to main content

nonebot-plugin-wyrestorm

将 WyreStorm Product Intelligence 的 DeepSeek 售前 AI 对话和 Qwen 多模态工具接入 NoneBot2。插件负责 OneBot V11 命令、群聊/私聊会话、上下文、单轮附件与 Poster 草稿; 产品目录、Support 资料、培训文件、向量和模型调用仍由私有 WyreStorm 后端处理。

功能

  • /wys 售前问答;兼容 /ws/wyrestorm/威视问答 旧命令。
  • 群聊与私聊均可使用;按“群 + 用户”或私聊用户隔离,最多保存 12 条上下文。
  • 保留原系统的 RAG、完整系列查询、产品详情、比较和 Poster 工具调用。
  • 支持随命令发送图片、PDF、Office、文本、音频或视频,由 Qwen 工具分析或转写。
  • 显示可溯源的知识依据、工具名称和建议追问。
  • 会话与 Poster 草稿写入包外 SQLite;同一会话的并发问题串行处理。
  • Provider/真实性守门兜底不会写入历史;升级后会自动清理旧的异常轮次。
  • 会话默认闲置 24 小时自动过期,NoneBot 重启不会延长旧会话寿命。
  • 附件单轮最多 3 个、默认每个 32 MiB,使用后端随机 ID,处理后立即删除。
  • 默认拒绝私网/本机附件 URL,降低恶意消息诱导机器人访问内网的风险。
  • 后端未启动、超时、限流、配置缺失和数据目录不可写时返回安全提示。

架构与私有数据边界

OneBot V11
    ↓
nonebot-plugin-wyrestorm       可发布:仅 Python 代码、README、测试
    ↓ HTTP
WyreStorm Product Intelligence 私有部署:DeepSeek、RAG、工具 Harness
    ↓
外置知识目录                  不发布:SQLite、PPT、Excel、PDF、图片、向量

插件包不包含知识库。.gitignore 和 Poetry exclude 同时排除:

  • data/knowledge/sources/product-images/
  • *.sqlite**.db
  • *.ppt[x]*.docx*.xlsx*.pdf

不要把知识文件放入 nonebot_plugin_wyrestorm/。后续知识库迁移约定见 KNOWLEDGE_MIGRATION.md

环境要求

  • Python 3.10+
  • NoneBot2 2.3+
  • OneBot V11 适配器
  • 可访问的 WyreStorm Product Intelligence 后端

安装

从 PyPI 安装:

nb plugin install nonebot-plugin-wyrestorm
# 或
pip install nonebot-plugin-wyrestorm
# 或
poetry add nonebot-plugin-wyrestorm

然后在 NoneBot 项目的 pyproject.toml 中加载插件:

[tool.nonebot]
plugins = ["nonebot_plugin_wyrestorm"]

参与插件开发时也可以从本地目录安装:

pip install -e /path/to/nonebot-plugin-wyrestorm

配置

在 NoneBot 项目的 .env 中配置:

WYRESTORM_API_BASE=http://127.0.0.1:4173
WYRESTORM_API_TOKEN=
WYRESTORM_REQUEST_TIMEOUT=300
WYRESTORM_HISTORY_LIMIT=12
WYRESTORM_SESSION_TTL_HOURS=24
WYRESTORM_DATA_DIR=data/nonebot_plugin_wyrestorm
WYRESTORM_PUBLIC_BASE_URL=
WYRESTORM_MAX_REPLY_CHARS=2800
WYRESTORM_ATTACHMENT_MAX_BYTES=33554432
WYRESTORM_ATTACHMENT_TIMEOUT=60
WYRESTORM_ATTACHMENT_ALLOW_PRIVATE_URLS=false
配置项 默认值 说明
WYRESTORM_API_BASE http://127.0.0.1:4173 私有 AI/RAG 后端地址
WYRESTORM_API_TOKEN 后端绑定非回环地址时使用的本地管理令牌;不会写入日志
WYRESTORM_REQUEST_TIMEOUT 300 Agent/Qwen 请求超时秒数,范围 5–320
WYRESTORM_HISTORY_LIMIT 12 每个群或私聊保留的消息数,最大 12
WYRESTORM_SESSION_TTL_HOURS 24 会话闲置过期时间(小时),范围 1–720
WYRESTORM_DATA_DIR data/nonebot_plugin_wyrestorm 包外会话数据库目录
WYRESTORM_PUBLIC_BASE_URL 可由聊天客户端访问的后端公网/内网地址,用于 Poster 下载链接
WYRESTORM_MAX_REPLY_CHARS 2800 单条机器人消息的最大字符数
WYRESTORM_ATTACHMENT_MAX_BYTES 33554432 单个 OneBot 附件最大字节数,默认 32 MiB
WYRESTORM_ATTACHMENT_TIMEOUT 60 从 OneBot URL 下载附件的超时秒数
WYRESTORM_ATTACHMENT_ALLOW_PRIVATE_URLS false 是否允许附件 URL 指向私网;仅可信内网 OneBot 才应开启

DeepSeek API Key 仍在 WyreStorm 后端配置,不写入 NoneBot 插件。

使用方法

指令 权限 范围 说明
/wys <问题> 群员 群聊/私聊 向售前 AI 提问
/wys <问题> + 附件 群员 群聊/私聊 使用 Qwen 分析图片、文档、音视频
/wys 状态 群员 群聊/私聊 检查后端、数据库和当前会话
/wys 清空 群员 群聊/私聊 清空当前会话和 Poster 草稿
/wys 帮助 群员 群聊/私聊 显示帮助

示例:

用户:/wys NHD-500-TX v2 的关键参数和限制是什么?
机器人:返回知识库约束的回答、依据与建议追问。

用户:/wys 把这个产品加入 Poster
机器人:调用后端 Poster 草稿工具并保存到当前会话。

用户:/wys 输出当前 Poster
机器人:生成 Poster;配置公开后端地址后同时返回 Word/PDF 链接。

用户:/wys 请读取图中的型号和接口(同时发送图片)
机器人:临时上传图片,调用 Qwen 分析,并结合 RAG 返回结果。

若 OneBot 只返回本地文件标识而没有 urlbase64://,插件无法跨进程安全读取, 会提示调整适配器配置。可信的同机/内网 OneBot 若只提供私网 URL,可以显式启用 WYRESTORM_ATTACHMENT_ALLOW_PRIVATE_URLS=true;公网机器人不建议开启。

OneBot V11 的群会话 ID 同时包含群号和用户号,因此同一群的不同成员不会共享上下文; 不同群与不同私聊也互不影响。会话会跨 NoneBot 重启保留,但闲置超过 WYRESTORM_SESSION_TTL_HOURS 后自动删除。DeepSeek 协议失败或真实性守门兜底只回复当前轮, 不会进入下一轮上下文。

启动私有后端

在原项目中运行:

npm start
curl http://127.0.0.1:4173/ready

不要把 4173 端口直接暴露到公网。跨机器部署时应使用内网、反向代理、TLS 与访问控制。

原功能迁移对照

原项目功能 NoneBot 插件实现位置 是否完成 备注
发送 AI 消息 matcher.py + client.py 调用原 /api/v1/presales-agent/messages
最多 12 条上下文 models.py + session_store.py 改为服务端会话持久化
群聊/私聊隔离 event.get_session_id() 群号 + 用户隔离、私聊独立
RAG 与真实性守门 私有 Node 后端 不复制知识数据或 Agent 规则
产品工具调用 私有 Node 后端 保持现有 Harness
Poster 草稿 session_store.py 随会话持久化
Poster Word/PDF formatter.py 部分 已生成链接;不直接上传群文件
浏览器结构化卡片 formatter.py 已适配 转为 OneBot 纯文本与分段消息
图片/文档/音视频附件 attachments.py + client.py 单轮临时上传、SSRF 防护、完成后删除
Qwen 多模态状态 /wys 状态 显示附件工具是否可用
浏览器对话导出 Bot 聊天记录由平台/会话数据库保存
知识库本体迁移 KNOWLEDGE_MIGRATION.md 待后续 本阶段明确不进入 Git/PyPI

开发与测试

poetry install
poetry run python -m compileall nonebot_plugin_wyrestorm
poetry run pytest
poetry run ruff check .
poetry build

构建后应检查 wheel/sdist 内容,确认不存在 SQLite、Office/PDF、图片或知识目录。

许可证

MIT。产品知识、产品图片和原始资料不属于插件发布物,也不随本许可证分发。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_wyrestorm-0.1.2.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nonebot_plugin_wyrestorm-0.1.2-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_wyrestorm-0.1.2.tar.gz.

File metadata

  • Download URL: nonebot_plugin_wyrestorm-0.1.2.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.11.15 Darwin/25.5.0

File hashes

Hashes for nonebot_plugin_wyrestorm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 837615ca77b196f4e4716c658c4eecb4022b7f5cc968e7d672f47d64251f67a7
MD5 c7a91d1344ff57124f97cf1e770f93dc
BLAKE2b-256 9f7046a7914e02c24f7e8965b730a78ce108827fd850abae8b7153c76b67db33

See more details on using hashes here.

File details

Details for the file nonebot_plugin_wyrestorm-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_wyrestorm-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d2a95b5cc7c0ded68afcebf69cc70e70425cdc9714d82037c996e819c4117d86
MD5 65e9ada7150844206b956fb7aef0bfda
BLAKE2b-256 984765cabbb8dfa99038bf7cfd7eca0e11e063676d57b424a165eddcda666970

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page