| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
让你的 AI 聊天机器人像真人一样学习、思考和对话
功能特性 • 快速开始 • 架构设计 • 文档 • 贡献指南
⚠️ 使用前必读:请务必先手动备份人格到本地,以防出现BUG导致人格混乱
使用本项目即表示您已阅读、理解并同意以下条款:
合法使用承诺
- 本项目仅供学习、研究和合法用途使用
- 严禁将本项目直接或间接用于任何违反当地法律法规的用途
- 包括但不限于:侵犯隐私、非法采集数据、恶意传播信息、违反平台服务条款等行为
隐私保护责任
- 使用者需遵守《中华人民共和国网络安全法》《个人信息保护法》等相关法律法规
- 在收集和处理用户消息数据时,必须取得用户明确同意
- 不得将收集的数据用于商业目的或泄露给第三方
- 建议仅在私有环境或已获得所有参与者同意的群组中使用
使用风险声明
- 本项目按"原样"提供,不提供任何明示或暗示的保证
- 开发者不对使用本项目造成的任何直接或间接损失负责
- 使用者需自行承担数据丢失、人格错误、系统崩溃等风险
- 强烈建议在生产环境使用前进行充分测试
开发者免责
- 开发者不对用户的违法违规行为承担任何责任
- 因用户违规使用导致的法律纠纷,由用户自行承担全部责任
- 开发者保留随时修改或终止本项目的权利
协议变更
- 本协议可能随时更新,恕不另行通知
- 继续使用本项目即表示接受更新后的协议条款
📌 重要提示:下载、安装、使用本项目的任何功能,即视为您已完全理解并同意遵守以上所有条款。如不同意,请立即停止使用并删除本项目。
AstrBot 智能自主学习插件是一个全功能 AI 自主学习 聊天拟人化 解决方案。通过实时消息捕获、多维度数据分析、表达模式学习、动态人格优化和目标驱动对话,让聊天机器人能够:
两者完美互补:
配合使用可以让你的 Bot 既有学习能力,又有"读空气"的社交智能!
场景 → 表达模式 映射 "当需要表达肯定时" → "可以使用'确实如此呢'这样的表达"
# 自动学习群组特定用语
"发财了" → "表示惊喜或获得好处"
"下次一定" → "委婉拒绝的表达"
"🦌" → "xxxxx"# 自动检测对话目标并动态规划阶段
用户: "我最近工作压力好大..."
Bot: 检测目标 → emotional_support (情感支持)
规划阶段 → ["倾听诉说", "识别核心问题", "表达理解", "提供建议", "给予鼓励"]
当前阶段 → "倾听诉说"# 统一的服务创建和管理
factory_manager = FactoryManager()
factory_manager.initialize_factories(config, context)
# 服务工厂
service_factory = factory_manager.get_service_factory()
db_manager = service_factory.create_database_manager()
# 组件工厂
component_factory = factory_manager.get_component_factory()
expression_learner = component_factory.create_expression_pattern_learner()# 灵活的学习策略
learning_strategy = StrategyFactory.create_strategy(
LearningStrategyType.BATCH, # INCREMENTAL / REINFORCEMENT
config={'batch_size': 100}
)# 服务间松耦合
class MultidimensionalAnalyzer:
def __init__(self, config, db_manager, llm_adapter, ...):
self.config = config
self.db = db_manager
self.llm = llm_adapter# 数据访问层抽象
affection_repo = AffectionRepository(session)
user_affection = await affection_repo.get_user_affection(group_id, user_id)Database_Settings:
db_type: "mysql" # sqlite / mysql / postgresql(该功能暂时没有开放使用)
# MySQL 配置
mysql_host: "localhost"
mysql_port: 3306
mysql_user: "root"
mysql_password: "your_password"
mysql_database: "astrbot_self_learning"
# 自动连接池管理
max_connections: 10
min_connections: 2支持的数据库:
7. 智能对话管理
# Python 版本要求
Python 3.8+
# 安装依赖
pip install -r requirements.txt将插件添加到 AstrBot 插件目录
cd /path/to/astrbot/data/plugins
git clone https://github.com/NickCharlie/astrbot_plugin_self_learning.git启动 AstrBot
访问 WebUI 管理界面
http://localhost:7833
配置插件
# 基础开关
Self_Learning_Basic:
enable_message_capture: true
enable_auto_learning: true
enable_realtime_learning: false
enable_web_interface: true
web_interface_port: 7833
# 目标设置
Target_Settings:
target_qq_list: [] # 留空则学习所有用户
current_persona_name: "default"
# 模型配置
Model_Configuration:
filter_provider_id: "provider_id_1" # 筛选模型
refine_provider_id: "provider_id_2" # 提炼模型
# 学习参数
Learning_Parameters:
learning_interval_hours: 6
min_messages_for_learning: 50
max_messages_per_batch: 200
# 数据库配置
Database_Settings:
db_type: "sqlite" # 或 mysql / postgresqlastrbot_plugin_self_learning/ ├── core/ # 核心架构层 │ ├── factory.py # 工厂管理器(依赖注入容器) │ ├── interfaces.py # 接口定义(抽象基类) │ ├── patterns.py # 设计模式实现(策略、观察者等) │ ├── framework_llm_adapter.py # LLM 框架适配器 │ └── database/ # 数据库抽象层 │ ├── backend_interface.py # 数据库接口 │ ├── sqlite_backend.py # SQLite 实现 │ ├── mysql_backend.py # MySQL 实现 │ └── postgresql_backend.py # PostgreSQL 实现 │ ├── services/ # 服务层(业务逻辑) │ ├── message_collector.py # 消息收集服务 │ ├── multidimensional_analyzer.py # 多维度分析 │ ├── style_analyzer.py # 风格分析服务 │ ├── progressive_learning.py # 渐进式学习服务 │ ├── persona_manager.py # 人格管理服务 │ ├── expression_pattern_learner.py # 表达模式学习器 │ ├── affection_manager.py # 好感度管理服务 │ ├── jargon_miner.py # 黑话挖掘服务 │ ├── jargon_query.py # 黑话查询服务 │ ├── social_context_injector.py # 社交上下文注入器 │ └── response_diversity_manager.py # 响应多样性管理器 │ ├── models/ # 数据模型层 │ └── orm/ # ORM 模型(SQLAlchemy) │ ├── base.py # 基础模型 │ ├── expression.py # 表达模式模型 │ ├── affection.py # 好感度模型 │ ├── learning.py # 学习记录模型 │ └── social_relation.py # 社交关系模型 │ ├── repositories/ # 仓储层(数据访问) │ ├── base_repository.py # 基础仓储 │ ├── expression_repository.py # 表达模式仓储 │ ├── affection_repository.py # 好感度仓储 │ └── social_repository.py # 社交关系仓储 │ ├── webui/ # Web 界面 │ ├── app.py # Quart 应用主入口 │ └── blueprints/ # 路由蓝图 │ ├── auth.py # 认证路由 │ ├── persona.py # 人格管理路由 │ └── analytics.py # 数据分析路由 │ ├── utils/ # 工具类 │ ├── cache_manager.py # 缓存管理 │ ├── migration_tool_v2.py # 数据库迁移工具 │ └── security_utils.py # 安全工具 │ ├── config.py # 配置管理 ├── main.py # 插件主入口 └── README.md # 项目文档
目的: 统一管理服务创建,降低耦合
class FactoryManager:
"""全局工厂管理器 - 单例模式"""
def initialize_factories(self, config, context):
self._service_factory = ServiceFactory(config, context)
self._component_factory = ComponentFactory(config, self._service_factory)
def get_service_factory(self) -> ServiceFactory:
# 服务工厂:创建业务服务(数据库、学习、分析等)
return self._service_factory
def get_component_factory(self) -> ComponentFactory:
# 组件工厂:创建轻量级组件(过滤器、调度器等)
return self._component_factory优势:
目的: 灵活切换学习策略
class StrategyFactory:
@staticmethod
def create_strategy(strategy_type: LearningStrategyType, config: dict):
strategies = {
LearningStrategyType.BATCH: BatchLearningStrategy,
LearningStrategyType.INCREMENTAL: IncrementalLearningStrategy,
LearningStrategyType.REINFORCEMENT: ReinforcementLearningStrategy
}
return strategies[strategy_type](config)学习策略类型:
目的: 抽象数据访问层,支持多种数据库
class BaseRepository:
"""基础仓储 - 提供通用 CRUD 操作"""
async def get(self, id: int):
async with self.session() as session:
return await session.get(self.model, id)
async def save(self, entity):
async with self.session() as session:
session.add(entity)
await session.commit()
class ExpressionRepository(BaseRepository):
"""表达模式仓储 - 专门处理表达模式数据"""
async def get_patterns_by_group(self, group_id: str, limit: int = 10):
# 特定业务逻辑
...目的: 事件驱动架构,解耦组件
class EventBus:
"""事件总线 - 发布/订阅模式"""
def subscribe(self, event_type: str, handler: Callable):
self._handlers[event_type].append(handler)
async def publish(self, event_type: str, data: Any):
for handler in self._handlers[event_type]:
await handler(data)
# 使用示例
event_bus.subscribe("learning_completed", on_learning_completed)
await event_bus.publish("learning_completed", learning_result)┌─────────────────┐
│ 消息接收层 │ on_message() - 监听所有消息
└────────┬────────┘
│
▼
┌─────────────────┐
│ 过滤器层 │ QQFilter + MessageFilter
└────────┬────────┘
│
▼
┌─────────────────┐
│ 数据收集层 │ MessageCollector - 存储原始消息
└────────┬────────┘
│
├──────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 分析层 │ │ 学习层 │
│ - 多维度分析 │ │ - 表达模式学习 │
│ - 风格分析 │ │ - 黑话挖掘 │
│ - 社交关系分析 │ │ - 记忆图构建 │
└────────┬────────┘ └────────┬────────┘
│ │
└──────────┬─────────┘
▼
┌─────────────────┐
│ 人格更新层 │
│ - PersonaUpdater│
│ - 审查机制 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ LLM注入层 │ inject_diversity_to_llm_request()
│ - 表达模式注入 │
│ - 社交上下文 │
│ - 黑话理解 │
│ - 多样性增强 │
└─────────────────┘
工作原理:
示例:
场景: "用户需要表达赞同" 表达: "确实是这样呢" 质量分数: 0.85 创建时间: 2025-11-20 衰减后分数: 0.78 (5天后)
工作流程:
# 1. 候选词提取
candidates = await jargon_miner.extract_candidates(recent_messages)
# 输出: ["发财了", "下次一定", "真香"]
# 2. LLM 推断含义
meanings = await jargon_miner.infer_meanings(candidates, context)
# 输出: {
# "发财了": "表示惊喜或获得好处",
# "下次一定": "委婉拒绝的表达"
# }
# 3. 保存到数据库
await db.save_jargon_batch(chat_id, meanings)
# 4. LLM 请求时注入理解
jargon_explanation = await jargon_query.check_and_explain_jargon(
text="今天真是发财了!",
chat_id=group_id
)
# 注入到 LLM prompt: "文本中包含的黑话: 「发财了」: 表示惊喜或获得好处"特点:
工作原理:
38种预设目标类型:
# 情感支持类 (5种)
comfort # 安慰用户
emotional_support # 情感支持
empathy # 深度共情
encouragement # 鼓励打气
calm_down # 情绪安抚
# 信息交流类 (5种)
qa # 解答疑问
guide_share # 引导分享
teach # 教学指导
discuss # 深度讨论
storytelling # 讲故事
# 娱乐互动类 (6种)
casual_chat # 闲聊互动
tease # 友好调侃
flirt # 俏皮调戏
joke # 幽默搞笑
meme # 梗文化互动
roleplay # 角色扮演
# 社交互动类 (5种)
greeting # 问候寒暄
compliment # 赞美夸奖
celebrate # 庆祝祝贺
apologize # 道歉和解
gossip # 八卦闲聊
# 建议指导类 (4种)
advise # 提供建议
brainstorm # 头脑风暴
plan # 制定计划
analyze # 分析问题
# 情绪调节类 (3种)
vent # 倾听发泄
motivate # 激励鼓舞
complaint # 抱怨吐槽
# 兴趣分享类 (3种)
recommend # 推荐分享
review # 评价点评
hobby_chat # 爱好交流
# 特殊场景类 (3种)
debate # 友好辩论
confess # 倾诉秘密
nostalgia # 怀旧回忆
# 冲突场景类 (4种)
argument # 激烈争论
quarrel # 吵架互怼
insult_exchange # 互骂对喷
provoke # 挑衅应对会话管理:
# 会话ID生成 (24小时不变)
session_id = MD5(group_id + user_id + date)
# 会话数据结构
{
"session_id": "sess_a1b2c3d4e5f6",
"final_goal": {
"type": "emotional_support",
"name": "情感支持",
"topic": "工作压力",
"topic_status": "active"
},
"current_stage": {
"index": 2,
"task": "识别核心问题",
"strategy": "顺序推进",
"adjustment_reason": "上一阶段已完成"
},
"planned_stages": [
"倾听诉说", "识别核心问题", "表达理解",
"提供建议", "给予鼓励"
],
"metrics": {
"rounds": 5,
"user_engagement": 0.8,
"goal_progress": 0.4
},
"conversation_history": [...]
}WebUI API 接口:
# 1. 带目标引导的对话
POST /api/intelligent_chat/chat
{
"user_id": "10001",
"message": "我最近工作压力好大...",
"group_id": "123456",
"force_normal_mode": false
}
# 2. 获取用户当前目标状态
GET /api/intelligent_chat/goal/status?user_id=10001&group_id=123456
# 3. 清除用户当前目标
DELETE /api/intelligent_chat/goal/clear
{
"user_id": "10001",
"group_id": "123456"
}
# 4. 获取目标统计信息
GET /api/intelligent_chat/goal/statistics
# 5. 获取所有可用的目标类型
GET /api/intelligent_chat/goal/templates特点:
关系追踪:
# 自动记录用户互动
await social_relation_manager.record_interaction(
group_id="123456",
user_a="10001",
user_b="10002",
interaction_type="mention" # at / reply / topic_discussion
)
# 分析关系强度
strength = await social_relation_manager.calculate_relationship_strength(
group_id, user_a, user_b
)
# 输出: 0.75 (基于互动频率、类型、时间衰减)好感度管理:
# 处理用户消息互动
result = await affection_manager.process_message_interaction(
group_id, user_id, message_text
)
# 自动识别互动类型
interaction_types = {
"praise": +10, # 称赞
"encourage": +5, # 鼓励
"insult": -15, # 侮辱
"harass": -20 # 骚扰
}
# 好感度限制
- 单用户上限: 100分
- 群组总分上限: 250分
- 超额时自动衰减旧好感度两种更新模式:
# 直接在原人格末尾增量更新
await persona_manager_updater.apply_incremental_update(
group_id=group_id,
update_content="【学习成果】\n新增表达模式: ..."
)
# 优势:
# ✅ 自动创建备份人格
# ✅ 无需手动执行应用命令
# ✅ 更好的版本管理# 临时存储到 persona_updates.txt
await temporary_persona_updater.write_to_updates_file(content)
# 手动审查后应用
/apply_persona_updates
# 优势:
# ✅ 人工审核把关
# ✅ 批量应用更新人格审查流程:
1. AI 生成更新建议 → 保存到 style_learning_reviews 表 2. 管理员登录 WebUI → 人格审查页面 3. 查看对比(原始 vs 建议) → 红色高亮显示修改 4. 决策:批准 / 拒绝 5. 批准后自动应用到人格
| 命令 | 权限 | 说明 |
|---|---|---|
| /learning_status | 管理员 | 查看学习状态和统计信息 |
| /start_learning | 管理员 | 手动启动学习批次 |
| /stop_learning | 管理员 | 停止自动学习循环 |
| /force_learning | 管理员 | 强制执行一次学习周期 |
| /clear_data | 管理员 | 清空所有学习数据 (⚠️不可逆) |
| /export_data | 管理员 | 导出学习数据为 JSON |
| 命令 | 权限 | 说明 |
|---|---|---|
| /affection_status | 管理员 | 查看好感度状态和排行榜 |
| /set_mood <类型> | 管理员 | 设置 Bot 情绪状态 |
情绪类型: happy sad excited calm angry anxious playful serious nostalgic curious
| 命令 | 权限 | 说明 |
|---|---|---|
| /persona_switch <名称> | 管理员 | 切换到指定人格 |
| /persona_info | 管理员 | 显示当前人格详细信息 |
| /temp_persona apply | 管理员 | 应用临时人格 |
| /temp_persona status | 管理员 | 查看临时人格状态 |
| /temp_persona remove | 管理员 | 移除临时人格 |
| /temp_persona extend [分钟] | 管理员 | 延长临时人格时间 |
| /temp_persona backup_list | 管理员 | 列出所有备份 |
| /temp_persona restore <文件名> | 管理员 | 从备份恢复人格 |
| 命令 | 权限 | 说明 |
|---|---|---|
| /apply_persona_updates | 管理员 | 应用 persona_updates.txt 中的更新 |
| /switch_persona_update_mode | 管理员 | 切换人格更新方式 (manager/file) |
| /clean_duplicate_content | 管理员 | 清理重复的历史内容 |
| /analytics_report | 管理员 | 生成数据分析报告 |
# ========================================
# 基础开关
# ========================================
Self_Learning_Basic:
enable_message_capture: true # 启用消息抓取
enable_auto_learning: true # 启用定时自动学习
enable_realtime_learning: false # 启用实时学习(每条消息)
enable_web_interface: true # 启用 Web 管理界面
web_interface_port: 7833 # Web 界面端口
# ========================================
# 目标设置
# ========================================
Target_Settings:
target_qq_list: [] # 学习目标 QQ 号列表(空=全部)
target_blacklist: [] # 学习黑名单
current_persona_name: "default" # 当前人格名称
# ========================================
# 模型配置(使用 AstrBot Provider)
# ========================================
Model_Configuration:
filter_provider_id: "provider_gpt4o_mini" # 筛选模型(弱模型)
refine_provider_id: "provider_gpt4o" # 提炼模型(强模型)
reinforce_provider_id: "provider_gpt4o" # 强化模型
# ========================================
# 学习参数
# ========================================
Learning_Parameters:
learning_interval_hours: 6 # 自动学习间隔(小时)
min_messages_for_learning: 50 # 最少消息数才开始学习
max_messages_per_batch: 200 # 每批处理的最大消息数
# ========================================
# 筛选参数
# ========================================
Filter_Parameters:
message_min_length: 5 # 消息最小长度
message_max_length: 500 # 消息最大长度
confidence_threshold: 0.7 # 筛选置信度阈值
relevance_threshold: 0.6 # 相关性阈值
# ========================================
# 风格分析
# ========================================
Style_Analysis:
style_analysis_batch_size: 100 # 风格分析批次大小
style_update_threshold: 0.6 # 风格更新阈值
# ========================================
# 好感度系统
# ========================================
Affection_System_Settings:
enable_affection_system: true # 启用好感度系统
max_total_affection: 250 # Bot 总好感度上限
max_user_affection: 100 # 单用户好感度上限
affection_decay_rate: 0.95 # 好感度衰减比例
daily_mood_change: true # 启用每日情绪变化
mood_affect_affection: true # 情绪影响好感度变化
# ========================================
# 情绪系统
# ========================================
Mood_System_Settings:
enable_daily_mood: true # 启用每日情绪
enable_startup_random_mood: true # 启用启动时随机情绪
mood_change_hour: 6 # 情绪更新时间(24小时制)
mood_persistence_hours: 24 # 情绪持续时间(小时)
# ========================================
# 目标驱动对话系统
# ========================================
Goal_Driven_Chat_Settings:
enable_goal_driven_chat: false # 启用目标驱动对话系统
goal_session_timeout_hours: 24 # 会话超时时间(小时)
goal_auto_detect: true # 自动检测对话目标
goal_max_conversation_history: 40 # 最大对话历史记录数(轮次)
# ========================================
# 数据库设置
# ========================================
Database_Settings:
db_type: "sqlite" # 数据库类型: sqlite / mysql / postgresql
# MySQL 配置(db_type="mysql"时生效)
mysql_host: "localhost"
mysql_port: 3306
mysql_user: "root"
mysql_password: "your_password"
mysql_database: "astrbot_self_learning"
# PostgreSQL 配置(db_type="postgresql"时生效)
postgresql_host: "localhost"
postgresql_port: 5432
postgresql_user: "postgres"
postgresql_password: "your_password"
postgresql_database: "astrbot_self_learning"
postgresql_schema: "public"
# 连接池配置
max_connections: 10
min_connections: 2
# 重构功能配置
use_sqlalchemy: false # 使用 SQLAlchemy ORM
use_enhanced_managers: false # 使用增强型管理器
# ========================================
# 社交上下文设置
# ========================================
Social_Context_Settings:
enable_social_context_injection: true # 启用社交关系注入
include_social_relations: true # 注入用户社交关系
include_affection_info: true # 注入好感度信息
include_mood_info: true # 注入 Bot 情绪信息
context_injection_position: "start" # 注入位置: start / end
# ========================================
# 高级设置
# ========================================
Advanced_Settings:
debug_mode: false # 调试模式
save_raw_messages: true # 保存原始消息
auto_backup_interval_days: 7 # 自动备份间隔(天)
use_enhanced_managers: false # 使用增强型管理器
enable_memory_cleanup: true # 启用记忆自动清理
memory_cleanup_days: 30 # 记忆保留天数
memory_importance_threshold: 0.3 # 记忆重要性阈值
# ========================================
# 存储设置
# ========================================
Storage_Settings:
data_dir: "./data/self_learning_data" # 数据存储目录欢迎开发者参与项目建设!
本项目采用 GPLv3 License 开源协议。
感谢以下项目的启发和支持:
本节内容补充说明文档顶部的用户协议,两者具有同等法律效力
⚠️ 重要:
| Back | FazBrowse Home | New Git URL |