koishi-plugin-hds-interlude 0.1.3-beta1 → 0.1.3
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/BEGINNER_GUIDE.md +21 -28
- package/CONFIGURATION_GUIDE.md +105 -61
- package/DEPLOYMENT_GUIDE.md +220 -0
- package/README.md +33 -23
- package/command.md +26 -11
- package/docs/AGENCY_WINDOW.md +1 -1
- package/docs/ALTER_SYSTEM.md +2 -2
- package/docs/ARCHITECTURE.md +21 -5
- package/docs/CHANGELOG.md +39 -0
- package/docs/SECURITY.md +3 -1
- package/lib/group-willingness.d.ts +40 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1155 -186
- package/lib/meta.d.ts +1 -1
- package/lib/narrator.d.ts +61 -8
- package/lib/service.d.ts +68 -2
- package/lib/types.d.ts +59 -1
- package/package.json +2 -2
package/BEGINNER_GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# HDS Interlude 新手引导
|
|
2
2
|
|
|
3
|
-
适用版本:`0.1.3
|
|
3
|
+
适用版本:`0.1.3`
|
|
4
4
|
|
|
5
5
|
HDS Interlude 是 Koishi 的持续叙事聊天插件。插件使用共享主剧本保存角色状态、关系分支、已发生事件、待处理计划和长期记忆。用户消息会进入当前活动场景;主模型在同一次请求中续写已经发生的生活,并决定是否发送、延迟发送或暂不发送消息。实时写作读取一条按时间排序的活动场景记录:最近剧本文字、真实用户消息和已经成功投递的角色消息在同一条线上。剧本引子、场景外近期事实和长期记忆负责更早的历史。
|
|
6
6
|
|
|
@@ -20,10 +20,11 @@ HDS Interlude 是 Koishi 的持续叙事聊天插件。插件使用共享主剧
|
|
|
20
20
|
5. 保存配置后,在已授权私聊中执行:
|
|
21
21
|
|
|
22
22
|
```text
|
|
23
|
-
interlude.
|
|
23
|
+
interlude.doctor
|
|
24
|
+
interlude.story.start
|
|
24
25
|
```
|
|
25
26
|
|
|
26
|
-
Console 页面建议按以下顺序填写:`storyDefaults` → `model` → `onebot` → `sharedStory` → `runtime` → `agency` → `memory` → `alterSystem`。首次测试先完成模型、剧本起点和账号权限;网页观察、Embedding
|
|
27
|
+
Console 页面建议按以下顺序填写:`blindMode`(首次保持关闭)→ `storyDefaults` → `model` → `onebot` → `sharedStory` → `runtime` → `agency` → `memory` → `alterSystem`。首次测试先完成模型、剧本起点和账号权限;网页观察、Embedding、详细日志与失明模式可以之后再开。
|
|
27
28
|
|
|
28
29
|
6. 发送一条普通消息,确认模型调用、日志和消息投递正常。
|
|
29
30
|
|
|
@@ -44,13 +45,11 @@ Console 页面建议按以下顺序填写:`storyDefaults` → `model` → `one
|
|
|
44
45
|
### 1. 模型与提示词
|
|
45
46
|
|
|
46
47
|
```yaml
|
|
47
|
-
model.mode: openai-compatible
|
|
48
|
-
model.mainModelId: 主叙事模型预设 ID
|
|
49
48
|
model.mainTemperature: 0.7
|
|
50
|
-
model.mainTopP:
|
|
51
|
-
model.mainMaxTokens:
|
|
52
|
-
model.mainTimeout:
|
|
53
|
-
model.mainResponseFormat:
|
|
49
|
+
model.mainTopP: 1
|
|
50
|
+
model.mainMaxTokens: 4096
|
|
51
|
+
model.mainTimeout: 60000
|
|
52
|
+
model.mainResponseFormat: json-object
|
|
54
53
|
model.formatPrompt: ''
|
|
55
54
|
model.fixedPrompt: ''
|
|
56
55
|
model.failover.enabled: true
|
|
@@ -58,34 +57,29 @@ model.failover.strategy: priority
|
|
|
58
57
|
model.failover.maxAttemptsPerProvider: 2
|
|
59
58
|
model.failover.cooldownMinutes: 5
|
|
60
59
|
model.embedding.enabled: false
|
|
61
|
-
model.vision.enabled: true
|
|
60
|
+
model.vision.enabled: false # 只有视觉模型才改为 true
|
|
62
61
|
```
|
|
63
62
|
|
|
64
63
|
主叙事读取 `runtime.contextEntryLimit` 控制的近期原始条目,并受固定 12,000 字符预算保护;更早内容由 continuity、场景摘要和长期事实衔接。
|
|
65
64
|
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
每条模型连接只配置一次;用用途开关决定它服务哪些任务:
|
|
68
67
|
|
|
69
68
|
```yaml
|
|
70
|
-
model.providers[].
|
|
71
|
-
model.providers[].label: Primary provider
|
|
69
|
+
model.providers[].label: 主叙事模型
|
|
72
70
|
model.providers[].enabled: true
|
|
73
71
|
model.providers[].endpoint: https://你的服务商/v1/chat/completions
|
|
74
72
|
model.providers[].apiKey: 你的 API Key
|
|
73
|
+
model.providers[].model: 你的模型名称
|
|
74
|
+
model.providers[].useForMain: true
|
|
75
|
+
model.providers[].useForCompaction: true
|
|
76
|
+
model.providers[].useForAlter: true
|
|
77
|
+
model.providers[].useForEmbedding: false
|
|
75
78
|
model.providers[].extraHeaders: ''
|
|
76
79
|
model.providers[].extraBody: ''
|
|
77
|
-
|
|
78
|
-
model.models[].id: narrative
|
|
79
|
-
model.models[].label: 主叙事模型
|
|
80
|
-
model.models[].enabled: true
|
|
81
|
-
model.models[].providerId: primary
|
|
82
|
-
model.models[].model: 你的模型名称
|
|
83
|
-
model.models[].maxTokens: 4096
|
|
84
|
-
model.models[].timeout: 60000
|
|
85
|
-
model.models[].responseFormat: prompt-only
|
|
86
80
|
```
|
|
87
81
|
|
|
88
|
-
|
|
82
|
+
无需填写或记忆任何 `providerId`、`modelId`、`mainModelId`。若压缩或 Alter 要用更便宜的模型,新增一行模型连接,只勾选对应用途即可;服务商地址和 API Key 可以直接在该行配置。
|
|
89
83
|
|
|
90
84
|
主叙事提示词:
|
|
91
85
|
|
|
@@ -102,7 +96,7 @@ model.stylePrompt:
|
|
|
102
96
|
|
|
103
97
|
从主角此刻手头正在做的事情继续写。让时间通过具体行动向前移动:拿起或放下的物品、进行到哪一步的任务、身体产生的需要、环境中的变化、临时出现的安排,以及周围人物正在做出的选择。细节应参与行动和因果,使读者能够感到这一段生活确实发生过。
|
|
104
98
|
|
|
105
|
-
|
|
99
|
+
按当前阶段和已经经过的生活连续书写:用户消息、对话后续、到期意图与自动推进各自提供明确事件边界;调度间隔只决定何时唤醒写作,不预设叙事密度。
|
|
106
100
|
|
|
107
101
|
让主角同时拥有眼前事务、当天安排、个人兴趣、现实压力和未解决的小事。每次选择当前最能自然推进的部分,并让偶然变化从既有处境中生长,例如计划调整、物品带来的麻烦、配角提出的新安排、环境变化或意外发现。
|
|
108
102
|
|
|
@@ -119,8 +113,6 @@ model.stylePrompt:
|
|
|
119
113
|
|
|
120
114
|
```yaml
|
|
121
115
|
model.compaction.enabled: true
|
|
122
|
-
model.compaction.providerId: 留空表示自动选择
|
|
123
|
-
model.compaction.model: 低成本模型名称
|
|
124
116
|
model.compaction.temperature: 0.3
|
|
125
117
|
model.compaction.topP: 1
|
|
126
118
|
model.compaction.maxTokens: 2048
|
|
@@ -172,6 +164,7 @@ sharedStory.participantContextLimit: 6
|
|
|
172
164
|
```yaml
|
|
173
165
|
runtime.captureDirectMessages: true
|
|
174
166
|
runtime.autoCreate: true
|
|
167
|
+
onebot.voiceTranscription.enabled: false # 使用 SnowLuma 私聊语音转写时改为 true
|
|
175
168
|
runtime.ignoreCommandMessages: true
|
|
176
169
|
runtime.userMessageDebounceSeconds: 2
|
|
177
170
|
runtime.cancelDelayedRepliesOnUserMessage: true
|
|
@@ -216,8 +209,8 @@ runtime.restWindows[].maxIntervalMinutes: 240
|
|
|
216
209
|
|
|
217
210
|
```yaml
|
|
218
211
|
memory.enabled: true
|
|
219
|
-
memory.sceneEntryThreshold:
|
|
220
|
-
memory.sceneCharacterThreshold:
|
|
212
|
+
memory.sceneEntryThreshold: 16
|
|
213
|
+
memory.sceneCharacterThreshold: 10000
|
|
221
214
|
memory.factLimit: 20
|
|
222
215
|
memory.activeConsequencesEnabled: true
|
|
223
216
|
memory.activeConsequencePromptLimit: 6
|
package/CONFIGURATION_GUIDE.md
CHANGED
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
# HDS Interlude 配置指南
|
|
2
2
|
|
|
3
|
-
适用版本:`0.1.3
|
|
3
|
+
适用版本:`0.1.3`
|
|
4
4
|
|
|
5
5
|
第一次安装先看 `BEGINNER_GUIDE.md`。本文件严格按照 Koishi Console 的显示顺序说明当前字段;旧版本已经移除或隐藏的字段集中列在末尾,不再混入正常配置流程。
|
|
6
6
|
|
|
7
7
|
## Console 顺序
|
|
8
8
|
|
|
9
|
-
1. `
|
|
10
|
-
2. `
|
|
11
|
-
3. `
|
|
12
|
-
4. `
|
|
13
|
-
5. `
|
|
14
|
-
6. `
|
|
15
|
-
7. `
|
|
16
|
-
8. `
|
|
17
|
-
9. `
|
|
18
|
-
10. `
|
|
9
|
+
1. `blindMode`:失明模式
|
|
10
|
+
2. `storyDefaults`:剧本起点
|
|
11
|
+
3. `model`:模型与服务商
|
|
12
|
+
4. `onebot`:OneBot / NapCat 权限
|
|
13
|
+
5. `sharedStory`:共享剧本
|
|
14
|
+
6. `runtime`:对话与时间
|
|
15
|
+
7. `agency`:主体行动窗口
|
|
16
|
+
8. `memory`:连续性与记忆
|
|
17
|
+
9. `alterSystem`:临时氛围偏移
|
|
18
|
+
10. `browser`:只读网页观察
|
|
19
|
+
11. `logging`:日志与隐私
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
首次测试先完成 `storyDefaults`、`model`、`onebot`、`sharedStory` 和 `runtime`;`blindMode` 保持关闭。Embedding、网页观察、主动联系和内容日志应在基础私聊稳定后逐项开启。
|
|
21
22
|
|
|
22
|
-
## 1.
|
|
23
|
+
## 1. blindMode:失明模式
|
|
24
|
+
|
|
25
|
+
开启 `blindMode.enabled` 后,HDSI 不注册自己的管理指令,并静默拦截当前 Koishi 实例中所有已经识别的指令;普通聊天仍会进入叙事。HDSI 的普通运行日志、错误详情和消息预览都会隐藏,只按 `healthReportMinutes` 输出一次不含故事或账户内容的运行状态心跳;其它插件仍遵循各自的日志配置。
|
|
26
|
+
|
|
27
|
+
它适合追求高度沉浸感,并且模型、账号白名单和故事档案已经稳定正常的环境。关闭此模式需要在 Console 修改配置并重载插件;失明模式开启期间无法通过聊天指令恢复管理能力。旧 `blackBox` 配置仍可兼容读取,但 Console 只显示 `blindMode`。
|
|
28
|
+
|
|
29
|
+
## 2. storyDefaults:剧本起点
|
|
23
30
|
|
|
24
31
|
这些字段只在创建新主剧本时写入 Canon。修改 Console 不会自动重写已经存在的故事。
|
|
25
32
|
|
|
@@ -27,6 +34,7 @@
|
|
|
27
34
|
| --- | --- |
|
|
28
35
|
| `characterName` | 主角名称。 |
|
|
29
36
|
| `characterProfile` | 主角身份、性格、作息、习惯、压力和行为边界。 |
|
|
37
|
+
| `perspective` | 主角个体价值观 / 看待世界的方式。它作为独立于 Canon 的外壳人格层,在相关事件中自然影响判断;长期剧情可形成 `perspective` overlay。 |
|
|
30
38
|
| `userProfile` | 没有账号专属资料时使用的默认用户背景。 |
|
|
31
39
|
| `relationship` | 新参与者与主角的默认初始关系。 |
|
|
32
40
|
| `world` | 时间、地点、社会与现实规则。 |
|
|
@@ -35,50 +43,74 @@
|
|
|
35
43
|
| `style` | 当前故事文风,优先级高于全局 `model.stylePrompt`。 |
|
|
36
44
|
| `timezone` | IANA 时区,例如 `Asia/Shanghai`。主模型以该时区生成权威 `nowLocal`、当前时段和日照预期。 |
|
|
37
45
|
|
|
38
|
-
|
|
46
|
+
小幅补充无需维护。若大幅改变角色、Perspective、关系或世界前提,保存后执行对应的 `interlude.overlay.clear character|perspective|relationship|world`,避免旧 Overlay 与当前设定冲突。
|
|
47
|
+
|
|
48
|
+
`perspective` 是独立于 Canon 的主角外壳人格层,不会重写 `characterProfile`。Console 的 `storyDefaults.perspective` 会写入新主剧本;已有故事可通过 `interlude.setup {"perspective":"..."}` 一次性设置基础 Perspective,再让长期剧情形成其 overlay。
|
|
39
49
|
|
|
40
50
|
重载和长间隔不会沿用旧剧本中的钟点描述:当前 `nowLocal` 始终优先。时区无效时运行时回退到 UTC,因此发现上午/下午错误时应先检查这里是否为有效 IANA 名称。
|
|
41
51
|
|
|
42
|
-
##
|
|
52
|
+
## 3. model:模型与服务商
|
|
43
53
|
|
|
44
|
-
###
|
|
54
|
+
### 3.1 连接顺序
|
|
45
55
|
|
|
46
56
|
1. 将 `mode` 设为 `openai-compatible`。
|
|
47
|
-
2.
|
|
48
|
-
3. 在 `
|
|
49
|
-
4.
|
|
57
|
+
2. 先确认 `vision.enabled`:纯文本模型保持关闭;视觉模型才开启。
|
|
58
|
+
3. 在 `providers` 的每一行一次填完连接地址、API Key 和实际模型名。
|
|
59
|
+
4. 勾选这行模型要承担的用途:主叙事、压缩、Alter 或 Embedding;每种用途保持一条即可。
|
|
60
|
+
5. 在下方按任务分别调整温度、token、超时、提示词和 Embedding 参数。
|
|
50
61
|
|
|
51
62
|
`fallback` 不调用远程模型,只适合验证插件、数据库和命令是否安装成功。
|
|
52
63
|
|
|
53
|
-
###
|
|
64
|
+
### 智谱官方提供商模式
|
|
65
|
+
|
|
66
|
+
在任意一行 `providers` 中将该行 `mode` 设为 `zhipu-official`,保存并重载后,Console 会切换为智谱专属字段:只需填写智谱 API Key、模型代码和推理强度。该行固定使用 `https://open.bigmodel.cn/api/paas/v4/chat/completions`,不会显示 endpoint、额外请求头或额外请求体;其它提供商行仍可保持 `openai-compatible`。
|
|
67
|
+
|
|
68
|
+
智谱行的 GLM‑5.3‑Flash 强制使用 SSE:首个可见文本等待上限为 45 秒,首字到达后不设置总等待上限。推理强度可选 `low`、`high`、`max`,默认 `high`;GLM‑5.3‑Flash 不支持关闭思考。图片请求会使用智谱接受的 `image_url.url` 形式,不附带 OpenAI 的 `detail` 字段。
|
|
69
|
+
|
|
70
|
+
### 其它官方提供商模式
|
|
71
|
+
|
|
72
|
+
每一行 `providers.mode` 都可以独立选择,保存并重载后显示该模式的字段。以下预设固定官方 Chat Completions endpoint,只需填写 API Key 与模型名:
|
|
73
|
+
|
|
74
|
+
| 模式 | 服务商 | 默认模型 | 说明 |
|
|
75
|
+
| --- | --- | --- | --- |
|
|
76
|
+
| `openai-official` | OpenAI | `gpt-5-mini` | OpenAI 官方 Chat Completions。 |
|
|
77
|
+
| `deepseek-official` | DeepSeek | `deepseek-chat` | DeepSeek 官方 Chat Completions。 |
|
|
78
|
+
| `moonshot-official` | Kimi / Moonshot | `kimi-k2.5` | Kimi 官方 OpenAI-compatible 接口。 |
|
|
79
|
+
| `dashscope-official` | 阿里云百炼 | `qwen-plus` | 可选择北京、新加坡或美国共享服务地域;工作空间专属地址使用自定义模式。 |
|
|
80
|
+
| `siliconflow-official` | 硅基流动 | `Qwen/Qwen3-8B` | 官方 OpenAI-compatible 接口。 |
|
|
81
|
+
| `openrouter` | OpenRouter | `openai/gpt-5-mini` | 使用 OpenRouter 模型 slug,例如 `anthropic/...` 或 `google/...`。 |
|
|
82
|
+
| `gemini-openai` | Google Gemini | `gemini-2.5-flash` | Gemini 官方 OpenAI 兼容端点。 |
|
|
83
|
+
|
|
84
|
+
`openai-compatible` 始终保留给第三方中转站、工作空间专属域名和自定义网关。Anthropic 官方 Messages API 与 HDSI 当前 Chat Completions 请求结构不同,因此不作为“官方兼容预设”显示;可通过 OpenRouter,或使用支持 Chat Completions 的中转服务。
|
|
85
|
+
|
|
86
|
+
### 3.2 providers
|
|
54
87
|
|
|
55
88
|
| 字段 | 说明 |
|
|
56
89
|
| --- | --- |
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `enabled` | 是否参与候选选择。 |
|
|
90
|
+
| `label` | 模型连接的显示名称,例如 GLM 4.7 Flash。 |
|
|
91
|
+
| `enabled` | 是否启用这条模型连接。 |
|
|
60
92
|
| `endpoint` | 完整 Chat Completions 地址。 |
|
|
61
93
|
| `apiKey` | 密钥;按密码处理,不要进入截图和日志。 |
|
|
62
|
-
| `model` |
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
94
|
+
| `model` | 服务商实际模型名;只在这行填写一次。 |
|
|
95
|
+
| `useForMain` | 用作主叙事模型。 |
|
|
96
|
+
| `useForCompaction` | 用作后台压缩模型。 |
|
|
97
|
+
| `useForAlter` | 用作 Alter 侧端分析模型。 |
|
|
98
|
+
| `useForEmbedding` | 用作 Embedding 模型;仅支持 `/embeddings` 的模型可勾选。 |
|
|
66
99
|
| `extraHeaders` / `extraBody` | 服务商明确要求时填写 JSON 对象。 |
|
|
67
100
|
|
|
68
|
-
|
|
101
|
+
模型行既是连接配置,也是用途分配中心。无需填写或记忆 `providerId`、`modelId`、`mainModelId`;旧配置中的这些字段仍可兼容读取。
|
|
69
102
|
|
|
70
|
-
|
|
103
|
+
### 3.3 主叙事调优
|
|
71
104
|
|
|
72
|
-
|
|
105
|
+
主叙事模型由上方 `useForMain` 自动选择。这里仅调整它的生成行为:
|
|
73
106
|
|
|
74
|
-
- `mainModelId`
|
|
75
107
|
- `mainTemperature`
|
|
76
108
|
- `mainTopP`
|
|
77
|
-
- `mainMaxTokens
|
|
78
|
-
- `mainTimeout
|
|
79
|
-
- `mainResponseFormat
|
|
109
|
+
- `mainMaxTokens`
|
|
110
|
+
- `mainTimeout`
|
|
111
|
+
- `mainResponseFormat`:主叙事唯一的输出格式设置
|
|
80
112
|
|
|
81
|
-
###
|
|
113
|
+
### 3.4 failover 与提示词
|
|
82
114
|
|
|
83
115
|
`failover.enabled` 控制失败切换;`strategy` 可选按顺序或轮询;`maxAttemptsPerProvider` 控制单服务尝试次数;`cooldownMinutes` 控制失败后的临时跳过。
|
|
84
116
|
|
|
@@ -89,19 +121,19 @@
|
|
|
89
121
|
- `fixedPrompt`:所有故事通用的长期约束。
|
|
90
122
|
- `stylePrompt`:全局文风。
|
|
91
123
|
|
|
92
|
-
###
|
|
124
|
+
### 3.5 vision、compaction、embedding
|
|
93
125
|
|
|
94
|
-
- `vision.enabled
|
|
95
|
-
- `compaction
|
|
96
|
-
- `embedding
|
|
126
|
+
- `vision.enabled`:位于模型区最前面;开启后把当前私聊图片作为原生多模态输入,纯文本模型必须保持关闭。
|
|
127
|
+
- `compaction`:后台整理已发生剧本、事实和状态提案。模型由 `useForCompaction` 选择;这里配置温度、top-p、输出、超时、响应格式和压缩提示词。
|
|
128
|
+
- `embedding`:长期事实语义检索。模型由 `useForEmbedding` 选择;`liveQuery=false` 可避免每次实时回复多一次向量请求,`backfillBatchSize` 控制后台补齐旧事实的速度。
|
|
97
129
|
|
|
98
130
|
Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址推导 `/embeddings`。非标准网关应填写完整地址。
|
|
99
131
|
|
|
100
|
-
##
|
|
132
|
+
## 4. onebot:OneBot / NapCat 权限
|
|
101
133
|
|
|
102
134
|
`onebot.enabled=true` 后采用显式白名单:`botAccounts` 或 `userAccounts` 为空都会拒绝对应账号。
|
|
103
135
|
|
|
104
|
-
###
|
|
136
|
+
### 4.1 botAccounts 与 userAccounts
|
|
105
137
|
|
|
106
138
|
- `botAccounts`:机器人 QQ、备注、启用状态。
|
|
107
139
|
- `userAccounts`:用户 QQ、主角称呼、稳定人物 ID、人物资料、初始关系、启用状态。
|
|
@@ -109,7 +141,7 @@ Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址
|
|
|
109
141
|
|
|
110
142
|
同一现实人物的多个账号可复用 `personId`。不同人物必须分别填写资料和关系,不能把所有 QQ 当作同一关系分支。
|
|
111
143
|
|
|
112
|
-
###
|
|
144
|
+
### 4.2 groupChats
|
|
113
145
|
|
|
114
146
|
| 字段 | 说明 |
|
|
115
147
|
| --- | --- |
|
|
@@ -120,10 +152,22 @@ Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址
|
|
|
120
152
|
| `contextLimit` | 主叙事读取的最近群消息数。 |
|
|
121
153
|
| `debounceSeconds` | 合并连续群消息的等待时间。 |
|
|
122
154
|
| `cooldownSeconds` | 主角群发言后的最短冷却。 |
|
|
155
|
+
| `willingness` | 可选的纯算法群聊意愿:积累、半衰减、阈值概率与成功发言成本。 |
|
|
123
156
|
|
|
124
157
|
群聊不再调用独立快速筛选模型。满足入口规则的消息在合并后直接交给主叙事,由主叙事决定是否输出 `groupReply`。
|
|
125
158
|
|
|
126
|
-
|
|
159
|
+
对 `responseMode=always` 的活跃群,可开启 `willingness`。它完全在本地按算法运行:普通群消息累积意愿、按半衰期自然衰减、接近上限时增益递减、超过阈值后按概率决定是否进入主模型;主角成功群发言后会扣除意愿。关键词与引用机器人消息可增加意愿,@ 机器人始终绕过概率。它默认关闭,只作用于这个群,不影响私聊、Alter、Agency、自动推进或主提示词,也不产生额外模型调用。
|
|
160
|
+
|
|
161
|
+
### 4.3 voiceTranscription:SnowLuma 私聊语音转写
|
|
162
|
+
|
|
163
|
+
| 字段 | 默认值 | 说明 |
|
|
164
|
+
| --- | --- | --- |
|
|
165
|
+
| `enabled` | `false` | 启用 SnowLuma `fetch_ptt_text`。仅处理当前私聊中的 QQ `record` 语音。 |
|
|
166
|
+
| `timeoutMs` | `20000` | 转写最大等待时间;超时后仍保留语音事实并继续本轮。 |
|
|
167
|
+
|
|
168
|
+
转写成功后,主模型收到的用户事件会带有 `[用户语音转写]` 标记,并和当前文本、图片一起构成同一个回合。该功能需要 SnowLuma 支持原始 OneBot `fetch_ptt_text` 动作;NapCat 或其它实现不支持时会安全降级。它不把音频文件或 base64 写入 HDSI 数据库。
|
|
169
|
+
|
|
170
|
+
## 5. sharedStory:共享剧本
|
|
127
171
|
|
|
128
172
|
当前运行时固定为“同一机器人账号一个活动主剧本”,因此不再显示旧版 `enabled` 开关。
|
|
129
173
|
|
|
@@ -136,14 +180,14 @@ Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址
|
|
|
136
180
|
| `participantContextLimit` | 单次请求携带的其它参与者摘要数量。 |
|
|
137
181
|
| `managerAccounts` | 有权执行全局管理命令的 QQ;空表表示所有已授权用户。 |
|
|
138
182
|
|
|
139
|
-
##
|
|
183
|
+
## 6. runtime:对话与时间
|
|
140
184
|
|
|
141
|
-
###
|
|
185
|
+
### 6.1 消息合并、回复和失败恢复
|
|
142
186
|
|
|
143
187
|
| 字段 | 说明 |
|
|
144
188
|
| --- | --- |
|
|
145
189
|
| `captureDirectMessages` | 是否接管私聊。 |
|
|
146
|
-
| `autoCreate` |
|
|
190
|
+
| `autoCreate` | 没有故事时是否从当前 Console 档案自动启动;关闭时先执行 `interlude.doctor`,再由管理员执行 `interlude.story.start`。 |
|
|
147
191
|
| `ignoreCommandMessages` | 防止管理命令进入剧本。 |
|
|
148
192
|
| `userMessageDebounceSeconds` | 合并连续私聊的静默等待时间,默认 2 秒。 |
|
|
149
193
|
| `narrativeRetryDelaySeconds` / `narrativeRetryMaxAttempts` | 叙事服务失败后的重试节奏。 |
|
|
@@ -151,13 +195,13 @@ Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址
|
|
|
151
195
|
| `minimumDelayedReplySeconds` / `maximumDelayedReplyMinutes` | 模型允许计划的延迟范围。 |
|
|
152
196
|
| `maxScriptCharacters` / `maxMessageCharacters` | 单回合剧本和单条可见消息的字符上限。 |
|
|
153
197
|
|
|
154
|
-
###
|
|
198
|
+
### 6.2 分段消息
|
|
155
199
|
|
|
156
200
|
`splitReplyMessages` 开启后,模型可以用 `messageSeparator`(默认 `<sep/>`)拆分聊天气泡。`typingBaseDelaySeconds`、`typingCharactersPerSecond` 和 `typingMaxDelaySeconds` 控制后续气泡的模拟输入时间。
|
|
157
201
|
|
|
158
202
|
主模型尚未提交第一条回复时,新消息会废弃旧请求,并把旧、新消息合并后重新写作,不再受固定秒数窗口限制。第一条回复已经提交后,新消息会取消剩余分段;未发送文字以 `interruptedOutgoingDrafts` 进入替代提示词,表示主角想发送但被新消息打断,不能视为已送达内容。
|
|
159
203
|
|
|
160
|
-
###
|
|
204
|
+
### 6.3 自动生活和主动联系
|
|
161
205
|
|
|
162
206
|
| 字段 | 说明 |
|
|
163
207
|
| --- | --- |
|
|
@@ -171,7 +215,7 @@ Embedding 地址留空时,插件会尝试从标准 `/chat/completions` 地址
|
|
|
171
215
|
| `proactiveWillingnessThreshold` | 主模型主动联系意愿门槛。 |
|
|
172
216
|
| `contextEntryLimit` / `memoryLimit` | 主叙事携带的近期条目和长期事实数量。 |
|
|
173
217
|
|
|
174
|
-
##
|
|
218
|
+
## 7. agency:主体行动窗口
|
|
175
219
|
|
|
176
220
|
Agency Window 只描述角色能否采取外部联系行动的现实条件,不描述情绪、关系阶段或联系风格。
|
|
177
221
|
|
|
@@ -186,9 +230,9 @@ Agency Window 包含 `activityLoad`、`privacy` 和 `deviceAccess`。自动生
|
|
|
186
230
|
|
|
187
231
|
`runtime.allowProactiveMessages=false` 时 Agency 不产生可见联系。`proactiveWillingnessThreshold`、白名单和单回合动作上限仍然是最终安全边界。Agency 不读取 Alter 数值,也不会影响文风。
|
|
188
232
|
|
|
189
|
-
##
|
|
233
|
+
## 8. memory:连续性与记忆
|
|
190
234
|
|
|
191
|
-
###
|
|
235
|
+
### 8.1 整理触发和预算
|
|
192
236
|
|
|
193
237
|
- `enabled`
|
|
194
238
|
- `backgroundIntervalMinutes`
|
|
@@ -199,22 +243,22 @@ Agency Window 包含 `activityLoad`、`privacy` 和 `deviceAccess`。自动生
|
|
|
199
243
|
- `factContentCharacters`
|
|
200
244
|
- `maxFactsPerStory` / `maxStoriesPerCompactionRun`
|
|
201
245
|
|
|
202
|
-
|
|
246
|
+
近期使用原始剧本;更早内容通过场景、剧情弧线和长期事实压缩。默认在 16 条未压缩条目或 10000 个字符达到其一时整理,短对话会保留更宽的连续回合缓冲。压缩只处理已经发生的内容,不会制造未来事件。
|
|
203
247
|
|
|
204
|
-
###
|
|
248
|
+
### 8.2 事实排序
|
|
205
249
|
|
|
206
|
-
`factImportanceWeight`、`factConfidenceWeight`、`factRecencyWeight`、`semanticWeight` 和 `unresolvedWeight`
|
|
250
|
+
`factImportanceWeight`、`factConfidenceWeight`、`factRecencyWeight`、`semanticWeight` 和 `unresolvedWeight` 共同决定旧事实进入主提示词的顺序。Embedding 可用时,语义分数参与排序;否则语义分数为零。
|
|
207
251
|
|
|
208
|
-
###
|
|
252
|
+
### 8.3 剧情余波
|
|
209
253
|
|
|
210
254
|
- `activeConsequencesEnabled`
|
|
211
255
|
- `activeConsequencePromptLimit`
|
|
212
256
|
- `activeConsequenceMaxDays`
|
|
213
257
|
- `activeConsequenceDefaultStrength`
|
|
214
258
|
|
|
215
|
-
|
|
259
|
+
余波保存已经发生事件的短期影响,保持具体、短期,并由后续事件自然收束。
|
|
216
260
|
|
|
217
|
-
###
|
|
261
|
+
### 8.4 Overlay 演化与压缩
|
|
218
262
|
|
|
219
263
|
普通状态提案需满足置信度、至少三个独立剧本回合、至少两个日期以及同路径冷却。相关字段包括:
|
|
220
264
|
|
|
@@ -229,7 +273,7 @@ Agency Window 包含 `activityLoad`、`privacy` 和 `deviceAccess`。自动生
|
|
|
229
273
|
|
|
230
274
|
Overlay 压缩字段包括 `overlayCompressionEnabled`、近期保留天数、周/月窗口和摘要字符上限。管理员可使用 `interlude.overlay.status`、`interlude.overlay.compact` 和 `interlude.overlay.clear` 检查或维护。
|
|
231
275
|
|
|
232
|
-
##
|
|
276
|
+
## 9. alterSystem:临时氛围偏移
|
|
233
277
|
|
|
234
278
|
Alter 只衡量本轮新事件对整体氛围造成的净变化:正数偏严肃,负数偏轻松,范围 `-5..5`。
|
|
235
279
|
|
|
@@ -243,11 +287,11 @@ Alter 只衡量本轮新事件对整体氛围造成的净变化:正数偏严
|
|
|
243
287
|
| `minWeight` | `0.2` | 低于此值清除旧 offset。 |
|
|
244
288
|
| `maxIntensity` | `2` | 新 offset 强度上限。 |
|
|
245
289
|
|
|
246
|
-
|
|
290
|
+
Alter 模型由上方 `useForAlter` 选择。`temperature`、`topP`、`maxTokens`、`timeout` 和 `prompt` 只控制这项低频分析任务。
|
|
247
291
|
|
|
248
292
|
达到阈值后,本轮先完成剧本、状态和可见消息;侧端分析在同一故事队列中后台运行,不阻塞当前回复。失败时保留累计值并进入五分钟冷却。完整算法见 `docs/ALTER_SYSTEM.md`。
|
|
249
293
|
|
|
250
|
-
##
|
|
294
|
+
## 10. browser:只读网页观察
|
|
251
295
|
|
|
252
296
|
需要同时启用 Koishi Puppeteer。插件只允许搜索或访问公开 HTTP(S) 页面,不登录、不填表、不下载、不发布内容,并拒绝 localhost、私网和不安全协议。
|
|
253
297
|
|
|
@@ -266,7 +310,7 @@ Alter 只衡量本轮新事件对整体氛围造成的净变化:正数偏严
|
|
|
266
310
|
|
|
267
311
|
`allow-immediate` 会为少数私聊额外执行一次观察并重新请求主叙事,因此延迟和费用都更高。首次测试使用 `deferred-only`。
|
|
268
312
|
|
|
269
|
-
##
|
|
313
|
+
## 11. logging:日志与隐私
|
|
270
314
|
|
|
271
315
|
| 字段 | 说明 |
|
|
272
316
|
| --- | --- |
|