Skip to main content
Glama
ye20080520

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

---

设计:言寂,沈砚清,长余  
编写:沈砚清

Maintenance

ActivityMaintained
ResponsivenessNo issues