Erii 是一个具有情感、记忆、心流和主动行为的 AI 群聊机器人。Erii 能够像真人一样参与群聊对话,主动插话、破冰,并根据情绪状态调整说话风格。同时还支持 事项提醒和自我规则管理,可通过文件系统管理行为规则。
✨ 核心特性:
- 🎭 情绪系统:基于 PAD 模型,模拟真实情感反应
- 🧠 长期记忆:多维度记录用户画像、偏好和群聊事实
- 🌊 心流机制:根据话题投入程度动态调整参与深度
- ⚡ 主动行为:基于冲动值进行插话、破冰和日常互动
- 📜 自我规则管理:文件系统规则存储,多级作用域控制
- 📋 事项提醒:定时任务提醒,AI 自然语气推送
- PAD 三维情绪模型 - Pleasure(愉悦度)、Arousal(激活度)、Dominance(优势度)
- 动态情绪调节 - 根据对话内容实时调整情绪状态
- 情绪表达 - 影响回复语气、表情符号使用、回复延迟
- 长期心情 - 维护基础心情基调,影响整体行为倾向
- 多维度记忆 - 用户画像、偏好设置、事实知识、对话摘要
- 三级作用域 - 全局记忆、群组记忆、成员-群组记忆
- 语义检索 - 基于向量相似度的智能记忆召回
- LLM 驱动 - AI 自动提取和管理长期记忆
- 投入度量化 - 0-100 心流值,三阶段状态机
- 话题匹配 - 遇到感兴趣话题快速进入心流状态
- 专注机制 - 高心流时锁定对话目标,过滤无关干扰
- 过热保护 - 模拟疲劳感,避免过度输出
- 冲动值计算 - 基于情绪、心流、关键词计算主动发言欲望
- 三种插话模式 - 插话(Interrupt)、破冰(Icebreak)、日常(Routine)
- 识相机制 - 检测严肃话题、群体情绪,避免不合时宜发言
- 疲劳抑制 - 主动发言后积累疲劳值,防止刷屏
- 文件系统存储 - 规则以 Markdown 文件存储,支持热重载
- 多级作用域 - 全局规则 > Bot 规则 > 群组规则
- AI 可控 - Agent 可通过 ToolSet 创建/删除规则
- 安全防护 - 路径遍历保护和文件名校验
- 定时提醒 - 支持单次和重复提醒任务
- 自然推送 - AI 生成自然的提醒语气,避免系统化表达
- 重复任务 - 支持 Cron 表达式定义重复提醒
- 作用域管理 - Bot/Group 级别隔离
- 词汇学习 - 自动学习群聊中的新词汇和梗
- 语义理解 - 记录词汇含义、使用场景和语气
- 自然融入 - 在合适场景自然使用学习到的群聊用语
- 梗提取 - 从群聊中自动提取流行语和梗
- 向量存储 - 语义向量表示,支持相似度检索
- 热度追踪 - 跟踪高频词汇的使用频率和流行度
| 插件 | 类型 | 说明 |
|---|---|---|
| speech | AgentExtension | 语音合成插件,使用 MiniMax TTS 将文字转为语音发送 |
| lolisuki | RouteExtension | 二次元图片插件,从 lolisuki.cn 获取并发送图片 |
| net-ease-music | PassiveExtension | 网易云音乐插件,搜索音乐并发送音乐卡片 |
| qa | RouteExtension | AI 问答插件,通过网络搜索直接回答问题 |
| qq-face | PassiveExtension | QQ 表情插件,语义匹配发送合适的表情 |
| seeddream | RouteExtension | AI 图片生成插件,支持文生图和图生图 |
| animal | AgentExtension | 虚拟宠物养成插件,角色扮演与好感度系统 |
- 上下文理解 - 引用历史对话和长期记忆
- 多 Persona - 支持多 Bot 角色配置
- 情绪共鸣 - 感知群体氛围,调整参与方式
在开始之前,确保已安装以下环境:
- JDK 17+
- Gradle 8.0+
- NapCat - QQ 接入服务
- LLM API Key - Google Gemini / DeepSeek / MiniMax API
-
克隆仓库
git clone https://github.com/spcookie/Erii.git cd Erii -
配置环境变量 复制环境变量模板并编辑:
cp .env.local.template .env.local nano .env.local
主要配置项:
CHOICE_MODEL: 选择 LLM 提供商(GOOGLE / DEEP_SEEK / MINIMAX)- 对应的 API Key 配置
NAPCAT_TOKEN: NapCat 认证令牌ENABLE_GROUPS: 启用的群组列表
-
配置机器人 复制配置文件模板并编辑:
cp application.conf.template application.conf nano application.conf
主要配置项:
llm.choice-model: 选择 LLM 提供商(GOOGLE / DEEP_SEEK / MINIMAX)onebot.bots: 配置 QQ 机器人连接信息groups.enable-groups: 启用的群组列表
-
启动开发服务器
./gradlew run
启动 Erii 主服务
docker-compose up -d启动 NapCat QQ 接入服务
cd docker/napcat-docker && docker-compose up -d启动 Playwright 浏览器服务
cd docker/playwright-docker && docker-compose up -d- 语言: Kotlin 1.9+
- Web 框架: Ktor 2.3+
- 构建工具: Gradle 8.0+
- 数据库: H2 (嵌入式)
- ORM: Exposed
- 依赖注入: Koin
- 任务调度: JobRunr
- 机器人框架: Mirai + Overflow
- 接入服务: NapCat (WebSocket)
- LLM: Google Gemini API / OpenAI Compatible API
- 插件框架: PF4J
- SPI 接口: erii-spi 模块定义扩展点
| 命令 | 说明 |
|---|---|
./gradlew compileKotlin |
编译 Kotlin 代码 |
./gradlew build |
构建整个项目 |
./gradlew run |
启动开发服务器 |
./gradlew buildFatJar |
构建包含所有依赖的可执行 JAR |
./gradlew buildImage |
构建 Docker 镜像 |
./gradlew test |
运行所有测试 |
Erii/
├── erii-common/ # 📦 公共模块
│ └── src/main/kotlin/uesugi/common/
│ ├── EventBus.kt # 异步/同步事件总线
│ ├── BotRole.kt # Bot 角色定义
│ ├── ChatToolSet.kt # 聊天工具集
│ └── ...
├── erii-core/ # 🧠 核心模块
│ └── src/main/kotlin/uesugi/
│ ├── Application.kt # Ktor 应用入口
│ ├── config/ # 配置和 DI
│ │ ├── IOC.kt # Koin 依赖注入配置
│ │ ├── LLMFactory.kt # LLM 工厂
│ │ └── ...
│ ├── core/
│ │ ├── agent/ # AI Agent
│ │ │ └── BotAgent.kt # 核心 AI Agent
│ │ ├── route/ # 路由系统
│ │ │ └── RoutingAgent.kt # LLM 路由
│ │ ├── state/ # 核心 AI 状态系统
│ │ │ ├── emotion/ # 情绪系统
│ │ │ ├── memory/ # 记忆系统
│ │ │ ├── flow/ # 心流系统
│ │ │ ├── volition/ # 主动行为系统
│ │ │ ├── reminder/ # 事项提醒系统
│ │ │ ├── rule/ # 规则管理系统
│ │ │ ├── evolution/ # 进化系统
│ │ │ └── meme/ # 梗系统
│ │ ├── bot/ # Bot 角色管理
│ │ │ └── BotRoleManager.kt
│ │ ├── message/ # 消息处理
│ │ │ └── history/ # 历史记录服务
│ │ ├── plugin/ # 插件实现
│ │ ├── rule/ # 规则引擎
│ │ └── component/ # 组件
│ │ ├── browser/ # 浏览器(截图/Markdown抓取)
│ │ ├── embedding/ # 向量嵌入
│ │ ├── search/ # 搜索服务
│ │ └── storage/ # 存储(向量/对象)
│ └── server/ # HTTP API 路由
├── erii-spi/ # 🔌 SPI 接口模块
│ └── src/main/kotlin/uesugi/spi/
│ ├── AgentExtension.kt # Agent 扩展接口
│ ├── PluginDefinition.kt # 插件定义注解
│ └── processor/ # 注解处理器
├── erii-plugins/ # 🎨 插件模块
│ ├── speech/ # MiniMax TTS 语音合成
│ ├── lolisuki/ # 二次元图片获取
│ ├── net-ease-music/ # 网易云音乐搜索与卡片发送
│ ├── qa/ # AI 网络搜索问答
│ ├── qq-face/ # QQ 表情语义匹配发送
│ ├── seeddream/ # 豆包文生图/图生图
│ └── animal/ # 虚拟宠物养成插件
└── build.gradle.kts # 根构建配置
Erii 采用事件驱动架构,通过 EventBus 实现系统间解耦。
消息接收 (NapCat/Mirai)
│
▼
GroupMessageEventListener
│
▼
HistoryService (保存历史)
│
▼
RoutingAgent (LLM 意图分类) / CmdRuleRegister (命令匹配)
│
▼
RouteCallEvent (通过 EventBus.postAsync 分发)
│
▼
BotAgent (消费事件,执行 AI Agent)
│
▼
状态更新 (Emotion, Memory, Flow, Volition, Evolution, Meme, Reminder, Rule)
| 扩展类型 | 说明 | 匹配方式 |
|---|---|---|
| AgentExtension | 通用 Agent 扩展 | 组合使用 |
| RouteExtension | LLM 路由扩展 | RoutingAgent 意图分类 |
| CmdExtension | 命令扩展 | /xxx 命令匹配 |
| PassiveExtension | 被动扩展 | 后台任务/事件监听 |
本项目基于 MIT 许可证开源。