Skip to content
dohomeworkbyzzyPublic

About

本地 Web 控制台驱动的多平台大模型机器人,支持 QQ/NapCat/OneBot、钉钉、Telegram、图片生成与语音回复。

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Multi-Platform LLM Bot

把大模型 API 接入 QQ、钉钉、Telegram 等社交平台的本地机器人控制台。当前重点支持 QQ 通过 NapCatQQ 与 OneBot v11 接入,再由本项目统一调用大模型并回复消息。

功能概览

  • QQ/OneBot、钉钉、Telegram webhook 入口
  • OpenAI-compatible、Anthropic-compatible、OpenAI Responses、Ollama 协议
  • 内置常见服务商和中转站预设,也支持自定义 base URL
  • 本地 Web 控制台与四步首次设置向导
  • 网页保存配置后立即热重载模型客户端
  • NapCatQQ 网页安装、启动、停止、重启和 OneBot 自动配置
  • 双击启动 Bot、NapCat 和浏览器控制台
  • 本地测试对话、连接检查、运行状态和实时日志
  • SQLite 会话记忆
  • 保留 doctor、test-llm 等 CLI 排障命令

快速开始(Windows)

需要 Python 3.11 或更高版本。下载项目后,直接双击根目录的:

start.bat

启动器会自动完成:

  • 检查并安装 Python 依赖
  • 没有 .env 时从安全模板创建本地配置
  • 启动已经安装的 NapCat
  • 启动 Bot 服务
  • 在浏览器打开 http://127.0.0.1:8000/

也可以在 PowerShell 中启动:

.\start.ps1

如果 PowerShell 阻止脚本执行,使用 start.bat 即可。

网页首次设置

首次打开控制台时会显示四步向导:

  1. 选择模型服务商、中转站或自定义兼容接口,填写模型和 API Key。
  2. 选择 QQ/OneBot、钉钉、Telegram 中需要的平台。
  3. 确认 OneBot API 与 NapCat WebUI 地址。
  4. 保存配置并启动;如果未安装 NapCat,控制台会在后台下载,完成后自动启动。

API Key 只写入本机 .env。管理接口返回配置时只会显示“密钥已设置”,不会把真实 Key 发送回浏览器。管理 API 也只允许从本机访问。

控制台页面

  • 总览:Bot、模型、NapCat、QQ 登录状态,当前下一步与本地测试对话
  • 模型服务:服务商、接口协议、Base URL、模型、API Key 和生成参数
  • 图片与语音:独立启用、模型、Base URL、Key、尺寸、音色、格式和生成测试
  • 平台接入:平台开关、QQ 群聊回复策略、OneBot、钉钉、Telegram 与服务监听地址
  • NapCat:安装、启动、网页内悬浮扫码登录、OneBot 自动配置、重启与连接测试
  • 运行日志:查看模型测试、QQ 消息、OneBot 发送和 NapCat 进程输出

QQ / NapCatQQ 网页流程

推荐链路:

QQ -> NapCatQQ -> OneBot v11 -> /webhook/onebot -> LLM API -> OneBot 主动回复

控制台会始终显示当前需要执行的一步。完整流程是:

  1. 在“模型服务”中保存并测试 API。
  2. 在“NapCat”中点击“安装”或首页“启动全部”。
  3. NapCat 运行后点击“登录 QQ”,控制台会直接读取 NapCat 保存的 cache/qrcode.png 并悬浮显示,无需复制地址或进入 WebUI。
  4. 登录成功后点击“自动配置”,写入 OneBot HTTP Server 和 Webhook。
  5. 点击“重启并检查”。显示 QQ 昵称和号码后即可收发消息。

NapCat 默认登录页为:

http://127.0.0.1:6099/webui/

OneBot 默认使用:

API:     http://127.0.0.1:5700
Webhook: http://127.0.0.1:8000/webhook/onebot

不要用浏览器直接测试 /webhook/onebot 的消息收发。浏览器发送的是 GET,真正的平台消息由 NapCat 使用 POST 发送。请在首页“测试对话”和 NapCat 页“测试连接”中检查链路。

图片生成与语音回复

在控制台“模型服务”页面分别启用“图片生成”和“语音回复”。媒体 API 地址和 Key 留空时,会复用当前文本模型的 Base URL 与 API Key;也可以填写另一家中转站。

中转站需要支持以下 OpenAI-compatible 接口:

POST {IMAGE_API_BASE}/images/generations
POST {TTS_API_BASE}/audio/speech

如果服务商文档中的接口地址包含 /v1,Base URL 也要填写到 /v1,例如 https://example.com/v1。

QQ 聊天指令:

/image 一座漂浮在云端的中国古城
/voice 用三句话介绍杭州西湖
帮我生成一张在窗台晒太阳的橘猫图片
给我画一只穿宇航服的布偶猫
  • /image 直接调用图片模型,生成后以 OneBot image 消息段发送。
  • /voice 先让文本模型回答,再调用语音合成,以 OneBot record 消息段发送。
  • QQ 群聊默认只有在明确 @机器人 时才会回复;可在“平台接入”中改为回复全部或关闭群聊回复。
  • 图片 API 遇到临时 TLS 断线或服务端 5xx 时会携带同一幂等标识重试一次,图片下载会自动重试三次。
  • 生成文件保存在本机 media/generated/,最多保留最近 100 个,并已被 .gitignore 排除。
  • Telegram 发送媒体需要配置可访问的 PUBLIC_BASE_URL;QQ 与本机 NapCat 可以直接使用本地文件,不需要公网地址。
  • 钉钉当前会回复文字和公网媒体链接;如需原生图片卡片,需要再接钉钉媒体上传接口。

图片和语音调用可能单独计费,因此功能默认关闭,只识别明确的媒体指令。

CLI 备用入口

网页不能启动时,可以使用以下命令排障:

python -m pip install -r requirements.txt
python -m app.cli dashboard

传统 CLI 向导仍然保留:

python -m app.cli init
python -m app.cli init --force

常用诊断命令:

python -m app.cli providers
python -m app.cli doctor
python -m app.cli test-llm
python -m app.cli install-qq
python -m app.cli qq-login
python -m app.cli configure-napcat
python -m app.cli run

配置文件

网页配置最终保存在 .env,不要提交到 GitHub。公开仓库只提交 .env.example。一般不需要手动编辑该文件。

关键字段:

LLM_PROTOCOL=openai-compatible
LLM_API_KEY=
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-v4-flash

IMAGE_GENERATION_ENABLED=false
IMAGE_API_BASE=
IMAGE_API_KEY=
IMAGE_MODEL=gpt-image-1
IMAGE_SIZE=1024x1024

TTS_ENABLED=false
TTS_API_BASE=
TTS_API_KEY=
TTS_MODEL=gpt-4o-mini-tts
TTS_VOICE=alloy
TTS_RESPONSE_FORMAT=mp3

ONEBOT_API_BASE=http://127.0.0.1:5700
ONEBOT_ACCESS_TOKEN=
QQ_LOGIN_COMMAND=
NAPCAT_WEBUI_URL=http://127.0.0.1:6099/webui/

大多数中转站使用:

LLM_PROTOCOL=openai-compatible
LLM_BASE_URL=https://你的中转站域名/v1

如果中转站明确支持 OpenAI Responses API,才使用:

LLM_PROTOCOL=openai-responses
LLM_BASE_URL=https://你的中转站域名

你这次遇到的问题总结

1. .env already exists

说明项目已经有本地配置文件。继续配置直接运行:

python -m app.cli init

完全重置配置:

python -m app.cli init --force

2. LLM API key [blank allowed] 看起来像卡住

默认输入是可见的,直接粘贴或输入 key 后按 Enter。留空也可以继续,但 doctor 会提示 LLM_API_KEY is empty。

3. 浏览器打开 /webhook/onebot 显示 405 或 200

这是正常现象。webhook 是给 NapCat/qbot POST 消息用的,不是给浏览器手动测试聊天用的。

4. QQ_LOGIN_COMMAND is empty

说明还没有安装或配置 QQ 接入层。先运行:

python -m app.cli install-qq
python -m app.cli init

如果已经安装过 NapCatQQ,也可以直接:

python -m app.cli qq-login

5. Cannot find module index.js

这是因为 NapCat 的启动命令在错误目录下运行。当前 CLI 会自动把工作目录切到 vendor/napcat,不要手动在项目根目录执行 node.exe ./index.js。

6. 能收到 QQ 消息但不回复

分两段排查:

python -m app.cli test-llm

如果这里失败,问题在大模型配置或中转站。

如果这里成功,再看 python -m app.cli run 的日志中是否出现:

OneBot active send ok

出现这行说明 QQ 主动发送成功。

7. sub2api / 中转站返回 HTTP 403 error code: 1010

这通常不是 QQ 问题,也不像模型名错误,而是中转站域名前面的防护层拒绝了 API 请求。常见原因:

  • Cloudflare/WAF/Bot Fight Mode 拦截了非浏览器 API 请求
  • API 路径没有放行,例如 /v1/*
  • base URL 填成了网页登录地址,不是 API 地址
  • 中转站只支持 Chat Completions,但配置成了 Responses API

建议先改成最通用配置测试:

LLM_PROTOCOL=openai-compatible
LLM_BASE_URL=https://你的中转站域名/v1
LLM_REASONING_EFFORT=

然后运行:

python -m app.cli test-llm

成功后再启动机器人。

发布到 GitHub 前检查

确认这些文件不要提交:

  • .env
  • bot.sqlite3
  • vendor/
  • *.log
  • __pycache__/
  • .pytest_cache/

项目已经在 .gitignore 中忽略这些内容。提交前可以运行:

git status --short

确保没有 .env、数据库、NapCat 登录缓存或日志出现在待提交列表里。

如果 API key 曾经出现在终端截图、聊天记录或 Git 历史中,建议在服务商后台重新生成 key。

测试

python -m pytest

合规提醒

QQ 接入层建议使用成熟开源项目,不建议自己从零实现协议。生产使用时请注意平台规则、账号风控、用户隐私、内容安全、管理员白名单、群聊开关和审计日志。

About

本地 Web 控制台驱动的多平台大模型机器人,支持 QQ/NapCat/OneBot、钉钉、Telegram、图片生成与语音回复。

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages