1、立项背景和目标
立项背景:我此前写过多个 Python 后端项目(机器人、接口服务等),每开一个新项目都要重复搭一遍脚手架:路由注册、参数校验、依赖管理、配置读取、数据库连接、鉴权、异常处理……业务代码量还不到脚手架的一半;而当多个业务服务要跑在同一台服务器上时,端口占用和路由冲突又成了新问题。写机器人时还有一类特殊痛点:QQ 协议事件类型多、回调无序,业务逻辑散落成一堆 if/else,新增一个功能要到处找入口。
项目目标:分两层——① 自研一个"多应用微内核"后端框架 YianCloud,用"约定优于配置"把路由、依赖注入、中间件、生命周期、多数据源全部自动化,一次搭建、按应用隔离扩展、单入口按域名分发;② 在框架之上落地一个完整的 AI 社交机器人应用"小逸安"作为框架的能力验证与业务载体,覆盖 LLM 对话、实时 WebSocket、小游戏、自动化审批等典型场景。
2、软件功能、核心功能模块的介绍
① 框架内核(core / bootstrap / infrastructure):
- 全项目扫描与自动装配:启动时递归扫描所有 .py 文件,把类注册进自研 DI 容器,按基类自动区分控制器/中间件/生命周期并完成装配,业务代码零注册、零布线;
- 自动路由:控制器的包路径 + 类名自动转换为 REST 路径(如 ChatController → /api/chat),方法名即 HTTP 动词(get/post/put/delete/patch,支持 ws),每个子应用自带独立 Swagger 文档;
- 依赖注入容器:单例缓存 + 构造函数类型注解递归注入 + 循环依赖检测;
- 洋葱模型中间件(自研纯 ASGI 桥接):App-Key 接口鉴权、文档与 WS 路径白名单、本机免验;
- 统一全局异常处理与统一响应体;
- 就近配置系统:代码就近向上查找 configs/*.json、根目录兜底,密钥配置不进 Git;
- 域名网关:单入口按 Host 把不同子应用分发到各自路由与中间件链,互不冲突、可横向拆分。
② bot 应用——QQ 群机器人"小逸安"(OneBot v11 / NapCat 反向 WebSocket):
- AI 群聊/私聊:被 @ 或私聊时拉取最近 10 条聊天记录,转成大模型上下文,由 DeepSeek 按 LangGPT 人格化提示词生成 1~3 段"拟人化"回复,随机延迟 2~3 秒逐条回发,模拟真人聊天节奏;
- "球球大作战"小游戏:群指令把 QQ 用户投进 800×800 的 agar.io 式世界,AI 自动寻食/猎杀/分裂/碰撞,世界状态经 WebSocket 实时广播到前端;
- 每日运势:群指令触发,按用户当日缓存的随机幸运指数 + 毒舌文案 + 当日最高榜,固定窗口限流防刷;
- 好友/入
1、整体架构和设计思路,不同模块使用的技术栈
整体架构:采用"微内核 + 多子应用"结构——内核只做装配与治理,业务全部收敛在 apps/ 下按应用隔离,单入口按域名(Host)分发:
main.py → bootstrap/ApplicationAssembler(装配器)
├─ core/ 框架内核:AppScanner(反射扫描)、Container(DI)、ControllerRegistrar + RouteResolver(自动路由)、
│ Dispatcher + FastApiOnionBridge(洋葱中间件)、GlobalExceptionHandler(全局异常)、
│ LifecycleRegistrar(生命周期)、ApplicationGateway(域名网关)、AppFactory(子应用工厂)
├─ infrastructure/ 基础设施:Container、Config(就近配置)、Logger、DatabaseConnector(多数据源两阶段初始化)
└─ apps/bot QQ 机器人应用:engine(连接管理/事件解析/分发/插件注册)
+ events(Pydantic 事件模型)+ plugins(业务插件)
+ services(业务服务)+ providers(LLM)+ controllers(HTTP/WS 接口)
设计思路:控制器按目录结构自动映射路由、方法名即 HTTP 动词,业务方只写"做什么"不写"怎么挂";中间件、插件、生命周期全部基于基类识别 + 反射发现,新增功能即插即用;长连接(WebSocket)与 HTTP 走同一入口但互不干扰。
各模块技术栈:
- 框架内核/网关/中间件:Python + FastAPI 0.115 + Starlette(纯 ASGI 洋葱模型,不使用 BaseHTTPMiddleware)+ uvicorn;
- 数据层:Tortoise ORM(异步)+ aiomysql/PyMySQL(MySQL)+ aiosqlite(SQLite),多数据源两阶段初始化;
- 接口规范:Pydantic v2 请求/响应校验 + 每子应用独立 Swagger/OpenAPI 文档 + 统一响应体/异常码;
- 机器人层:OneBot v11(NapCat)反向 WebSocket + asyncio.Future 请求-回执配对 + Pydantic 事件模型 + 插件制事件分发引擎;
- LLM 层:OpenAI SDK 接 DeepSee