Skip to main content
logo

NoneBot-Plugin-Advisor

基于 OpenAI 兼容格式的跨平台 LLM 客服。让机器人像一个真人客服一样为你的项目提供支持:读文档、查日志、看截图、在图上圈注并回发、必要时联网搜索。

  • 跨平台:基于 nonebot-plugin-alconna + nonebot-plugin-uninfo
  • 定时从文档仓库(git)拉取 md / 图片,并用视觉模型给每张图片建立描述索引
  • @ 机器人提问 → agent 检索文档回答,口吻自然、短句、不甩长文、不输出 Markdown,引导用户一步步排查
  • 用户发来的图片 / txt / log 会自动进入会话的“内存文件系统”,agent 可用工具按行读取、搜索关键词
  • 引用消息里的图片/文件也会进入会话
  • 提供图片标注工具:画矩形/椭圆/箭头/高亮、写不超过 10 个字的文字,标注后随回复回发给用户
  • 可联网搜索(SearXNG / Bing 兜底)

📦 安装

nb plugin install nonebot-plugin-advisor

或在项目里安装后,在 pyproject.toml 的 [tool.nonebot] 中加入:

plugins = ["nonebot_plugin_advisor"]

依赖:nonebot2 >= 2.5、nonebot-plugin-alconna、nonebot-plugin-uninfo、nonebot-plugin-localstore、nonebot-plugin-apscheduler、openai >= 3.8、pillow、httpx、curl-cffi

⚙️ 配置

在 .env / .env.prod 中配置(环境变量前缀 ADVISOR_):

# ── LLM(OpenAI 兼容) ──
ADVISOR_LLM_BASE_URL=https://api.openai.com/v1
ADVISOR_LLM_API_KEY=sk-xxxx
ADVISOR_LLM_MODEL=gpt-4o-mini
# 视觉模型(图片描述/索引用)。留空则尝试使用主模型
ADVISOR_VISION_MODEL=

# ── 人设 / 行为 ──
ADVISOR_NICKNAME=小顾
ADVISOR_PRODUCT_NAME=NoneBot
ADVISOR_KB_DESCRIPTION=关于 NoneBot 的官方文档
ADVISOR_ACK_TEXT=收到~我帮您看下,稍等一下哦
ADVISOR_IMAGE_INLINE=false   # 是否把用户图片直接以多模态塞给主模型(主模型需支持看图)

# ── 联网搜索 ──
ADVISOR_ENABLE_WEB=true
# 自建 SearXNG(推荐,无 key);留空自动退回 Bing
ADVISOR_SEARXNG_URL=

# ── 文档知识库:定时拉取仓库并给图片做视觉索引 ──
ADVISOR_KB_SOURCE=            # git 仓库地址或本地目录;留空禁用
ADVISOR_KB_BRANCH=
ADVISOR_KB_SYNC_CRON=0 3 * * *   # cron;留空且 INTERVAL>0 时用间隔
ADVISOR_KB_SYNC_INTERVAL=0       # 分钟;都为 0 则仅启动时同步一次
ADVISOR_KB_MAX_IMAGES_PER_SYNC=50

完整配置项

配置项 必填 默认值 说明
ADVISOR_LLM_BASE_URL 是 https://api.openai.com/v1 OpenAI 兼容接口地址
ADVISOR_LLM_API_KEY 是 无 密钥(留空则客服不启用)
ADVISOR_LLM_MODEL 否 gpt-4o-mini 客服主模型
ADVISOR_VISION_MODEL 否 空 视觉模型(描述/索引图片)
ADVISOR_LLM_TEMPERATURE 否 0.3 温度
ADVISOR_LLM_MAX_TOKENS 否 1500 单次回答上限
ADVISOR_NICKNAME 否 小顾 客服昵称
ADVISOR_PRODUCT_NAME 否 空 服务的产品名
ADVISOR_KB_DESCRIPTION 否 空 知识库范围的一句话描述
ADVISOR_REPLY_TRIGGER 否 true 群聊回复机器人也算对话
ADVISOR_MENTION_ONLY 否 true 群聊必须 @ 才应答
ADVISOR_ACK_TEXT 否 收到~… 先回复的提示语;留空关闭
ADVISOR_IMAGE_INLINE 否 false 图片以多模态直接喂给主模型
ADVISOR_HISTORY_MAX_TURNS 否 12 记忆的最大轮数
ADVISOR_CONVERSATION_TTL 否 3600 会话空闲多久遗忘(秒)
ADVISOR_UPLOAD_MAX_BYTES 否 30MB 单个附件大小上限
ADVISOR_UPLOAD_MAX_LINES 否 10000 文本文件最多行数(可按行读)
ADVISOR_ENABLE_KNOWLEDGE 否 true 文档工具开关
ADVISOR_ENABLE_FILES 否 true 文件读取工具开关
ADVISOR_ENABLE_IMAGE_TOOLS 否 true 看图/标注工具开关
ADVISOR_ENABLE_WEB 否 true 联网工具开关
ADVISOR_AGENT_MAX_ROUNDS 否 12 单次最多调用工具次数
ADVISOR_SEARXNG_URL 否 空 SearXNG 地址;空则 Bing
ADVISOR_SEARCH_MAX_RESULTS 否 5 每次搜索条数
ADVISOR_KB_SOURCE 否 空 文档仓库 git url / 本地目录
ADVISOR_KB_BRANCH 否 空 分支(git 时有效)
ADVISOR_KB_SYNC_CRON 否 空 定时同步 cron
ADVISOR_KB_SYNC_INTERVAL 否 0 定时同步间隔(分钟)
ADVISOR_KB_MAX_IMAGES_PER_SYNC 否 50 每次最多索引图片数
ADVISOR_KB_REBUILD 否 false 强制全量重建索引

🎉 使用

对话

  • 群聊:@机器人 <问题>;支持直接发截图 / txt / log / 引用带图消息。
  • 私聊:直接发消息即可。
  • 发送后机器人会先回一句“收到”,随后以客服口吻给出短回复并引导你一步步排查;必要时会在你发的图上画框标注并回发给你,配一句“照着红框这里点一下”。

指令

指令 权限 说明
客服重置 / advisor reset 所有人 清空当前会话记忆
客服帮助 / advisor help 所有人 查看使用说明
客服状态 / advisor status 所有人 查看 LLM / 工具 / 知识库状态
客服同步 / advisor sync 超级用户 立即拉取并重建文档仓库 + 图片索引

知识库

配置 ADVISOR_KB_SOURCE 后:

  • 插件启动时会先同步一次(后台进行,不阻塞启动);
  • 按 ADVISOR_KB_SYNC_CRON 或 ADVISOR_KB_SYNC_INTERVAL 定时更新;
  • 每次同步会拉取 git 仓库,收集全部 md/mdx 文档与图片;新增/变更的图片会调用视觉模型生成描述,写入本地索引(localstore 数据目录下的 knowledge/kb_index.json)。

agent 回答时会通过 search_kb / read_kb_doc 检索文档,并可用 send_kb_image 把文档里的截图发给用户,或先标注再发送。

提示:知识库内容缓存于本地数据目录,可随时用 客服同步 手动刷新;机器人重启后索引仍在(文档/图片索引持久化),只有聊天记忆与上传附件是内存态、重启即清空。

🧠 工具一览

工具 作用
search_kb / read_kb_doc / list_kb_docs 检索、按行阅读知识库文档
list_kb_images / describe_kb_image / send_kb_image 查看/发送文档插图
list_files / read_file / search_file 查看用户上传的文件、按行读、搜关键词
inspect_image 查看用户图片(尺寸 + 视觉描述)
annotate_image / send_image 在图上画矩形/箭头/文字(≤10 字)并回发
web_search / open_url 联网搜索与抓取网页

📁 目录结构

src/nonebot_plugin_advisor/
├── __init__.py        # 插件入口:matcher、控制命令、定时调度
├── config.py          # 全部配置项
├── agent.py           # agent 工具调用主循环
├── llm.py             # OpenAI 兼容客户端(对话/视觉)
├── toolkit.py         # 工具集(文档/文件/图片/搜索)
├── docs_store.py      # 知识库:git 拉取 + md/图片索引 + 检索
├── session_store.py   # 会话内存虚拟文件系统 + 对话历史
├── media.py           # 从 UniMessage 抽取文本/图片/文件/引用
├── imageops.py        # 图片标注(Pillow,归一化坐标)
├── searcher.py        # 联网搜索
├── prompts.py         # 客服人设提示词
└── utils.py           # 通用工具

🧪 开发 / 测试

uv sync
uv run pytest        # 跑测试
uv run ruff check .  # lint
uv run ruff format . # 格式化

📄 协议

MIT

Metadata

Release files for nonebot-plugin-advisor 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nonebot-plugin-advisor 0.0.2
File Size Uploaded
nonebot_plugin_advisor-0.0.2.tar.gz 44.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nonebot-plugin-advisor 0.0.2
File Interpreter ABI Platform
nonebot_plugin_advisor-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 96.2 kB

Release files / nonebot_plugin_advisor-0.0.2.tar.gz

Download URL nonebot_plugin_advisor-0.0.2.tar.gz
Size 44.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e3e762d8c0defccd76fe01fc7a24163a45fd0c1561b0211c5cf15ca55f8e1712
BLAKE2b-256 checksum
How to use checksums
5503fa575e7115955d9edbcc2cab3b4d6a53604b0e4f25409508a604166c324b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / nonebot_plugin_advisor-0.0.2-py3-none-any.whl

Download URL nonebot_plugin_advisor-0.0.2-py3-none-any.whl
Size 51.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
38ee67bed2a80548e8042112fa32181ed04734ead89c25bc83376053ac6d4cc7
BLAKE2b-256 checksum
How to use checksums
a2d94f563cd1f844e746533f6488e2fe35b2ce7e81e2758c3f27295887b55b59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page