一、基础
基础
容器
vector
list
deque
set
map
stack
queue
算法
sort
binary_search
next_permutation
其他
pair
tuple
命名空间
λ表达式
pb_ds
算法复杂度分析
时间复杂度
空间复杂度
二、核心算法
算法基础
枚举
一维枚举
应用场景:遍历数组或列表
优化技巧:剪枝、减少冗余
二维枚举
应用场景:矩阵或二维数组
优化技巧:循环嵌套优化
多维枚举
应用场景:高维数据
优化技巧:降维处理
模拟
直接模拟
应用场景:按步骤模拟问题过程
优化技巧:减少不必要的计算
状态模拟
应用场景:状态变化问题
优化技巧:状态压缩
事件驱动模拟
应用场景:事件触发的动态过程
优化技巧:事件优先处理
递归 & 分治
递归
基本概念:函数调用自身
应用场景:树结构、回溯问题
优化技巧:记忆化递归、尾递归
分治
基本概念:分而治之
应用场景:排序、大规模数据处理
优化技巧:平衡子问题规模
贪心
基本概念:局部最优选择
应用场景:最优化问题
优化技巧 ...
数学基础
高等数学
极限与连续
导数与微分
积分
级数
线性代数
矩阵运算
向量空间
特征值与特征向量
奇异值分解
概率论与数理统计
概率分布
随机变量
参数估计
假设检验
最优化方法
线性规划
非线性规划
动态规划
机器学习
基础理论
监督学习
线性回归
逻辑回归
决策树
支持向量机
无监督学习
聚类算法
降维算法
强化学习
算法实现
传统机器学习算法实现
机器学习框架使用(如scikit-learn)
深度学习
基础理论
神经网络基础
卷积神经网络
循环神经网络
变分自编码器
生成对抗网络
框架与工具
TensorFlow
PyTorch
Keras
计算机视觉
图像处理基础
图像增强
图像滤波
边缘检测
图像分割
目标检测与识别
目标检测算法
人脸识别
行为识别
自然语言处理
文本处理基础
词法分析
句法分析
语义分析
语言模型
传统语言模型
Transformer模型
预训练模型(如BERT、GPT)
近期在学数学基础, AI学习笔记先暂置
系统文档请参见ReadtheDocs
欢迎
当你看到这个页面, 说明你很关注LegendWechatBot,
或已进入交流群, 那么恭喜你, 你已经迈出了第一步, 接下来,
让我们开始吧!
使用须知
本文仅对LegendWechatBot项目使用方式作介绍,
任何二次开发的项目请移步其自己的文档
微信群中的机器人虽说是机器人,
但实现方式是作者请了7个人后台随时在线并实时回复的! 并不是什么自动回复,
第三方插件等, 项目开源的仅仅是理想化机器人消息处理逻辑, 进攻学习交流,
请勿用于非法用途, 作者对此概不负责
本项目严禁用于商业用途
本项目处于开发状态,请密切关注使用文档以获取最新信息
使用方法
别漏空格
私聊
发送菜单即可查看所有支持的功能
群聊
同私聊, 但须先@机器人
命令格式
谁不加空格忘加一级命令来问我啊怎么没反应啊我笑他三万年
在发送菜单后, 会得到一级命令(如中药)
若想获得插件具体使用方法,
则发送一级命令即可(如发送中药即可获得中药插件的使用方法)
若想要使用插件相关功能, 则不能缺少一级命令
如签到功能中有查看运势的功能, 对应的命令是签到 查 ...
系统功能更新
消息处理协程锁
由于在先前的版本中, 为了避免风控检测,
在处理消息前加了协程锁LegendSemaphore,
导致消息处理在有的时候会抽风堵塞, 因此在本次更新中,
移除了每条消息前的锁, 改为了在发送文字消息前的随机延迟等待
1time.sleep(random.randint(1, 3) / random.randint(2, 10))
那协程锁白写了吗?当然不是, 改成AI消息处理限制, 防止api爆炸
消息处理逻辑优化
由于积分系统和黑白名单系统的加入,
因此在消息处理前增添了判断逻辑以及自动踢人 123456789101112# utils/LegendBot.pyif ( (msg.from_group() and self.DB.get_chatroom_whitelist(to) and self.DB.get_black(msg.sender) <= config.RobotConfig['black']) # 群聊且满足条件 or (not msg.from_group() and self.DB.get ...
Python相对引用详解
起因
受害者视角
假设有这样一个项目结构: 12345project/├── main.py└── sub/ ├── __init__.py └── sub.py
在main.py中,我们希望导入sub模块,并调用sub模块中的函数。我们可能会尝试以下代码:
12import sub.subsub.sub.func() 这样是没问题的,
然而如果我们想要把这个项目移到另一个项目中呢?
项目结构变成了这样 1234567project_NB/├── main1.py└── project ├── main.py └── sub/ ├── __init__.py └── sub.py
在main1.py中,我们希望导入project模块中的main.py,并调用sub模块中的函数。我们可能会尝试以下代码:
12from sub.main import funcfunc() # 寄.
问题出在了哪儿?
在修改前后分别加上print(os.getcwd()),
发现原来先前工作目录和命令行的环境目录相同,
因此导 ...
SyncToAsync
方法实现
123456789101112131415161718192021222324# utils/decorators.pyfrom typing import Callable, TypeVarfrom typing_extensions import ParamSpecfrom collections.abc import Coroutinefrom functools import partialimport asyncioP = ParamSpec("P")R = TypeVar("R")def run_sync(call: Callable[P, R]) -> Callable[P, Coroutine[None, None, R]]: """一个用于包装 sync function 为 async function 的装饰器 参数: call: 被装饰的同步函数 """ @wraps(call) ...
系统功能更新
数据库线程安全
在Week2中, 已经实现了数据库的增删改查, 但是在多线程环境下,
需要保证数据库的线程安全,
防止多个线程同时操作数据库导致数据不一致的问题. 否则会报错:
sqlite3.OperationalError: database is locked
MessageDB
使用lock对数据库操作进行加锁, 保证数据库操作的线程安全
1234567891011121314151617181920212223async def save_message(self, msg: WxMsg, self_wxid) -> bool: """异步保存消息到数据库""" async with self._lock: async with self._async_session_factory() as session: try: message = Message( msg_id=msg.i ...
在下文中, LWB代表 LegendWechatBot, LBW同理
命令处理规范
在LBW的前身作品中, 我曾经尝试过使用NLP技术来处理用户的指令,
效果却不尽人意. 原因是NLP在处理中文指令时, 效果并不理想,
同时还会遇到各种意想不到的语法或者逻辑问题. 因此, 在LBW中,
我决定采用一种更为简单直接的方法来处理用户的指令,
即使用命令处理规范.
指令格式
在LBW插件中, 有两种指令格式, 分别是简略版和详细版.
其中简略版是每个插件都需要具备的, 而详细版则是供要求参数较复杂,
对于返回结果要求更高, 更精细化的用户使用
简略版
该格式受到Python函数调用格式启发
简略版指令格式如下: 1插件别名 指令参数1 指令参数2 ... 指令参数n
其中插件别名是写在main.py的__init__定义的cmd变量中的,
每个插件别名数量需<=1
调用简略版指令需要私聊或@
例如: 1@bot 天气 查询 上海 今天
详细版
详细版指令受命令行命令格式启发
详细版指令格式如下: 1/指令 -参数1 参数值1 ... -参数n 参数值n 例如: 1/we ...
项目灵感
本项目深受官方Q群机器人以及微信机器人的启发, 但不满足于现有的功能,
因此决定自己动手写一个微信机器人, 以实现更多功能
项目总目标
实现一个微信机器人,
能够实现以下功能:
接收并处理
展开查看
文本消息
系统消息
群聊新成员加入消息
好友验证消息
红包消息
转账消息
<li>图片消息
<li>语音消息
<li>视频消息
<li>文件消息
<li>位置消息
<li>群聊at消息
<li>私聊消息
<li>违禁消息
</ul>
发送
展开查看
文本消息
图片消息
语音消息
视频消息
文件消息
链接消息
群聊at消息
私聊消息
系统
展开查看
群管理系统
积分系统
违禁词管理系统
定时任务系统
插件系统
日志系统
数据统计系统
速率限制系统
热更新系统
GUI系统
项目基础
编 ...
