上周大体上完成了测试工程,今天开始做 QChatGPT 的重构。
启动流程方面
今天完成了 启动脚本的重写,main.py 暂时使用 start.py 替换。新增 boot 包,其中的 boot.py 为新的启动流程,包外部 start.py 简单地调用 boot.py 中的 main()。
启动流程拆分为了(boot包下)deps.py(依赖处理模块)、files.py(文件生成模块)、log.py(日志系统初始化模块)、config.py(配置文件加载模块),由boot.py逐个调用。
现在(今后)将运行时对象都保存在 pkg/boot/app.py 模块的 Application 类中,并使用依赖注入的形式进行实例化,逐步弃用 context。
目前删除了原启动流程的以下步骤:配置线程池(线程池将被移除)、要求用户从stdin输入未设置的admin_qq(现在只会以warning级别告诉用户未设置管理员)、暂时删除对urllib的警告的禁用、已移除upgrade_dependencies对应的操作
已修改表现行为的原启动流程的以下步骤:日志现在不再设置到logging模块的默认logger,而是设置一个名为qcg的logger(日志记录方均暂未修改,使用默认logger现在将在前方标记[DEPR]);对openai库设置的正向/反向代理均移至openai.manager模块;插件初始化操作放在application的run方法中。
暂未确定实现形式的原启动流程步骤:热重载流程、IM 连接状态(异常处理)暂未实现、赞赏码(暂定删除赞赏码功能)、检查更新、检查公告(这两个原则上不应影响启动(网络问题))。
IM(qqbot包)方面
现在manager.py和adapter.py为异步优先了!YiriMirai适配器已完成所有可能的异步转换,相应地,manager的代码也大部分改成异步方法了。
暂时未确定的特性:函数超时控制、其他模块需要发送消息时的调用方式。
很糟糕的是,nakuru似乎并不支持直接异步运行,今天尝试直接调用异步方法,结果根本收不到事件,明天再调查一下。
目前qqbot包还有很多方法是同步的,虽然大部分是仅被依赖的,但还是需要考量是否要改为全异步。同时,banlist、blob、filter、response_rule之类的功能,可能需要独立成特定类实现,python的模块对DI来说还是很不友好的。
一个很严重的问题:插件兼容性。为插件提供的发送消息的几个方法现在肯定处于失效状态了,若改为异步,则插件也需要改为异步,得再设计一下。同时,虽然之前并不鼓励直接调用QChatGPT代码实现,但部分插件仍然直接使用了一些在此次重构中涉及的方法,这个需要后续发布官方API,或者与社区合作进行兼容。
可预见的下一步
根据上述的部分,qqbot包将会优先于其他包进行大量的重构,主要是将异步和DI应用到其中。
发表回复