Skip to content

Repository files navigation

Diana

住在群聊里、会主动搭话的 AI Agent —— 不用 @ 也能自然插话,还会搜索、点歌、发表情包、记住群里的约定;自托管单二进制,数据不出你的机器。

OneBot v11 · Telegram · QQ 官方机器人 · 钉钉 · 飞书 · 企业微信 —— 一个实例,同时在线

CI Release Go License

官网与文档 · 在线演示 · 下载最新版本 · English


Diana 控制台总览:通道状态、消息统计、系统资源与实时事件流

Diana 是什么

你有一个想接进群聊的 AI:让它在 QQ 群里搭话、在 Telegram 里点歌、在飞书里回答同事的问题。Diana 就是中间这一层——一个 Go 写成的单二进制服务,一头对接大模型(OpenAI 兼容接口、Gemini、Anthropic 都行),另一头同时对接六种聊天平台,中间有一个网页控制台管理一切。

它为「自己养一个机器人」的人设计:

  • 装完就能用 —— 一条命令安装,浏览器里点几下完成配置,不需要写代码。
  • 数据在你手里 —— 配置、聊天记忆、日志全部存在本机 SQLite,没有云端依赖。
  • 每一步都能解释 —— 机器人为什么回、为什么没回、调了哪个模型、花了多少 token,控制台事件中心里都查得到。
  • 能力开箱即备 —— 联网搜索、链接/文件解析、点歌、表情包、OCR、长期记忆都是内置的,开关在控制台里。

三分钟跑起来

① 安装。 一条命令,脚本自动识别系统、下载最新版、校验 SHA-256 并启动服务:

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/SuInk/Diana/main/scripts/install.sh | sudo sh

推荐使用 sudo 固定安装到 /opt/diana,并创建 /usr/local/bin/diana。没有 sudo 权限时,去掉 sudo 运行;安装器会询问是否改为仅安装给当前用户,也可显式传入 DIANA_INSTALL_SCOPE=user

# Windows PowerShell
irm https://raw.githubusercontent.com/SuInk/Diana/main/scripts/install.ps1 | iex
# Docker(预构建镜像,无需 clone 仓库)
docker run -d --name diana --restart unless-stopped \
  -p 18080:18080 \
  -v "$PWD/data:/app/data" \
  -v "$PWD/logs:/app/logs" \
  ghcr.io/suink/diana:latest

② 登录控制台。 打开 http://127.0.0.1:18080。管理员账号密码在刚才的终端输出里(Docker 方式用 docker logs diana 查看;脚本安装的还会写进安装目录的 config.yaml,别把这个文件给别人)。

③ 配置。 控制台里依次完成三件事:

  1. 「LLM 配置」页填上你的 API Key,同步模型列表,选一个默认模型;
  2. 「机器人」页选平台、填凭据(各平台要填什么见支持的平台);
  3. 给机器人发条消息试试——私聊直接回,群聊要 @ 它或用触发词开头。

就这些。没回复?事件中心会告诉你原因;diana doctor 能检查服务健康。

Tip

装在服务器上? 默认只监听本机,要从别的机器打开控制台,安装时带上 DIANA_HOST

curl -fsSL https://raw.githubusercontent.com/SuInk/Diana/main/scripts/install.sh | sudo env DIANA_HOST=0.0.0.0 sh
$env:DIANA_HOST="0.0.0.0"; irm https://raw.githubusercontent.com/SuInk/Diana/main/scripts/install.ps1 | iex

装过了也不要紧,两条路任选:带着 DIANA_HOST 重跑一遍安装命令(顺带升级一次),或者直接把配置文件里 server.host 改成 0.0.0.0 再重启。

先编辑配置(系统级安装的配置文件归 root,需要 sudo):

sudo vim "$(diana config path)"
notepad (diana config path)

找到文件开头的 server: 段,把 host 那一行从 127.0.0.1 改成 0.0.0.0(缩进两格,别动其他行):

server:
  host: 0.0.0.0
  port: "18080"

改完重启,diana restart 会自行处理服务权限:

diana restart

开放外网访问后务必套 HTTPS 反向代理、在防火墙放行端口——控制台有管理权限,不要裸奔在公网上。

Docker 细节 / 手动下载 / 源码构建

Docker: 镜像随每个版本发布(ghcr.io/suink/diana:latest 及版本号 tag)。OneBot 客户端连 ws://<宿主机>:18080/onebot/v11/ws。想预置配置(无人值守部署),把改好的 config.yaml 以只读方式挂到 /app/config.yaml;仓库里也有 docker-compose.yml 可以本地构建。升级拉新镜像重建容器即可,数据都在挂出来的 data/ 里。

手动下载:Releases 下载你平台的完整包.tar.gz / .zip,含后端、编译好的 WebUI 和启动脚本),校验 SHA256SUMS 并解压后运行 run.sh / run.bat。无需单独部署 WebUI 或安装 Node.js。Release 不再单独提供裸二进制;自定义部署可从完整包提取程序和前端资源。

包名迁移: 新完整包统一命名为 diana-<系统>-<架构>.tar.gz(Windows 为 .zip),例如 diana-macos-arm64.tar.gz。仍只识别 diana-webui-… 包名的旧版控制台不能直接自更新到新包名版本,首次需重跑上方一键安装命令或手动安装完整包;新版安装器和自更新器仍兼容旧包名。包内可执行文件保持 diana-webui / diana-webui.exe,已有服务配置不必改名。

从源码: 需要 Go 1.26+ 与 Node.js 22。

git clone https://github.com/SuInk/Diana.git && cd Diana
cd frontend-next && npm ci && npm run build && cd ..
go build -o dist/diana-webui ./cmd/webui
./dist/diana-webui

更多部署形态(systemd、交叉编译、无人值守预置配置)见部署文档

支持的平台

启用的机器人配置会同时在线,回复始终回到消息来的那个通道。

平台 要准备的凭据 连接方向
OneBot v11(NapCat、Lagrange.Core、go-cqhttp 等) OneBot 客户端里配好反向 WebSocket 指向 Diana,双方约定一个 access token 客户端 → Diana,无需公网
Telegram BotFather 的 Bot Token(国内网络通常还要代理地址) Diana 主动出站,无需公网
QQ 官方机器人 开放平台的 AppID + AppSecret(未上架可用沙箱) Diana 主动出站,无需公网
钉钉 应用的 Client ID + Client Secret(Stream 模式) Diana 主动出站,无需公网
飞书 App ID + App Secret + Verification Token(加密推送再加 Encrypt Key) 平台回调 → Diana,需要公网地址
企业微信 企业 ID + AgentId + Secret + 回调 Token/EncodingAESKey 平台回调 → Diana,需要公网地址

飞书和企业微信要填到对方后台的回调地址,机器人页会直接显示出来。各平台功能上的细微差异(比如 QQ 官方机器人只收得到 @ 消息、语音仅 OneBot 可用)见配置文档

内置能力

这些能力随程序自带,在控制台里按需开关和配置,不需要安装插件:

  • 主动搭话 —— 不用 @ 也能自己判断什么时候插话、什么时候保持安静,回不回、为什么,事件中心都有记录(依赖平台推送全量群消息,QQ 官方机器人和钉钉只推 @ 消息,这两处不适用)。
  • 联网搜索 —— 时效性问题先检索再回答,Exa 优先、Tavily 兜底。
  • 链接解析 —— B 站 / YouTube / X / 小红书 / 抖音的视频图片直接解析发到群里。
  • 文件解析 —— 群文件、PDF、Office、EPUB 的内容提取后交给模型理解。
  • 点歌 —— 「放首稻香」就能收到一条语音;网易云、QQ 音乐、酷狗多曲库自动切换。
  • 表情包 —— 从群里见过的表情包中挑一张合适的发出去。
  • 图片识别 —— 视觉模型 + OCR(支持完全离线的本地方案),纯文本模型也能「看」图。
  • 画图出图 —— 表格、流程图、时序图这类纯文本讲不清的东西,模型自己判断该出图时渲染成图片发出来(Markdown / Mermaid / SVG,需要「网页渲染」插件提供的无头浏览器)。
  • 记忆与笔记本 —— 分层记忆控制 token 消耗;重要的事(群规、忌口、约定)记进笔记本,可审可改可恢复。
  • 群级策略 —— 每个群独立的回复时段、黑白名单、人设和工具权限。
  • 内置 Agent —— 最小工具循环,可用文件、命令、浏览器工具,支持装载 Skills 和 MCP 服务。
  • 对外 API —— 让 CI、监控脚本借机器人的嘴发通知(默认关闭,Bearer 密钥鉴权)。

每项能力的完整说明见配置文档

日常管理

装好之后 diana 命令就在 PATH 里:

diana status    # 运行状态、版本、地址
diana logs -f   # 跟着看日志
diana restart   # 重启服务
diana doctor    # 体检:配置、目录、前端资源、服务健康

升级:重跑一遍安装命令,或直接在控制台里点升级。两条路都会先备份数据、校验新版本,健康检查不过自动回滚。Docker 部署则是拉新镜像重建容器。

卸载diana uninstall 移除服务和程序、保留数据(重装即可恢复);diana uninstall --purge 连数据一起删,不可恢复,会二次确认。

配置去哪改

一句话原则:平时的配置都在控制台网页里改,config.yaml 只管服务本身。

config.yaml(在安装目录)负责监听地址、端口、数据路径、管理员初始密码这类基础设施项,改完要重启。机器人和模型的配置存在数据库里,控制台改了立即生效——config.yaml 里的 bot: / llm: 段只在第一次启动、数据库还是空的时候播种一次,之后再改不会生效(启动日志会明说),这是给无人值守部署准备的。

会话上下文固定按机器人配置档隔离,同平台的不同机器人也不会因群号或用户 ID 相同而共用上下文。旧配置中的 isolate_platform_contexts 字段不再生效,原设置接口已移除。此前共享的历史保留在原位置,不会自动分配给各机器人;消息互通及单独启用的跨平台公共记忆不受影响。

媒体缓存支持内容去重与可配置清理,文件和数据库日志按保留策略维护;升级健康检查成功后清理临时备份。配置优先级、历史文件保留、备份与回滚边界见缓存与磁盘维护

完整字段和注释见 config.example.yaml

安全须知

  • 控制台强制登录,无匿名接口;密码错误按来源 IP 退避锁定,防爆破。
  • API Key、token、OAuth 令牌落库后不再回传明文,读接口只说「已配置」。
  • 套了反向代理必须在 config.yaml 里声明 trusted_proxies(或给进程设环境变量 DIANA_TRUSTED_PROXIES),否则限流和日志里的来源 IP 都会变成代理地址。
  • 配好主人账号后可用「快速登录」:登录页取一个 6 位验证码,私聊发给机器人即登录,机器人会回执来源 IP 和设备,被冒用能当场发现。

更多细节(会话管理、豁免路径、Agent 命令白名单)见配置文档

参与开发

后端 Go(Gin + SQLite),前端 Vue 3 + TypeScript(frontend-next/)。本机起全套开发环境:

make dev        # 后端 :18080 + Vite 前端 :5173,热更新
go test ./...   # 后端测试

提交前保证 gofmt 干净、go mod tidy 无 diff、后端测试与前端 vue-tsc 通过,CI 会检查这几项。目录结构、发布流程等约定见 AGENTS.md

文档

部署 各种安装方式、服务器部署、首次登录
配置 通道接入、模型分配、群策略、内置能力、安全边界
实现 架构、消息决策链路、记忆分层
记忆检索 长期与跨平台召回、关联扩展、按需查阅和隐私边界
运维 更新回滚、日志备份、故障排查
在线演示 真实控制台 + 模拟数据,随便点

许可证

Limited Redistribution License (SuInk),详见 LICENSE

About

住在群聊里、会主动搭话的 AI Agent —— 不用 @ 也能自然插话,还会搜索、点歌、发表情包、记住群里的约定;自托管单二进制,数据不出你的机器。OneBot v11 / Telegram / QQ 官方机器人 / 钉钉 / 飞书 / 企业微信同时在线。

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages