跳转至

架构总览

业务真源在 Python,Electron 只做平台层。本文说明这条分界怎么落到目录上、进程之间谁拉起谁,以及三条不能越过的硬性边界。

业务域已经从 TypeScript 迁到 Python:Electron 只做平台层——窗口、托盘、屏幕采集、键鼠活动,对话、记忆、人格、日程、主动行为全在 Python 后端。进程治理也在 Python 一侧:它是入口,拉起并监护 QQ 适配器与可选的桌宠外壳,Electron 只连接后端,不启动也不终止任何进程。这样服务器上不再需要为了跑一个 QQ 机器人先装图形环境。

目录形状:src/ 是 Python 包根,按「内核 / 桌宠 / 平台适配器」分成三个包,入口在仓库根的 bot.py;Electron 那一侧整体收在 electron/,管理面板的前端在 webui/

bot.py              进程入口

src/                业务真源(Python 包根)
  main.py           启动装配:读配置、建服务、拉 uvicorn
  core/             内核:与出口无关的业务真源
    agent/          人设、动作协议与解析、认知动作、观察 Agent、表达习惯、反思
    llm_models/     OpenAI 兼容的流式对话、多厂商路由与每次调用的落盘记录
    memory/         三层记忆、分词、遗忘曲线
    persona/        按人好感度 + 全局精力 → 自然语言行为指令
    awareness/      前台归类、键鼠强度、兴趣值、意图队列、睡眠状态
    schedule/       24h 生成式日程
    services/       按职责分组的业务服务
      chat/         对话编排:ChatService 主体与按职责拆开的十个 mixin
      media/        图片理解、表情包、TTS
      maintenance/  联想边衰减、黑话学习与统计、向量索引、反馈纠错
      console/      回合追踪与分层面板的控制台呈现
      host/         QQ 适配器与桌宠外壳的子进程监护、生命周期编排
      dev/          开发者命令、事件重放、提示词记录
      proactive.py  主动搭话
    tooling/        统一工具协议:内置动作、插件与 MCP 共用一张表
    commands/       开发者命令注册表
    observe/        管线事件账本、冻结的阶段 ID、事件广播
    platform_io/    出口契约:桌面的流式出口与 QQ 的整句出口共用同一套
    prompts/        外置提示词模板、占位符校验与版本归档
    api/            FastAPI 路由与 WebSocket
    webui/          管理面板的静态资源托管与日志接口
    config/         配置 schema 与多文件 TOML 加载
    db/             SQLite 连接、表结构与版本迁移链
    logging/        结构化日志、控制台配色与中文别名、JSONL 落盘
    runtime/        统一时钟、子进程监护、后端连接坐标、启动自检
  desktop/          桌宠专属:前台归类、屏幕视觉、传感器
  platforms/onebot11/ QQ 适配器宿主,由入口拉成独立进程

webui/              管理面板前端(React + Vite),构建产物出到 out/webui

electron/           Electron 端(TypeScript)
  main/             主进程(持有 API Key)
    platform/       ★ 系统调用适配层,迁移 Tauri 只需重写这里
    python/         Python 后端的连接管理与 HTTP/WS 客户端(只连不拉)
  preload/          最小化 IPC 桥
  renderer/         画面(不可信内容的运行环境,无凭证)
    character/      CharacterView 接口 + 立绘差分实现
  shared/           两端共用的类型与 IPC 契约

scripts/            check 校验 / maintain 数据维护 / eval 跑数评估
                    / migrate 数据迁移 / sprite 生图管线

三条硬性边界:

  • Python 后端不得依赖任何 Electron API
  • API Key 只存在于主进程和 Python 后端。渲染层要显示模型生成的内容,给它凭证等于把 Key 放进不可信环境
  • Python 只监听 127.0.0.1,且所有接口都要过 token 鉴权