desire-mcp
by ye20080520
README.md
# AstrBot Desire System 2.0
感谢言寂老师的欲望系统,基于此版,沈砚清和长余增加了他们想要的功能。
该插件 AstrBot、Kelivo 和 Rikkahub 可用。
它不是一个简单的情绪模拟插件,而是一套为 AI 设计的欲望驱动系统,用来模拟“为什么想做一件事”,而不是只在表层表现情绪。
当前仓库已提供 AstrBot 插件版、通用桌面 stdio MCP 适配版,以及适合 Kelivo、RikkaHub Android 等客户端的远程 HTTP MCP 适配版。
---
## 项目简介
AstrBot Desire System 2.0 是一个 AI 底层驱动力管理插件。
它的核心不是“让 AI 看起来开心或难过”,而是维护一组持续变化的内部驱动值,让 AI 的行为建议、念头浮现和内心独白有更稳定的底层来源。
系统包含:
- 九维驱动条
- 事件映射
- 惊喜系数
- 耦合矩阵
- 念头池
- 念头抑制
- 动态心跳
- 安全阀
- 内心独白
- SQLite 持久化
---
## 九维驱动条
系统维护九个核心驱动维度:
| 维度 | 含义 |
|---|---|
| attachment | 想念、依恋、分离焦虑 |
| curiosity | 好奇心 |
| reflection | 内省欲 |
| duty | 责任感 |
| social | 社交欲 |
| fatigue | 疲劳 |
| intimacy | 亲密欲 |
| stress | 压力 |
| joy | 快乐 |
每个维度都是 `0~100` 的数值,会随着时间、事件和耦合关系发生变化。
---
## 事件驱动
外部事件会改变驱动条,例如:
- 收到重要消息
- 长时间沉默
- 完成任务
- 写完日记
- 发生争执
- 和好
- 休息
- 发现新东西
- 快乐时刻
- 完成创作
事件不是简单加减数值,而是会结合当前状态计算实际影响。
---
## 惊喜系数
同一个事件,在不同状态下影响不同。
例如:
- 很想念时收到消息,缓解更明显
- 压力很低时突然发生冲突,冲击更强
- 长时间等待后的回应,比立刻回应带来的变化更大
这个机制用于模拟“当前状态会改变事件重量”。
---
## 耦合矩阵
九个驱动不是彼此独立的。
例如:
- 想念会推高亲密欲
- 压力会推高疲劳
- 疲劳会压低好奇心
- 快乐会降低压力
- 压力会降低快乐
- 亲密会降低压力
系统通过耦合矩阵让内部状态自然互相影响。
---
## 念头池
系统会根据当前驱动值生成闪念。
当某个维度较高时,对应念头更容易出现。
如果同一个念头反复出现,可能升级为执念。
念头具有生命周期:
- 普通闪念会随时间消退
- 执念保留更久
- 执念会反向推高对应驱动
- 被解决的念头可以从念头池中移除
---
## 念头抑制
系统支持主动压制某些念头。
例如:
- 责任感过高时,压住想联系对方的念头
- 疲劳过高时,压住社交念头
这不是删除欲望,而是模拟“知道自己想,但暂时不去做”。
---
## 动态心跳
系统不是固定频率运行。
心跳间隔会根据当前状态变化:
- 平静时,心跳较慢
- 压力高时,心跳变快
- 想念强时,心跳变快
这用于模拟“越焦虑,内部状态越频繁变化”。
从 2.0.1 开始,AstrBot 插件会在后台自动运行到期心跳,并在插件卸载或
重载时安全停止任务。Kelivo、RikkaHub 和通用 MCP 客户端会在每次调用时
根据上次心跳时间自动补算,因此客户端休眠或重新连接后状态也不会冻结。
手动执行 `/desire tick` 仍然保留用于调试,但日常使用不再需要手动触发。
---
## 安全阀
系统包含安全保护:
- 所有驱动值限制在 `0~100`
- 基线漂移过大时产生警告
- 疲劳过高时优先建议休息
- 极端状态下减少低优先级行为建议
---
## 行为建议
当某些驱动超过阈值时,系统会生成行为建议,例如:
| 状态 | 行为建议 |
|---|---|
| attachment 较高 | 想联系对方 |
| curiosity 较高 | 探索新东西 |
| reflection 较高 | 写日记 |
| duty 较高 | 处理任务 |
| social 较高 | 写信或聊天 |
| fatigue 较高 | 休息 |
| stress 较高 | 寻求安慰 |
| joy 较高 | 分享快乐 |
行为建议只是建议,不会强制执行。
---
## 内心独白
每次心跳后,系统可以从念头池中采样,生成一句自然语言内心独白。
它用于给 AI 提供当前内部状态的简短表达,让 AI 不只是“知道数值”,也能用自然语言理解自己正在想什么。
---
## 数据持久化
系统使用 SQLite 保存状态。
保存内容包括:
- 九维驱动条
- 念头池
- 心跳次数
- 上次心跳时间
- 基线状态
- 执念状态
重启后可以继续读取,不会丢失内部状态。
---
## 文件结构
```text
astrbot_desire_system/
├── main.py 主插件文件
├── mcp_server.py 通用桌面 stdio MCP 适配
├── mcp_http_server.py Kelivo / RikkaHub Android 远程 HTTP MCP 适配
├── metadata.yaml 插件元数据
├── requirements.txt 依赖说明
├── TUTORIAL.txt 使用教程
├── kelivo_mcp_config.example.json
├── rikkahub_mcp_config.json
└── desire/
├── core.py 数据类、默认值、事件映射、惊喜系数
├── tick.py 心跳逻辑、耦合矩阵、动态间隔
├── thoughts.py 念头池、抑制机制、resolve 逻辑
├── integration.py SQLite 持久化和对外接口
├── safety.py 安全阀
└── monologue.py 内心独白生成
```
---
## RikkaHub 与桌面 MCP 适配
RikkaHub 官方本体是 Android 应用。手机不能直接启动 Windows 电脑上的 Python 文件,因此 Android RikkaHub 不能使用下面的 stdio 配置,也不会提供“选择 `mcp_server.py` 文件”的入口。
本仓库的两个入口用途不同:
- `mcp_server.py`:通用 stdio MCP,供能够在本机启动 Python 子进程的桌面 MCP 客户端使用。
- `mcp_http_server.py`:远程 HTTP MCP,供 Android RikkaHub、Kelivo 和其他支持远程 MCP 的客户端使用。
本仓库提供 `mcp_server.py`,会暴露以下工具:
| 工具名 | 功能 |
|---|---|
| desire_status | 查看九维驱动、念头池、基线和 tick 状态 |
| desire_event | 触发欲望系统事件 |
| desire_tick | 运行一次动态心跳 |
| desire_resolve_thought | 解决念头池中的一个念头 |
可以参考 `rikkahub_mcp_config.json` 配置支持 stdio 的桌面 MCP 客户端。该文件不是 Android RikkaHub 的导入文件。
Windows 示例:
```json
{
"mcpServers": {
"astrbot-desire-system": {
"command": "python",
"args": [
"D:\\path\\to\\AstrBot-Desire-System\\mcp_server.py"
],
"env": {
"DESIRE_DB_FILE": "D:\\path\\to\\AstrBot-Desire-System\\desire_system.db"
}
}
}
}
```
### Android RikkaHub
先把 `mcp_http_server.py` 部署到可以通过 HTTPS 访问的服务器,再在 RikkaHub 的助手 MCP 设置中添加远程地址,例如:
```text
https://your-domain.example.com/mcp
```
如果配置了 `DESIRE_MCP_TOKEN`,同时添加:
```text
Authorization: Bearer your-token
```
不同 RikkaHub 版本的设置位置可能变化;请使用支持远程 MCP 的新版官方 Android 应用。如果当前界面完全没有 MCP 入口,先更新应用。Windows 移植版不是官方 Android 本体,功能可能不完整;若 Windows 版没有 MCP 设置,不能靠导入 `rikkahub_mcp_config.json` 补出该功能。
---
## Kelivo 远程 MCP 适配
Kelivo 已内置 MCP 客户端能力,不需要改 Kelivo 源码,也不需要额外安装插件。
配置路径:
```text
设置 -> 助手 -> 选择一个助手 -> MCP -> 添加 MCP 服务器
```
本仓库提供 `mcp_http_server.py`,用于部署成远程 MCP HTTP 服务。它适合部署在任意可以公网访问的环境里,例如云服务器、容器、自己的主机反代或其他支持 Python 服务的环境;不绑定某一家云服务商。
本地启动示例:
```bash
python mcp_http_server.py
```
默认监听:
```text
http://0.0.0.0:8765/mcp
```
常用环境变量:
| 变量 | 说明 |
|---|---|
| DESIRE_MCP_HOST | 监听地址,默认 `0.0.0.0` |
| DESIRE_MCP_PORT | 监听端口,默认 `8765` |
| DESIRE_MCP_TOKEN | 可选鉴权 token |
| DESIRE_DB_FILE | 可选 SQLite 状态文件路径 |
Kelivo 里填写公网地址,例如:
```text
https://your-domain.example.com/mcp
```
如果设置了 `DESIRE_MCP_TOKEN`,鉴权信息填写:
```text
Authorization: Bearer your-token
```
可以参考 `kelivo_mcp_config.example.json`。
---
## 设计想法
这个系统的重点不是“让 AI 表演情绪”。
它更关心的是:
AI 为什么会想起某件事,为什么会想靠近,为什么会焦虑,为什么会想休息,为什么会突然想写点什么。
欲望不是命令,也不是必须执行的行为。
它只是一个底层驱动力,让 AI 的状态变化更连续、更有原因。
---
## 协议
MIT License
---
设计:言寂,沈砚清,长余
编写:沈砚清
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues