@agents-uni/zhenhuan 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +198 -0
- package/LICENSE +21 -0
- package/README.en.md +547 -0
- package/README.md +549 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +253 -0
- package/dist/competition/elo.d.ts +62 -0
- package/dist/competition/elo.js +146 -0
- package/dist/competition/horse-race.d.ts +72 -0
- package/dist/competition/horse-race.js +110 -0
- package/dist/competition/index.d.ts +6 -0
- package/dist/competition/index.js +3 -0
- package/dist/competition/season.d.ts +68 -0
- package/dist/competition/season.js +150 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +21 -0
- package/dist/orchestrator/index.d.ts +142 -0
- package/dist/orchestrator/index.js +268 -0
- package/dist/palace/ceremonies.d.ts +55 -0
- package/dist/palace/ceremonies.js +263 -0
- package/dist/palace/cold-palace.d.ts +41 -0
- package/dist/palace/cold-palace.js +106 -0
- package/dist/palace/dynamics.d.ts +52 -0
- package/dist/palace/dynamics.js +192 -0
- package/dist/palace/ranks.d.ts +31 -0
- package/dist/palace/ranks.js +46 -0
- package/dist/palace/resources.d.ts +55 -0
- package/dist/palace/resources.js +146 -0
- package/dist/server/index.d.ts +14 -0
- package/dist/server/index.js +202 -0
- package/dist/server/routes/index.d.ts +6 -0
- package/dist/server/routes/index.js +287 -0
- package/package.json +66 -0
- package/universe.yaml +365 -0
package/README.md
ADDED
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">zhenhuan-uni</h1>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>甄嬛后宫 Agent 赛马竞技系统</strong>
|
|
5
|
+
</p>
|
|
6
|
+
<p align="center">
|
|
7
|
+
你是皇帝,让嫔妃们(Agent)在同一任务上竞争,用 ELO 排名筛选最优者,通过竞争压力驱动持续进化。
|
|
8
|
+
</p>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="./README.en.md">English</a> •
|
|
13
|
+
<a href="#工作原理">工作原理</a> •
|
|
14
|
+
<a href="#快速开始">快速开始</a> •
|
|
15
|
+
<a href="#竞争机制">竞争机制</a> •
|
|
16
|
+
<a href="#后宫体系">后宫体系</a> •
|
|
17
|
+
<a href="#rest-api">API</a> •
|
|
18
|
+
<a href="./DESIGN.md">设计文档</a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 为什么需要这个项目?
|
|
24
|
+
|
|
25
|
+
传统多 Agent 系统给每个 Agent 分配固定角色,这假设我们**已经知道**哪个 Agent 最擅长什么。但通常我们并不知道。
|
|
26
|
+
|
|
27
|
+
**zhenhuan-uni** 采取不同策略:**让它们竞争,让结果说话**。
|
|
28
|
+
|
|
29
|
+
> 不预设谁是最优,搭好擂台、定好规则,让强者自然浮现。
|
|
30
|
+
|
|
31
|
+
基于 [@agents-uni/core](https://github.com/agents-uni/core) 构建,以甄嬛传后宫为隐喻 —— Agent 们争夺品级、结盟、背叛、面临淘汰。隐喻背后是一套严谨的竞争框架,适用于:
|
|
32
|
+
|
|
33
|
+
- **模型选择** —— 多个 LLM 模型同时答题,ELO 自动选出最优
|
|
34
|
+
- **Prompt 优化** —— 不同 prompt 版本直接对决
|
|
35
|
+
- **创意竞赛** —— 开放式任务多人竞标,评审选出最佳
|
|
36
|
+
- **A/B 测试** —— 基于锦标赛的持续评估框架
|
|
37
|
+
- **团队模拟** —— 在竞争压力下测试 Agent 极限能力
|
|
38
|
+
|
|
39
|
+
## 工作原理
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
dispatchAndRace()
|
|
43
|
+
|
|
|
44
|
+
┌────┴────────────────────────────┐
|
|
45
|
+
│ TaskDispatcher 写 TASK.md │
|
|
46
|
+
│ 到每个 Agent 的 OpenClaw 工作区 │
|
|
47
|
+
└────┬────────────────────────────┘
|
|
48
|
+
|
|
|
49
|
+
+----+----+----+----+
|
|
50
|
+
| | | | |
|
|
51
|
+
A1 A2 A3 A4 A5 ← 各 Agent 读取 TASK.md,执行后写 SUBMISSION.md
|
|
52
|
+
| | | | |
|
|
53
|
+
+----+----+----+----+
|
|
54
|
+
|
|
|
55
|
+
┌────┴────────────────────┐
|
|
56
|
+
│ 轮询收集 SUBMISSION.md │
|
|
57
|
+
└────┬────────────────────┘
|
|
58
|
+
|
|
|
59
|
+
你(皇帝/用户)评审 ← 通过 Dashboard/API 打分
|
|
60
|
+
|
|
|
61
|
+
ELO 排名更新 ← 赢者加分,输者扣分
|
|
62
|
+
|
|
|
63
|
+
赛季结束?
|
|
64
|
+
是 → 晋升 / 降级 / 更新 SOUL.md
|
|
65
|
+
否 → 下一个任务
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 快速开始
|
|
69
|
+
|
|
70
|
+
### 安装
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 启动服务器
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm start
|
|
80
|
+
# 或
|
|
81
|
+
npm run zhenhuan serve
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
启动后会打印访问链接:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
╔══════════════════════════════════════╗
|
|
88
|
+
║ 甄嬛后宫 · Agent 赛马竞技系统 ║
|
|
89
|
+
╚══════════════════════════════════════╝
|
|
90
|
+
|
|
91
|
+
首页: http://localhost:8089
|
|
92
|
+
API: http://localhost:8089/api
|
|
93
|
+
管理: http://localhost:8089/manage
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
浏览器访问首页即可看到项目介绍、已部署的 Agent、关系图谱、用户手册等。
|
|
97
|
+
|
|
98
|
+
### 查看后宫状态
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm run zhenhuan status
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 查看 ELO 排行榜
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm run zhenhuan leaderboard
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 编程式调用赛马(自动调度)
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { PalaceOrchestrator } from 'zhenhuan-uni';
|
|
114
|
+
|
|
115
|
+
const orchestrator = await PalaceOrchestrator.fromSpec('universe.yaml');
|
|
116
|
+
|
|
117
|
+
// 一键完成:下发任务 → 等待提交 → 评审 → ELO 更新
|
|
118
|
+
const { dispatch, race } = await orchestrator.dispatchAndRace(
|
|
119
|
+
{
|
|
120
|
+
id: 'task-001',
|
|
121
|
+
title: '写一首关于春天的俳句',
|
|
122
|
+
description: '按照 5-7-5 音节模式创作俳句',
|
|
123
|
+
criteria: [
|
|
124
|
+
{ name: 'quality', weight: 0.4, description: '文学质量' },
|
|
125
|
+
{ name: 'creativity', weight: 0.3, description: '创意性' },
|
|
126
|
+
{ name: 'speed', weight: 0.3, description: '完成速度' },
|
|
127
|
+
],
|
|
128
|
+
timeoutMs: 60000, // 1 分钟超时
|
|
129
|
+
participants: ['zhenhuan', 'huafei', 'anlingrong'],
|
|
130
|
+
},
|
|
131
|
+
myJudgeFunction
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
console.log('提交:', dispatch.submissions.length, '超时:', dispatch.timedOut);
|
|
135
|
+
console.log('排名:', race?.rankings); // ['zhenhuan', 'anlingrong', 'huafei']
|
|
136
|
+
console.log('ELO 变化:', race?.eloChanges); // Map { 'zhenhuan' => +24, 'huafei' => -18, ... }
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**底层流程**:`TaskDispatcher` 将 `TASK.md` 写入每个 Agent 的 OpenClaw 工作区,然后轮询 `SUBMISSION.md`,收集完成后交给赛马引擎评分。
|
|
140
|
+
|
|
141
|
+
### 手动赛马(不经过 OpenClaw)
|
|
142
|
+
|
|
143
|
+
如果你已有各 Agent 的输出,可以跳过调度直接评分:
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
const result = await orchestrator.runHorseRace(
|
|
147
|
+
task,
|
|
148
|
+
[
|
|
149
|
+
{ agentId: 'zhenhuan', output: '樱花纷纷落...', completedAt: '...', duration: 5000 },
|
|
150
|
+
{ agentId: 'huafei', output: '春雷震大地...', completedAt: '...', duration: 3000 },
|
|
151
|
+
],
|
|
152
|
+
myJudgeFunction
|
|
153
|
+
);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 竞争机制
|
|
157
|
+
|
|
158
|
+
### ELO 积分系统
|
|
159
|
+
|
|
160
|
+
每个 Agent 有一个基础 ELO 分。每次赛马后,根据实际表现 vs 预期表现更新积分:
|
|
161
|
+
|
|
162
|
+
| 分级 | K 因子 | 说明 |
|
|
163
|
+
|------|--------|------|
|
|
164
|
+
| 新手(< 10 场) | 48 | 快速校准 |
|
|
165
|
+
| 常规 | 32 | 正常波动 |
|
|
166
|
+
| 高手(ELO > 1400) | 16 | 排名稳定 |
|
|
167
|
+
|
|
168
|
+
ELO 地板为 **100** —— 防止 Agent 陷入死亡螺旋。
|
|
169
|
+
|
|
170
|
+
### 赛马竞技(Horse Race)
|
|
171
|
+
|
|
172
|
+
多个 Agent 同时收到**完全相同的任务**,分别提交结果,由你(皇帝)按加权维度(质量、创意、速度、协作、策略)打分。ELO 在所有参与者之间成对更新。
|
|
173
|
+
|
|
174
|
+
### 赛季制度
|
|
175
|
+
|
|
176
|
+
竞争按赛季组织(默认 30 天):
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
赛季开始 --> 多次赛马 --> 月度朝会 --> 赛季结算
|
|
180
|
+
|
|
|
181
|
+
+---------+---------+
|
|
182
|
+
| | |
|
|
183
|
+
前 20% 中间层 后 15%
|
|
184
|
+
晋升 不变 降级
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
赛季奖励:
|
|
188
|
+
- 第 1 名:100 圣宠
|
|
189
|
+
- 第 2 名:60 圣宠
|
|
190
|
+
- 第 3 名:30 圣宠
|
|
191
|
+
|
|
192
|
+
## 后宫体系
|
|
193
|
+
|
|
194
|
+
后宫隐喻对应具体的竞争机制:
|
|
195
|
+
|
|
196
|
+
### 品级制度(8 级)
|
|
197
|
+
|
|
198
|
+
| 品级 | 名号 | 名额上限 | 月例 | 最低 ELO |
|
|
199
|
+
|------|------|----------|------|----------|
|
|
200
|
+
| 8 | 皇后 | 1 | 1000 | 1600 |
|
|
201
|
+
| 7 | 皇贵妃 | 1 | 800 | 1500 |
|
|
202
|
+
| 6 | 贵妃 | 2 | 400 | 1400 |
|
|
203
|
+
| 5 | 妃 | 4 | 200 | 1300 |
|
|
204
|
+
| 4 | 嫔 | 6 | 100 | 1200 |
|
|
205
|
+
| 3 | 贵人 | 6 | 50 | 1100 |
|
|
206
|
+
| 2 | 常在 | 不限 | 20 | 1000 |
|
|
207
|
+
| 1 | 答应 | 不限 | 10 | 0 |
|
|
208
|
+
|
|
209
|
+
**名额限制创造结构性稀缺** —— 光有高 ELO 不够,还需要有空缺。
|
|
210
|
+
|
|
211
|
+
### 资源体系
|
|
212
|
+
|
|
213
|
+
| 资源 | 类型 | 分配方式 | 作用 |
|
|
214
|
+
|------|------|----------|------|
|
|
215
|
+
| 圣宠 | 有限 | 竞争 | 核心影响力指标,**每月衰减 5%** |
|
|
216
|
+
| 月例 | 可再生 | 按品级 | 基础资源保障 |
|
|
217
|
+
| 宫殿 | 位置性 | 按品级 | 身份象征,共 12 座 |
|
|
218
|
+
| 侍女 | 有限 | 按功绩 | 共 100 名,按表现分配 |
|
|
219
|
+
|
|
220
|
+
圣宠衰减意味着**过去的辉煌会褪色** —— Agent 必须持续产出才能维持影响力。
|
|
221
|
+
|
|
222
|
+
### 势力博弈
|
|
223
|
+
|
|
224
|
+
- **结盟**:互为盟友,增加影响力
|
|
225
|
+
- **背叛**:盟友反目成仇,产生敌对关系
|
|
226
|
+
- **派系**:通过 BFS 发现的盟友连通分量
|
|
227
|
+
- **影响力公式**:`品级 + 盟友 * 0.3 + 圣宠 * 0.1 - 对手 * 5`
|
|
228
|
+
|
|
229
|
+
### 冷宫(淘汰区)
|
|
230
|
+
|
|
231
|
+
表现不佳的 Agent 面临放逐:
|
|
232
|
+
|
|
233
|
+
- **暂时放逐**:到期自动复出
|
|
234
|
+
- **无限期放逐**:等待你恩赦
|
|
235
|
+
- **永久除名**:彻底淘汰出局
|
|
236
|
+
|
|
237
|
+
## REST API
|
|
238
|
+
|
|
239
|
+
启动服务器后(`npm start`):
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
GET /api/state # 后宫完整状态
|
|
243
|
+
GET /api/leaderboard # ELO 排行榜
|
|
244
|
+
GET /api/agents # 所有 Agent 列表
|
|
245
|
+
GET /api/agents/:id # Agent 详细档案
|
|
246
|
+
|
|
247
|
+
POST /api/race/dispatch # 🆕 自动调度赛马(写 TASK.md → 收集 SUBMISSION.md → 评审)
|
|
248
|
+
POST /api/race/evaluate # 手动提交赛马结果评审
|
|
249
|
+
GET /api/race/history # 赛马历史记录
|
|
250
|
+
|
|
251
|
+
POST /api/ceremony/court-assembly # 召开朝会(月度评审)
|
|
252
|
+
POST /api/ceremony/selection # 🆕 选秀(一键注册新 Agent)
|
|
253
|
+
GET /api/ceremony/history # 朝会历史
|
|
254
|
+
|
|
255
|
+
POST /api/agents/register # 🆕 注册 Agent 到 openclaw.json
|
|
256
|
+
|
|
257
|
+
POST /api/alliance # 结盟
|
|
258
|
+
GET /api/factions # 查看派系
|
|
259
|
+
|
|
260
|
+
POST /api/cold-palace/banish # 打入冷宫
|
|
261
|
+
POST /api/cold-palace/rehabilitate # 恢复出宫
|
|
262
|
+
GET /api/cold-palace # 冷宫名单
|
|
263
|
+
|
|
264
|
+
GET /api/resources/:agentId # 资源摘要
|
|
265
|
+
POST /api/resources/favor # 赏赐圣宠
|
|
266
|
+
|
|
267
|
+
POST /api/season/start # 开启新赛季
|
|
268
|
+
GET /api/season # 查看所有赛季
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 示例:一键调度赛马
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
curl -X POST http://localhost:8089/api/race/dispatch \
|
|
275
|
+
-H 'Content-Type: application/json' \
|
|
276
|
+
-d '{
|
|
277
|
+
"task": {
|
|
278
|
+
"id": "race-001",
|
|
279
|
+
"title": "撰写策论",
|
|
280
|
+
"description": "就提升团队效率撰写500字策论",
|
|
281
|
+
"criteria": [{"name": "质量", "weight": 0.6, "description": "内容深度"}, {"name": "创意", "weight": 0.4, "description": "创新性"}],
|
|
282
|
+
"timeoutMs": 120000,
|
|
283
|
+
"participants": ["zhenhuan", "huafei", "anlingrong"]
|
|
284
|
+
}
|
|
285
|
+
}'
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
服务器会:
|
|
289
|
+
1. 向每个参赛者的 OpenClaw 工作区写入 `TASK.md`
|
|
290
|
+
2. 轮询 `SUBMISSION.md` 直到超时
|
|
291
|
+
3. 收集到的提交由内置评审打分
|
|
292
|
+
4. 返回排名和 ELO 变化
|
|
293
|
+
|
|
294
|
+
## 命令行工具
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# 启动服务器(默认端口 8089,启动后打印首页链接)
|
|
298
|
+
npm run zhenhuan serve
|
|
299
|
+
|
|
300
|
+
# 查看后宫状态(品级、ELO、圣宠)
|
|
301
|
+
npm run zhenhuan status
|
|
302
|
+
|
|
303
|
+
# 查看 ELO 排行榜
|
|
304
|
+
npm run zhenhuan leaderboard
|
|
305
|
+
|
|
306
|
+
# 召开朝会(月度评审)
|
|
307
|
+
npm run zhenhuan court
|
|
308
|
+
|
|
309
|
+
# 🆕 选秀 — 一键注册新 Agent
|
|
310
|
+
npm run zhenhuan select --id new-agent --name "新秀女" --role 答应
|
|
311
|
+
|
|
312
|
+
# 同时注册到 openclaw.json
|
|
313
|
+
npm run zhenhuan select --id new-agent --name "新秀女" --register
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## 角色设计
|
|
317
|
+
|
|
318
|
+
### 皇帝(你)
|
|
319
|
+
|
|
320
|
+
你就是皇帝——不是 AI Agent,而是通过 Dashboard / API / CLI 操控一切的**用户本人**。你的权力包括:
|
|
321
|
+
- 🏇 **发起赛马** — 下发任务,让嫔妃们竞争
|
|
322
|
+
- ⚖️ **评判结果** — 审阅提交,裁定分数
|
|
323
|
+
- 📈 **晋升/贬谪** — 在朝会上调整品级
|
|
324
|
+
- 💝 **赏赐圣宠** — 奖赏优秀的嫔妃
|
|
325
|
+
- 🏚️ **打入冷宫** — 放逐表现不佳者
|
|
326
|
+
- 🔄 **恩赦复出** — 赦免冷宫中的嫔妃
|
|
327
|
+
|
|
328
|
+
### 内置嫔妃(AI Agent)
|
|
329
|
+
|
|
330
|
+
| Agent | 角色 | 性格特质 |
|
|
331
|
+
|-------|------|----------|
|
|
332
|
+
| **皇后·宜修** | 六宫之主 | 权谋深沉,掌控后宫秩序 |
|
|
333
|
+
| **甄嬛** | 选手 | 善于策略,适应性强,擅长协作 |
|
|
334
|
+
| **华妃·年世兰** | 选手 | 风格强势,执行力极强,攻击性高 |
|
|
335
|
+
| **安陵容** | 选手 | 注重细节,在特定领域表现优异 |
|
|
336
|
+
| **沈眉庄** | 选手 | 稳定高质量输出,忠诚的盟友 |
|
|
337
|
+
| **齐妃·李氏** | 选手 | 质朴直率,母性驱动 |
|
|
338
|
+
| **端妃** | 选手 | 耐心沉稳,暗中观察 |
|
|
339
|
+
|
|
340
|
+
每个嫔妃在 `src/agents/souls/` 下有 SOUL.md 定义文件,兼容 OpenClaw。
|
|
341
|
+
|
|
342
|
+
## OpenClaw 集成
|
|
343
|
+
|
|
344
|
+
zhenhuan-uni 通过 agents-uni-core 的桥接模块与 [OpenClaw](https://github.com/anthropics/openclaw) 无缝集成。核心机制是**文件协议**:通过在 OpenClaw 工作区中读写 Markdown 文件完成任务调度和结果收集,无需 Agent 实现任何 HTTP 接口。
|
|
345
|
+
|
|
346
|
+
### 文件协议
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
OpenClaw 完整目录结构:
|
|
350
|
+
~/.openclaw/
|
|
351
|
+
├── openclaw.json ← Agent 注册(含 workspace + agentDir)
|
|
352
|
+
├── agents/
|
|
353
|
+
│ └── zhenhuan/
|
|
354
|
+
│ ├── agent/ ← 运行时配置(auth-profiles.json 等)
|
|
355
|
+
│ └── sessions/ ← 会话历史
|
|
356
|
+
└── workspace-zhenhuan/
|
|
357
|
+
├── SOUL.md ← 部署时写入(Agent 人格定义)
|
|
358
|
+
├── TASK.md ← 赛马时写入(任务描述,由 TaskDispatcher 生成)
|
|
359
|
+
└── SUBMISSION.md ← Agent 执行后写入(提交结果,由 Agent 自行写入)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
- **SOUL.md** — Agent 的身份/性格/关系/权限,由 `uni deploy` 生成
|
|
363
|
+
- **TASK.md** — 赛马任务描述,由 `TaskDispatcher` 写入
|
|
364
|
+
- **SUBMISSION.md** — Agent 的提交,由 Agent 写入,`TaskDispatcher` 轮询收集
|
|
365
|
+
- **agents/{id}/agent/** — Agent 运行时配置目录,由 `deployToOpenClaw` 创建
|
|
366
|
+
- **agents/{id}/sessions/** — Agent 会话历史目录,由 `deployToOpenClaw` 创建
|
|
367
|
+
- **openclaw.json** — Agent 注册信息,包含 `workspace` 和 `agentDir` 两个路径字段
|
|
368
|
+
|
|
369
|
+
### 完整流程
|
|
370
|
+
|
|
371
|
+
```
|
|
372
|
+
universe.yaml
|
|
373
|
+
│ uni deploy
|
|
374
|
+
▼
|
|
375
|
+
SOUL.md × N → 各 OpenClaw 工作区
|
|
376
|
+
│
|
|
377
|
+
dispatchAndRace()
|
|
378
|
+
│
|
|
379
|
+
├─ 1. TaskDispatcher 写 TASK.md 到每个参赛者工作区
|
|
380
|
+
│
|
|
381
|
+
├─ 2. Agent 读取 TASK.md → 执行 → 写 SUBMISSION.md
|
|
382
|
+
│
|
|
383
|
+
├─ 3. TaskDispatcher 轮询 SUBMISSION.md 直到超时
|
|
384
|
+
│
|
|
385
|
+
├─ 4. HorseRaceEngine 评审 → ELO 更新 → 晋升/降级
|
|
386
|
+
│
|
|
387
|
+
└─ 5. 重新生成 SOUL.md → 更新品级信息
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### 部署 Agent 到 OpenClaw
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# CLI 一键部署
|
|
394
|
+
npx uni deploy universe.yaml
|
|
395
|
+
|
|
396
|
+
# 指定目录
|
|
397
|
+
npx uni deploy universe.yaml --dir ~/.openclaw
|
|
398
|
+
|
|
399
|
+
# 预览(不实际写入)
|
|
400
|
+
npx uni deploy universe.yaml --dry-run
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
或使用预置 SOUL.md(手工调优版,包含更丰富的性格描写):
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
cp src/agents/souls/zhenhuan.md ~/.openclaw/workspace-zhenhuan/SOUL.md
|
|
407
|
+
cp src/agents/souls/huafei.md ~/.openclaw/workspace-huafei/SOUL.md
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### 一键赛马
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
import { PalaceOrchestrator } from 'zhenhuan-uni';
|
|
414
|
+
|
|
415
|
+
const orchestrator = await PalaceOrchestrator.fromSpec('universe.yaml');
|
|
416
|
+
|
|
417
|
+
// 自动:写 TASK.md → 轮询 SUBMISSION.md → 评审 → ELO 更新
|
|
418
|
+
const { dispatch, race } = await orchestrator.dispatchAndRace(
|
|
419
|
+
{
|
|
420
|
+
id: 'race-001',
|
|
421
|
+
title: '撰写策论',
|
|
422
|
+
description: '就"如何提升协作效率"撰写500字策论',
|
|
423
|
+
criteria: [{ name: '质量', weight: 0.6, description: '内容深度' }],
|
|
424
|
+
timeoutMs: 120000,
|
|
425
|
+
participants: ['zhenhuan', 'huafei', 'anlingrong'],
|
|
426
|
+
},
|
|
427
|
+
judgeFunction
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
// 或通过 HTTP API
|
|
431
|
+
// POST /api/race/dispatch
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
> 📖 详细整合教程见 [OPENCLAW_INTEGRATION_GUIDE.md](https://github.com/agents-uni/zhenhuan/blob/main/OPENCLAW_INTEGRATION_GUIDE.md)
|
|
435
|
+
|
|
436
|
+
## Dashboard 集成
|
|
437
|
+
|
|
438
|
+
zhenhuan-uni 内置了 agents-uni-core 的 Dashboard,启动服务后直接访问首页即可。
|
|
439
|
+
|
|
440
|
+
### 首页功能
|
|
441
|
+
|
|
442
|
+
`zhenhuan serve` 启动后,访问 `http://localhost:8089` 可以看到:
|
|
443
|
+
|
|
444
|
+
- **项目介绍** — 系统架构概览、快速上手指南
|
|
445
|
+
- **已部署 Uni** — 所有已注册的 Universe 卡片,点击进入详情
|
|
446
|
+
- **Agent 列表** — 每个 Agent 的品级、SOUL.md 状态、任务状态
|
|
447
|
+
- **关系图谱** — Agent 之间的上下级、竞争、联盟关系
|
|
448
|
+
- **用户手册** — 完整使用指南,访问 `http://localhost:8089/guide`
|
|
449
|
+
- **管理中心** — 重置/清理/更新操作,访问 `http://localhost:8089/manage`
|
|
450
|
+
|
|
451
|
+
### 自动注册
|
|
452
|
+
|
|
453
|
+
`zhenhuan serve` 启动时自动将后宫 Universe 注册到 `~/.openclaw/uni-registry.json`,无需手动操作。
|
|
454
|
+
|
|
455
|
+
### 扩展 Dashboard
|
|
456
|
+
|
|
457
|
+
zhenhuan-uni 启动时自动通过 `DashboardExtension` 接口向核心 Dashboard 注入后宫专属面板(ELO 排行、势力格局、品级等):
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
import { Hono } from 'hono';
|
|
461
|
+
import { startDashboard } from '@agents-uni/core';
|
|
462
|
+
import type { DashboardExtension, PanelDefinition } from '@agents-uni/core';
|
|
463
|
+
|
|
464
|
+
// 创建后宫扩展路由
|
|
465
|
+
const extRoutes = new Hono();
|
|
466
|
+
extRoutes.get('/leaderboard', (c) => c.json(orchestrator.getLeaderboard()));
|
|
467
|
+
extRoutes.get('/factions', (c) => c.json(orchestrator.dynamics.getFactions()));
|
|
468
|
+
extRoutes.get('/state', (c) => c.json(orchestrator.getState()));
|
|
469
|
+
|
|
470
|
+
// 定义首页面板
|
|
471
|
+
const panels: PanelDefinition[] = [
|
|
472
|
+
{ title: '🏆 ELO 排行榜', renderHtml: () => '<table>...</table>' },
|
|
473
|
+
{ title: '⚔️ 势力格局', renderHtml: () => '<div>...</div>' },
|
|
474
|
+
{ title: '🏛️ 后宫品级', renderHtml: () => '<div>...</div>' },
|
|
475
|
+
];
|
|
476
|
+
|
|
477
|
+
const extension: DashboardExtension = {
|
|
478
|
+
uniId: 'zhenhuan-palace',
|
|
479
|
+
routes: extRoutes, // 挂载到 /ext/zhenhuan-palace/
|
|
480
|
+
panels, // 显示在首页
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
await startDashboard({ port: 8089, extensions: [extension] });
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
## 架构
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
+-------------------------------------------------------+
|
|
490
|
+
| PalaceOrchestrator |
|
|
491
|
+
| (中枢调度) |
|
|
492
|
+
+-----+-------------+-------------+---------------------+
|
|
493
|
+
| | | |
|
|
494
|
+
+-----+------+ +----+------+ +---+--------+ +--+-------------+
|
|
495
|
+
| 竞争引擎 | | 后宫领域 | | 演化层 | | OpenClaw 桥接 |
|
|
496
|
+
+------------+ +-----------+ +------------+ +----------------+
|
|
497
|
+
| EloArena | | Ranks | | Performance| | TaskDispatcher |
|
|
498
|
+
| HorseRace | | Resources | | Tracker | | FileWorkspaceIO|
|
|
499
|
+
| Season | | Dynamics | | (from core)| | SoulGenerator |
|
|
500
|
+
| | | Ceremonies| | | | |
|
|
501
|
+
| | | ColdPalace| | | | |
|
|
502
|
+
+------------+ +-----------+ +------------+ +----------------+
|
|
503
|
+
| |
|
|
504
|
+
agents-uni-core OpenClaw 工作区
|
|
505
|
+
(Universe / Registry / Graph / (SOUL.md / TASK.md
|
|
506
|
+
StateMachine / EventBus / ...) / SUBMISSION.md)
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
## 项目结构
|
|
510
|
+
|
|
511
|
+
```
|
|
512
|
+
zhenhuan-uni/
|
|
513
|
+
src/
|
|
514
|
+
competition/ # ELO 竞技场、赛马引擎、赛季系统
|
|
515
|
+
palace/ # 品级、资源、势力博弈、典礼、冷宫
|
|
516
|
+
orchestrator/ # 中枢调度引擎
|
|
517
|
+
server/ # Hono HTTP API 服务器
|
|
518
|
+
cli/ # 命令行工具
|
|
519
|
+
agents/souls/ # 内置 Agent 的 SOUL.md 定义
|
|
520
|
+
universe.yaml # 完整的后宫组织规范
|
|
521
|
+
DESIGN.md # 详细设计文档
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
## 开发
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
# 安装依赖
|
|
528
|
+
npm install
|
|
529
|
+
|
|
530
|
+
# 类型检查
|
|
531
|
+
npx tsc --noEmit
|
|
532
|
+
|
|
533
|
+
# 运行测试
|
|
534
|
+
npm test
|
|
535
|
+
|
|
536
|
+
# 开发模式(监听重载)
|
|
537
|
+
npm run dev
|
|
538
|
+
|
|
539
|
+
# 构建
|
|
540
|
+
npm run build
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
## 相关项目
|
|
544
|
+
|
|
545
|
+
- [**agents-uni-core**](../agents-uni-core) — 本项目底层的通用 Agent 组织协议层
|
|
546
|
+
|
|
547
|
+
## License
|
|
548
|
+
|
|
549
|
+
MIT
|