luckytri 1.0.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/.github/SECURITY.md +71 -0
- package/LICENSE +21 -0
- package/README.en.md +250 -0
- package/README.md +250 -0
- package/bin/luckytri.js +107 -0
- package/docs/brand/banner.png +0 -0
- package/docs/brand/palette.png +0 -0
- package/docs/brand/portrait.png +0 -0
- package/docs/en/CHANGELOG.md +113 -0
- package/docs/en/architecture.md +152 -0
- package/docs/en/chat-style.md +62 -0
- package/docs/en/connect.md +63 -0
- package/docs/en/guide.md +216 -0
- package/docs/en/her-life.md +189 -0
- package/docs/en/npm-release.md +25 -0
- package/docs/en/plugins.md +82 -0
- package/docs/en/recovery.md +28 -0
- package/docs/en/time.md +71 -0
- package/docs/en/webui.md +73 -0
- package/docs/zh/CHANGELOG.md +113 -0
- package/docs/zh/architecture.md +152 -0
- package/docs/zh/chat-style.md +62 -0
- package/docs/zh/connect.md +63 -0
- package/docs/zh/guide.md +216 -0
- package/docs/zh/her-life.md +189 -0
- package/docs/zh/npm-release.md +33 -0
- package/docs/zh/plugins.md +82 -0
- package/docs/zh/recovery.md +28 -0
- package/docs/zh/time.md +71 -0
- package/docs/zh/webui.md +73 -0
- package/package.json +108 -0
- package/plugins/sdk/index.d.ts +155 -0
- package/plugins/sdk/testing.js +58 -0
- package/plugins/weather/index.js +82 -0
- package/plugins/weather/luckytri-plugin.json +29 -0
- package/public/app/assets/ChatsPage-C-FcRapR.js +3 -0
- package/public/app/assets/ChatsPage-DfyPCS9N.css +1 -0
- package/public/app/assets/Empty-CpP5kQHH.js +2 -0
- package/public/app/assets/Empty-DmUB2-Bk.css +1 -0
- package/public/app/assets/Field-D4gY-INU.js +1 -0
- package/public/app/assets/HeartPage-Bft9wZp5.css +1 -0
- package/public/app/assets/HeartPage-CPy_thQd.js +1 -0
- package/public/app/assets/LifePage-BUi5euBF.css +1 -0
- package/public/app/assets/LifePage-CxWvwmSf.js +1 -0
- package/public/app/assets/MemoryPage-DC4rhQ68.js +1 -0
- package/public/app/assets/MemoryPage-cZvXfkXb.css +1 -0
- package/public/app/assets/NaturePage-CTXHCE2D.css +1 -0
- package/public/app/assets/NaturePage-IvYw04Zq.js +3 -0
- package/public/app/assets/PeoplePage-BmUxkrOU.css +1 -0
- package/public/app/assets/PeoplePage-Cqefm9-q.js +1 -0
- package/public/app/assets/PluginsPage-DKSaKvXb.js +2 -0
- package/public/app/assets/PluginsPage-HyBe5D8w.css +1 -0
- package/public/app/assets/SystemPage-CAMPoYqM.css +1 -0
- package/public/app/assets/SystemPage-CJmtJkrK.js +1 -0
- package/public/app/assets/TimePage-BOms_n4I.css +1 -0
- package/public/app/assets/TimePage-Cw44inM4.js +3 -0
- package/public/app/assets/formatters-ZmW_xFHw.js +1 -0
- package/public/app/assets/index-BheRW-1t.js +4 -0
- package/public/app/assets/index-YDz1ree1.css +1 -0
- package/public/app/assets/knowledge-DG0e0uKw.js +1 -0
- package/public/app/assets/liquid-garden-IMoHBwzc.png +0 -0
- package/public/app/assets/luckytri-home-95QKeMtc.png +0 -0
- package/public/app/assets/media-BzPDBm7e.js +1 -0
- package/public/app/index.html +27 -0
- package/public/guide.en.html +1053 -0
- package/public/guide.html +893 -0
- package/public/plugin-kit/v1/bridge.js +30 -0
- package/public/plugin-kit/v1/kit.css +14 -0
- package/public/tutorial.en.md +214 -0
- package/public/tutorial.md +214 -0
- package/scripts/backup.js +311 -0
- package/scripts/browser.js +41 -0
- package/scripts/launch.js +94 -0
- package/scripts/plugin.js +150 -0
- package/scripts/proxy-config.js +167 -0
- package/scripts/recover.js +26 -0
- package/scripts/runtime.js +25 -0
- package/scripts/service.js +47 -0
- package/scripts/setup.js +50 -0
- package/scripts/start-server.js +41 -0
- package/scripts/stop.js +36 -0
- package/server/app.js +96 -0
- package/server/channels/adapters.js +27 -0
- package/server/channels/contract.js +57 -0
- package/server/channels/hub.js +165 -0
- package/server/channels/index.js +25 -0
- package/server/channels/onebot/adapter.js +288 -0
- package/server/channels/onebot/index.js +336 -0
- package/server/channels/onebot/token.js +3 -0
- package/server/channels/qqbot/adapter.js +253 -0
- package/server/channels/qqbot/api.js +199 -0
- package/server/channels/qqbot/credentials.js +11 -0
- package/server/channels/qqbot/gateway.js +274 -0
- package/server/channels/qqbot/index.js +389 -0
- package/server/channels/segments.js +40 -0
- package/server/channels/session-key.js +153 -0
- package/server/channels/state.js +42 -0
- package/server/core/api.js +564 -0
- package/server/core/capabilities.js +208 -0
- package/server/core/context-builder.js +288 -0
- package/server/core/context-compactor.js +454 -0
- package/server/core/conversation-cues.js +325 -0
- package/server/core/conversation-manager.js +87 -0
- package/server/core/events.js +60 -0
- package/server/core/feedback.js +8 -0
- package/server/core/group-style.js +72 -0
- package/server/core/image-preprocessor.js +208 -0
- package/server/core/initiative-context.js +66 -0
- package/server/core/input-budget.js +32 -0
- package/server/core/local-demo.js +98 -0
- package/server/core/message-manager.js +118 -0
- package/server/core/message-scheduler.js +78 -0
- package/server/core/model-json.js +190 -0
- package/server/core/model-manager.js +1213 -0
- package/server/core/model-presets.js +900 -0
- package/server/core/name-call.js +29 -0
- package/server/core/net-guard.js +49 -0
- package/server/core/network.js +157 -0
- package/server/core/orchestrator.js +569 -0
- package/server/core/perceivers.js +91 -0
- package/server/core/person-name.js +22 -0
- package/server/core/persona-manager.js +243 -0
- package/server/core/reply-delivery.js +393 -0
- package/server/core/reply-target-resolver.js +50 -0
- package/server/core/repository.js +293 -0
- package/server/core/response-generator.js +50 -0
- package/server/core/response-validator.js +508 -0
- package/server/core/retired-prompts.js +51 -0
- package/server/core/sessions.js +109 -0
- package/server/core/speaker-names.js +92 -0
- package/server/core/topic-tracker.js +65 -0
- package/server/core/turn-processor.js +630 -0
- package/server/core/turn.js +236 -0
- package/server/core/vision-manager.js +633 -0
- package/server/http.js +18 -0
- package/server/i18n/decisions.js +206 -0
- package/server/i18n/errors.js +497 -0
- package/server/i18n/index.js +144 -0
- package/server/i18n/labels.js +653 -0
- package/server/i18n/models.js +111 -0
- package/server/index.js +102 -0
- package/server/knowledge/api.js +342 -0
- package/server/knowledge/embedding-profile.js +114 -0
- package/server/knowledge/index.js +13 -0
- package/server/knowledge/manager.js +386 -0
- package/server/knowledge/retrieval.js +93 -0
- package/server/knowledge/schema.js +154 -0
- package/server/knowledge/vector-index.js +90 -0
- package/server/mind/affect.js +265 -0
- package/server/mind/anticipations.js +507 -0
- package/server/mind/api.js +703 -0
- package/server/mind/attention.js +200 -0
- package/server/mind/bonds.js +558 -0
- package/server/mind/budget.js +152 -0
- package/server/mind/clock.js +83 -0
- package/server/mind/context-selection.js +61 -0
- package/server/mind/continuity.js +562 -0
- package/server/mind/conversation-origin.js +175 -0
- package/server/mind/day-planner.js +324 -0
- package/server/mind/days.js +210 -0
- package/server/mind/evidence-read.js +45 -0
- package/server/mind/evidence.js +148 -0
- package/server/mind/faces.js +138 -0
- package/server/mind/guard.js +60 -0
- package/server/mind/index.js +445 -0
- package/server/mind/initiative.js +333 -0
- package/server/mind/life/activities.js +21 -0
- package/server/mind/life/context.js +309 -0
- package/server/mind/life/diary.js +786 -0
- package/server/mind/life/growth.js +252 -0
- package/server/mind/life/index.js +1049 -0
- package/server/mind/life/presence.js +305 -0
- package/server/mind/meetings.js +1069 -0
- package/server/mind/memory-policy.js +48 -0
- package/server/mind/memory.js +888 -0
- package/server/mind/nature.js +262 -0
- package/server/mind/novelty.js +19 -0
- package/server/mind/observations.js +84 -0
- package/server/mind/own-day.js +324 -0
- package/server/mind/own-voice.js +318 -0
- package/server/mind/periods.js +118 -0
- package/server/mind/reading.js +120 -0
- package/server/mind/salience.js +201 -0
- package/server/mind/schema.js +562 -0
- package/server/mind/self.js +484 -0
- package/server/mind/senses.js +53 -0
- package/server/mind/thoughts.js +274 -0
- package/server/mind/time/activity-clock.js +196 -0
- package/server/mind/time/agenda.js +242 -0
- package/server/mind/time/api.js +200 -0
- package/server/mind/time/attention.js +34 -0
- package/server/mind/time/availability.js +69 -0
- package/server/mind/time/commitment-review.js +198 -0
- package/server/mind/time/delivery-links.js +130 -0
- package/server/mind/time/executor.js +512 -0
- package/server/mind/time/experiences.js +128 -0
- package/server/mind/time/games.js +562 -0
- package/server/mind/time/index.js +739 -0
- package/server/mind/time/intent.js +166 -0
- package/server/mind/time/kinds.js +171 -0
- package/server/mind/time/model-material.js +77 -0
- package/server/mind/time/plugin-activity.js +207 -0
- package/server/mind/time/presentation.js +51 -0
- package/server/mind/time/schedule.js +83 -0
- package/server/mind/time/schema.js +84 -0
- package/server/mind/time/search.js +383 -0
- package/server/mind/time/sharing.js +472 -0
- package/server/mind/time/task-links.js +311 -0
- package/server/mind/time/tasks.js +587 -0
- package/server/mind/time/works.js +432 -0
- package/server/mind/traits.js +191 -0
- package/server/mind/util.js +110 -0
- package/server/mind/view.js +273 -0
- package/server/paths.js +102 -0
- package/server/plugins/api.js +204 -0
- package/server/plugins/host.js +967 -0
- package/server/plugins/install.js +295 -0
- package/server/plugins/manifest.js +201 -0
- package/server/plugins/permissions.js +42 -0
- package/server/plugins/runner/guard.mjs +36 -0
- package/server/plugins/runner/worker.mjs +250 -0
- package/server/plugins/schema.js +91 -0
- package/server/plugins/zip.js +112 -0
- package/server/startup-lock.js +118 -0
- package/server/storage/archive.js +241 -0
- package/server/storage/backup-cleanup-worker.js +8 -0
- package/server/storage/backup-cleanup.js +414 -0
- package/server/storage/backup-lock.js +76 -0
- package/server/storage/backup-scheduler.js +131 -0
- package/server/storage/store.js +199 -0
- package/server/studio/display-names.js +138 -0
- package/server/studio/management.js +102 -0
- package/server/studio/readiness.js +190 -0
- package/server/studio/settings.js +236 -0
- package/server/version.js +10 -0
|
@@ -0,0 +1,893 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<title>LuckyTri v1.0.0 · 使用教程</title>
|
|
7
|
+
<style>
|
|
8
|
+
* {
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
}
|
|
11
|
+
html {
|
|
12
|
+
scroll-behavior: smooth;
|
|
13
|
+
}
|
|
14
|
+
body {
|
|
15
|
+
margin: 0;
|
|
16
|
+
background: #f6f8f3;
|
|
17
|
+
color: #34412f;
|
|
18
|
+
font:
|
|
19
|
+
14px/1.9 "Microsoft YaHei",
|
|
20
|
+
system-ui,
|
|
21
|
+
sans-serif;
|
|
22
|
+
}
|
|
23
|
+
a {
|
|
24
|
+
color: #638353;
|
|
25
|
+
text-underline-offset: 4px;
|
|
26
|
+
}
|
|
27
|
+
header {
|
|
28
|
+
background: #edf3e6;
|
|
29
|
+
border-bottom: 1px solid #dfe7d6;
|
|
30
|
+
padding: 24px max(24px, calc((100% - 1160px) / 2));
|
|
31
|
+
display: flex;
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
gap: 20px;
|
|
34
|
+
align-items: center;
|
|
35
|
+
}
|
|
36
|
+
header b {
|
|
37
|
+
font-size: 20px;
|
|
38
|
+
letter-spacing: 2px;
|
|
39
|
+
}
|
|
40
|
+
header small {
|
|
41
|
+
display: block;
|
|
42
|
+
color: #93a187;
|
|
43
|
+
font-size: 10px;
|
|
44
|
+
letter-spacing: 2px;
|
|
45
|
+
}
|
|
46
|
+
header nav {
|
|
47
|
+
display: flex;
|
|
48
|
+
gap: 14px;
|
|
49
|
+
align-items: center;
|
|
50
|
+
flex-wrap: wrap;
|
|
51
|
+
justify-content: flex-end;
|
|
52
|
+
font-size: 12px;
|
|
53
|
+
}
|
|
54
|
+
button {
|
|
55
|
+
font: inherit;
|
|
56
|
+
background: white;
|
|
57
|
+
border: 1px solid #dce5d2;
|
|
58
|
+
border-radius: 7px;
|
|
59
|
+
padding: 7px 13px;
|
|
60
|
+
color: #6e8760;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
}
|
|
63
|
+
.lang {
|
|
64
|
+
border: 1px solid #dce5d2;
|
|
65
|
+
border-radius: 7px;
|
|
66
|
+
padding: 6px 12px;
|
|
67
|
+
background: white;
|
|
68
|
+
text-decoration: none;
|
|
69
|
+
}
|
|
70
|
+
.layout {
|
|
71
|
+
max-width: 1200px;
|
|
72
|
+
margin: 36px auto;
|
|
73
|
+
display: grid;
|
|
74
|
+
grid-template-columns: 225px minmax(0, 1fr);
|
|
75
|
+
gap: 32px;
|
|
76
|
+
padding: 0 24px;
|
|
77
|
+
}
|
|
78
|
+
.toc {
|
|
79
|
+
position: sticky;
|
|
80
|
+
top: 24px;
|
|
81
|
+
align-self: start;
|
|
82
|
+
font-size: 12px;
|
|
83
|
+
}
|
|
84
|
+
.toc p {
|
|
85
|
+
font-size: 10px;
|
|
86
|
+
letter-spacing: 2px;
|
|
87
|
+
color: #a5b097;
|
|
88
|
+
}
|
|
89
|
+
.toc a {
|
|
90
|
+
display: block;
|
|
91
|
+
text-decoration: none;
|
|
92
|
+
color: #819176;
|
|
93
|
+
padding: 8px 0;
|
|
94
|
+
}
|
|
95
|
+
.toc a:hover {
|
|
96
|
+
color: #456638;
|
|
97
|
+
}
|
|
98
|
+
article {
|
|
99
|
+
background: #fff;
|
|
100
|
+
border: 1px solid #e5ebdf;
|
|
101
|
+
border-radius: 14px;
|
|
102
|
+
padding: 38px 44px;
|
|
103
|
+
min-width: 0;
|
|
104
|
+
}
|
|
105
|
+
h1 {
|
|
106
|
+
font-size: 27px;
|
|
107
|
+
line-height: 1.5;
|
|
108
|
+
margin: 0 0 20px;
|
|
109
|
+
font-weight: 600;
|
|
110
|
+
}
|
|
111
|
+
h2 {
|
|
112
|
+
font-size: 20px;
|
|
113
|
+
scroll-margin-top: 24px;
|
|
114
|
+
border-top: 1px solid #e9eee4;
|
|
115
|
+
margin: 38px 0 20px;
|
|
116
|
+
padding-top: 28px;
|
|
117
|
+
}
|
|
118
|
+
h3 {
|
|
119
|
+
font-size: 15px;
|
|
120
|
+
margin-top: 24px;
|
|
121
|
+
}
|
|
122
|
+
p,
|
|
123
|
+
li {
|
|
124
|
+
color: #6f7d65;
|
|
125
|
+
}
|
|
126
|
+
strong {
|
|
127
|
+
color: #4e6442;
|
|
128
|
+
}
|
|
129
|
+
pre {
|
|
130
|
+
overflow: auto;
|
|
131
|
+
background: #f4f7ef;
|
|
132
|
+
padding: 18px 20px;
|
|
133
|
+
border: 1px solid #e5ecdc;
|
|
134
|
+
border-radius: 8px;
|
|
135
|
+
line-height: 1.7;
|
|
136
|
+
font-size: 12px;
|
|
137
|
+
color: #5d774e;
|
|
138
|
+
}
|
|
139
|
+
code {
|
|
140
|
+
font-family: Consolas, monospace;
|
|
141
|
+
overflow-wrap: anywhere;
|
|
142
|
+
}
|
|
143
|
+
p code,
|
|
144
|
+
li code,
|
|
145
|
+
td code {
|
|
146
|
+
background: #f1f5ec;
|
|
147
|
+
padding: 2px 5px;
|
|
148
|
+
border-radius: 4px;
|
|
149
|
+
font-size: 12px;
|
|
150
|
+
}
|
|
151
|
+
table {
|
|
152
|
+
border-collapse: collapse;
|
|
153
|
+
width: 100%;
|
|
154
|
+
table-layout: fixed;
|
|
155
|
+
font-size: 12px;
|
|
156
|
+
margin: 22px 0;
|
|
157
|
+
}
|
|
158
|
+
th,
|
|
159
|
+
td {
|
|
160
|
+
border: 1px solid #e4eadc;
|
|
161
|
+
padding: 10px 12px;
|
|
162
|
+
text-align: left;
|
|
163
|
+
overflow-wrap: anywhere;
|
|
164
|
+
}
|
|
165
|
+
th {
|
|
166
|
+
background: #eff4e9;
|
|
167
|
+
color: #708462;
|
|
168
|
+
}
|
|
169
|
+
td {
|
|
170
|
+
color: #7d8974;
|
|
171
|
+
}
|
|
172
|
+
ul,
|
|
173
|
+
ol {
|
|
174
|
+
padding-left: 24px;
|
|
175
|
+
}
|
|
176
|
+
blockquote {
|
|
177
|
+
border-left: 3px solid #b6c7a5;
|
|
178
|
+
padding-left: 18px;
|
|
179
|
+
}
|
|
180
|
+
footer {
|
|
181
|
+
text-align: center;
|
|
182
|
+
font-size: 10px;
|
|
183
|
+
color: #a8b19f;
|
|
184
|
+
padding: 0 20px 35px;
|
|
185
|
+
}
|
|
186
|
+
@media (max-width: 760px) {
|
|
187
|
+
header {
|
|
188
|
+
align-items: flex-start;
|
|
189
|
+
flex-direction: column;
|
|
190
|
+
}
|
|
191
|
+
header nav {
|
|
192
|
+
justify-content: flex-start;
|
|
193
|
+
}
|
|
194
|
+
.layout {
|
|
195
|
+
grid-template-columns: 1fr;
|
|
196
|
+
margin: 20px auto;
|
|
197
|
+
padding: 0 14px;
|
|
198
|
+
}
|
|
199
|
+
.toc {
|
|
200
|
+
position: static;
|
|
201
|
+
display: flex;
|
|
202
|
+
gap: 10px;
|
|
203
|
+
overflow: auto;
|
|
204
|
+
}
|
|
205
|
+
.toc p {
|
|
206
|
+
display: none;
|
|
207
|
+
}
|
|
208
|
+
.toc a {
|
|
209
|
+
white-space: nowrap;
|
|
210
|
+
border: 1px solid #e0e8d8;
|
|
211
|
+
border-radius: 7px;
|
|
212
|
+
padding: 7px 10px;
|
|
213
|
+
}
|
|
214
|
+
article {
|
|
215
|
+
padding: 24px 20px;
|
|
216
|
+
}
|
|
217
|
+
h1 {
|
|
218
|
+
font-size: 23px;
|
|
219
|
+
}
|
|
220
|
+
h2 {
|
|
221
|
+
font-size: 18px;
|
|
222
|
+
}
|
|
223
|
+
th,
|
|
224
|
+
td {
|
|
225
|
+
padding: 7px;
|
|
226
|
+
}
|
|
227
|
+
table {
|
|
228
|
+
font-size: 11px;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
@media print {
|
|
232
|
+
body {
|
|
233
|
+
background: white;
|
|
234
|
+
}
|
|
235
|
+
.toc,
|
|
236
|
+
header nav {
|
|
237
|
+
display: none;
|
|
238
|
+
}
|
|
239
|
+
.layout {
|
|
240
|
+
display: block;
|
|
241
|
+
margin: 0;
|
|
242
|
+
max-width: none;
|
|
243
|
+
padding: 0;
|
|
244
|
+
}
|
|
245
|
+
article {
|
|
246
|
+
border: 0;
|
|
247
|
+
padding: 0;
|
|
248
|
+
}
|
|
249
|
+
header {
|
|
250
|
+
padding: 0 0 20px;
|
|
251
|
+
background: white;
|
|
252
|
+
}
|
|
253
|
+
a {
|
|
254
|
+
color: inherit;
|
|
255
|
+
}
|
|
256
|
+
h2 {
|
|
257
|
+
break-after: avoid;
|
|
258
|
+
}
|
|
259
|
+
pre,
|
|
260
|
+
tr {
|
|
261
|
+
break-inside: avoid;
|
|
262
|
+
}
|
|
263
|
+
footer {
|
|
264
|
+
padding: 20px 0;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
</style>
|
|
268
|
+
</head>
|
|
269
|
+
<body>
|
|
270
|
+
<header>
|
|
271
|
+
<div>
|
|
272
|
+
<b>LuckyTri · 上手手册</b><small>TIME · MEMORY · CHOICE / v1.0.0</small>
|
|
273
|
+
</div>
|
|
274
|
+
<nav>
|
|
275
|
+
<a href="/#setup">返回管理台</a
|
|
276
|
+
><a href="/tutorial.md" download>下载 Markdown</a
|
|
277
|
+
><button onclick="window.print()">打印 / 保存 PDF</button
|
|
278
|
+
><a class="lang" href="/guide.en.html" hreflang="en" lang="en"
|
|
279
|
+
>English</a
|
|
280
|
+
>
|
|
281
|
+
</nav>
|
|
282
|
+
</header>
|
|
283
|
+
<div class="layout">
|
|
284
|
+
<nav class="toc" aria-label="教程目录">
|
|
285
|
+
<p>CONTENTS</p>
|
|
286
|
+
<a href="#step-1">1. 启动</a><a href="#step-2">2. 本机令牌</a
|
|
287
|
+
><a href="#step-3">3. 先在模拟模式试聊</a
|
|
288
|
+
><a href="#step-4">4. 连接模型</a><a href="#step-5">5. 连接 QQ</a
|
|
289
|
+
><a href="#step-6">6. 让 TA 参与会话</a
|
|
290
|
+
><a href="#step-7">7. TA、记忆和知识</a
|
|
291
|
+
><a href="#step-8">8. 备份与停止</a><a href="#step-9">9. 常见问题</a>
|
|
292
|
+
</nav>
|
|
293
|
+
<article>
|
|
294
|
+
<h1>LuckyTri · 从零上手教程</h1>
|
|
295
|
+
<p>
|
|
296
|
+
LuckyTri 在你的电脑上运行,通过 QQ 与人相遇。QQ
|
|
297
|
+
有两种连接方式,二选一:<strong>OneBot 11</strong>(自备接入端,反向
|
|
298
|
+
WebSocket)或 <strong>QQ 官方机器人</strong>(QQ
|
|
299
|
+
开放平台)。两种方式下她的记忆、心情和行为完全一致,区别只在消息怎么到达。模型
|
|
300
|
+
API 由你自行配置。
|
|
301
|
+
</p>
|
|
302
|
+
<p>
|
|
303
|
+
界面右上角可以在「中文」与「English」之间切换,默认中文,选择会记在这个浏览器里。她自己说的话、写的日记和留下的念头不翻译,那是她自己的内容。
|
|
304
|
+
</p>
|
|
305
|
+
<h2 id="step-1">1. 启动</h2>
|
|
306
|
+
<p>需要 Node.js 24.5 或更高版本。普通用户直接全局安装:</p>
|
|
307
|
+
<pre><code class="language-powershell">node --version
|
|
308
|
+
npm install -g luckytri
|
|
309
|
+
luckytri
|
|
310
|
+
</code></pre>
|
|
311
|
+
<p>
|
|
312
|
+
LuckyTri 在后台启动并打开
|
|
313
|
+
<a href="http://127.0.0.1:3210">http://127.0.0.1:3210</a
|
|
314
|
+
>,首次运行自动生成配置。无需下载仓库或构建 WebUI。终端里的 SQLite
|
|
315
|
+
实验性提示不表示启动失败,以能否打开 LuckyTri 为准。
|
|
316
|
+
</p>
|
|
317
|
+
<p>
|
|
318
|
+
运行 <code>luckytri paths</code> 查看本机
|
|
319
|
+
<code>.env</code>,在本机编辑器中取得
|
|
320
|
+
<code>ADMIN_TOKEN</code> 并填入管理台。<code
|
|
321
|
+
>luckytri --no-browser</code
|
|
322
|
+
>
|
|
323
|
+
只后台启动,<code>luckytri start</code> 前台运行,<code
|
|
324
|
+
>luckytri stop</code
|
|
325
|
+
>
|
|
326
|
+
停止服务。更新使用 <code>luckytri stop</code> →
|
|
327
|
+
<code>npm install -g luckytri@latest</code> →
|
|
328
|
+
<code>luckytri</code>,配置与数据会保留;默认目录见
|
|
329
|
+
<a
|
|
330
|
+
href="../../README.md#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E4%B8%8E%E9%9A%90%E7%A7%81"
|
|
331
|
+
>README</a
|
|
332
|
+
>。
|
|
333
|
+
</p>
|
|
334
|
+
<p>
|
|
335
|
+
从源码开发时,在仓库中执行 <code>npm install</code>、<code
|
|
336
|
+
>npm run setup</code
|
|
337
|
+
>、<code>npm run build</code>、<code>npm start</code>。下文的
|
|
338
|
+
<code>npm run setup/stop/backup/recovery/plugin</code>
|
|
339
|
+
面向源码用户;全局用户使用对应的
|
|
340
|
+
<code>luckytri setup/stop/backup/recovery/plugin</code>。
|
|
341
|
+
</p>
|
|
342
|
+
<p>
|
|
343
|
+
Windows 日常使用可以双击
|
|
344
|
+
<code>启动LuckyTri.cmd</code>。服务已在运行时,它只打开
|
|
345
|
+
LuckyTri。关闭浏览器不会停止服务;停止时双击
|
|
346
|
+
<code>停止LuckyTri.cmd</code>,或在项目目录执行
|
|
347
|
+
<code>npm run stop</code>。这条命令只停止当前项目,不会结束其他 Node
|
|
348
|
+
进程。前台运行时也可以在该终端按 <code>Ctrl+C</code>。
|
|
349
|
+
</p>
|
|
350
|
+
<p>LuckyTri 是「TA 的小世界」,左侧导航分三组、十个入口:</p>
|
|
351
|
+
<table>
|
|
352
|
+
<thead>
|
|
353
|
+
<tr>
|
|
354
|
+
<th>分组</th>
|
|
355
|
+
<th>入口</th>
|
|
356
|
+
<th>里面有什么</th>
|
|
357
|
+
</tr>
|
|
358
|
+
</thead>
|
|
359
|
+
<tbody>
|
|
360
|
+
<tr>
|
|
361
|
+
<td>TA</td>
|
|
362
|
+
<td>此刻</td>
|
|
363
|
+
<td>
|
|
364
|
+
TA
|
|
365
|
+
此刻的心情、正在做什么、最近说的话、放在心上和在等的事;今天的时间线、Token
|
|
366
|
+
用量和运行状态条
|
|
367
|
+
</td>
|
|
368
|
+
</tr>
|
|
369
|
+
<tr>
|
|
370
|
+
<td>TA</td>
|
|
371
|
+
<td>内心</td>
|
|
372
|
+
<td>心灵星图(TA 的自我线索)、放在心上的便签、心情彩带</td>
|
|
373
|
+
</tr>
|
|
374
|
+
<tr>
|
|
375
|
+
<td>TA</td>
|
|
376
|
+
<td>人际</td>
|
|
377
|
+
<td>人物星系、每个人的详情、TA 在各群的样子</td>
|
|
378
|
+
</tr>
|
|
379
|
+
<tr>
|
|
380
|
+
<td>TA</td>
|
|
381
|
+
<td>一生</td>
|
|
382
|
+
<td>日记本与那天的 TA、回顾、我的来路与章节、约定与期待、书架</td>
|
|
383
|
+
</tr>
|
|
384
|
+
<tr>
|
|
385
|
+
<td>日常</td>
|
|
386
|
+
<td>时间</td>
|
|
387
|
+
<td>
|
|
388
|
+
TA 实际生活的记录:今日的活动、待办、作品库、持续项目、体验记录
|
|
389
|
+
</td>
|
|
390
|
+
</tr>
|
|
391
|
+
<tr>
|
|
392
|
+
<td>日常</td>
|
|
393
|
+
<td>对话</td>
|
|
394
|
+
<td>
|
|
395
|
+
会话列表、实时聊天与「为什么这么说」、反馈、会话设置、模拟消息、回到那一刻(回放)
|
|
396
|
+
</td>
|
|
397
|
+
</tr>
|
|
398
|
+
<tr>
|
|
399
|
+
<td>日常</td>
|
|
400
|
+
<td>记忆</td>
|
|
401
|
+
<td>TA 记得的事、资料书架</td>
|
|
402
|
+
</tr>
|
|
403
|
+
<tr>
|
|
404
|
+
<td>设置</td>
|
|
405
|
+
<td>天性</td>
|
|
406
|
+
<td>
|
|
407
|
+
名字与性格(旁边的光团实时预览)、作息、TA 的日子、每日
|
|
408
|
+
Token、高级指令、试聊
|
|
409
|
+
</td>
|
|
410
|
+
</tr>
|
|
411
|
+
<tr>
|
|
412
|
+
<td>设置</td>
|
|
413
|
+
<td>系统</td>
|
|
414
|
+
<td>连接 QQ、模型库、运行开关</td>
|
|
415
|
+
</tr>
|
|
416
|
+
<tr>
|
|
417
|
+
<td>设置</td>
|
|
418
|
+
<td>插件</td>
|
|
419
|
+
<td>
|
|
420
|
+
启用、安装和卸下她接触世界的方式。见
|
|
421
|
+
<a href="plugins.md">插件</a>
|
|
422
|
+
</td>
|
|
423
|
+
</tr>
|
|
424
|
+
</tbody>
|
|
425
|
+
</table>
|
|
426
|
+
<p>
|
|
427
|
+
界面的颜色、天空和动效跟着 TA
|
|
428
|
+
的心情与作息变化:开心时暖、低落时灰蓝、睡着后变成夜晚。左下角可以把主题固定成某一种,也可以「减少动画」。右下角的小
|
|
429
|
+
TA
|
|
430
|
+
戳一下会回应一句,按住是摸摸头,双击或点「聊聊」打开试聊;这些只是界面动画,不会改变
|
|
431
|
+
TA 的心智。手机上导航在底部,其余入口在「更多」里。
|
|
432
|
+
</p>
|
|
433
|
+
<h2 id="step-2">2. 本机令牌</h2>
|
|
434
|
+
<p>首次启动已生成配置;也可以提前初始化:</p>
|
|
435
|
+
<pre><code class="language-powershell">luckytri setup
|
|
436
|
+
luckytri paths
|
|
437
|
+
</code></pre>
|
|
438
|
+
<p>
|
|
439
|
+
没有 <code>.env</code> 时,setup 会写入管理令牌和 OneBot
|
|
440
|
+
连接令牌。已有 <code>.env</code> 会原样保留。
|
|
441
|
+
</p>
|
|
442
|
+
<pre><code class="language-dotenv">HOST=127.0.0.1
|
|
443
|
+
PORT=3210
|
|
444
|
+
ADMIN_TOKEN=
|
|
445
|
+
ONEBOT_TOKEN=
|
|
446
|
+
LLM_API_KEY=
|
|
447
|
+
</code></pre>
|
|
448
|
+
<table>
|
|
449
|
+
<thead>
|
|
450
|
+
<tr>
|
|
451
|
+
<th>字段</th>
|
|
452
|
+
<th>用途</th>
|
|
453
|
+
</tr>
|
|
454
|
+
</thead>
|
|
455
|
+
<tbody>
|
|
456
|
+
<tr>
|
|
457
|
+
<td><code>ADMIN_TOKEN</code></td>
|
|
458
|
+
<td>打开 LuckyTri 和调用 HTTP API;停止命令也会使用</td>
|
|
459
|
+
</tr>
|
|
460
|
+
<tr>
|
|
461
|
+
<td><code>ONEBOT_TOKEN</code></td>
|
|
462
|
+
<td>
|
|
463
|
+
OneBot 11 接入端连接 <code>/onebot/v11/ws</code>(只用 OneBot
|
|
464
|
+
方式时需要)
|
|
465
|
+
</td>
|
|
466
|
+
</tr>
|
|
467
|
+
<tr>
|
|
468
|
+
<td><code>LLM_API_KEY</code></td>
|
|
469
|
+
<td>可选;非空时优先于 LuckyTri 里保存的模型密钥</td>
|
|
470
|
+
</tr>
|
|
471
|
+
<tr>
|
|
472
|
+
<td><code>LUCKYTRI_CHANNEL</code></td>
|
|
473
|
+
<td>
|
|
474
|
+
可选;<code>onebot</code> 或
|
|
475
|
+
<code>qqbot</code>。设置后在界面里不能更改连接方式
|
|
476
|
+
</td>
|
|
477
|
+
</tr>
|
|
478
|
+
<tr>
|
|
479
|
+
<td><code>QQBOT_APP_ID</code> / <code>QQBOT_APP_SECRET</code></td>
|
|
480
|
+
<td>可选;QQ 官方机器人的凭据,优先于界面里保存的</td>
|
|
481
|
+
</tr>
|
|
482
|
+
<tr>
|
|
483
|
+
<td><code>HOST</code> / <code>PORT</code></td>
|
|
484
|
+
<td>监听地址和端口;本机使用保持默认</td>
|
|
485
|
+
</tr>
|
|
486
|
+
</tbody>
|
|
487
|
+
</table>
|
|
488
|
+
<p>
|
|
489
|
+
页面第一次取数据时会弹出窗口要求输入
|
|
490
|
+
<code>ADMIN_TOKEN</code>。令牌只留在当前标签页。修改
|
|
491
|
+
<code>.env</code> 后必须重启。不要把 <code>ADMIN_TOKEN</code> 填给 QQ
|
|
492
|
+
接入端,也不要把 <code>ONEBOT_TOKEN</code> 当成管理台密码。
|
|
493
|
+
</p>
|
|
494
|
+
<h2 id="step-3">3. 先在模拟模式试聊</h2>
|
|
495
|
+
<p>默认开启模拟模式,消息不会发到 QQ。</p>
|
|
496
|
+
<ol>
|
|
497
|
+
<li>
|
|
498
|
+
打开「对话」,点会话列表上方的「+ 添加会话」,填写测试群号和名称。
|
|
499
|
+
</li>
|
|
500
|
+
<li>
|
|
501
|
+
在中间的聊天里点「模拟消息」,以一位群友的身份输入一句普通消息并发送。
|
|
502
|
+
</li>
|
|
503
|
+
<li>
|
|
504
|
+
点 TA 回复下面的「为什么这么说」查看理由;「TA 扫了一眼」「TA
|
|
505
|
+
看了,没出声」会显示成聊天里的分隔条。
|
|
506
|
+
</li>
|
|
507
|
+
</ol>
|
|
508
|
+
<p>
|
|
509
|
+
没有模型密钥时,模拟回复使用本地样例,不调用模型。有密钥后,同一条路径会走真实发言流程,但仍然不发
|
|
510
|
+
QQ。模拟消息写进模拟会话,不会改变 TA 的心情、关系和记忆。
|
|
511
|
+
</p>
|
|
512
|
+
<p>
|
|
513
|
+
「模拟消息」只在模拟模式下可用。右下角小 TA
|
|
514
|
+
的「聊聊」和「天性」右侧的试聊是另一回事:走真实链路,读取 TA
|
|
515
|
+
此刻的心智,天性页还可以带上没保存的草稿,但什么都不写入,也不发 QQ。
|
|
516
|
+
</p>
|
|
517
|
+
<h2 id="step-4">4. 连接模型</h2>
|
|
518
|
+
<p>打开「系统 → 模型库」,点「+ 新增模型」选择一个预设。</p>
|
|
519
|
+
<ul>
|
|
520
|
+
<li>
|
|
521
|
+
API 地址填写服务商的兼容接口根路径。程序会自己拼接
|
|
522
|
+
<code>/chat/completions</code>,不要把完整路径再写一遍。
|
|
523
|
+
</li>
|
|
524
|
+
<li>模型名称填写服务商接受的模型 ID。</li>
|
|
525
|
+
<li>API Key 留空表示保留已保存的密钥。</li>
|
|
526
|
+
</ul>
|
|
527
|
+
<p>
|
|
528
|
+
预设只填入常见地址和模型名,以服务商控制台里的实际模型为准。发言决策和回复生成需要模型返回
|
|
529
|
+
JSON 对象。
|
|
530
|
+
</p>
|
|
531
|
+
<p>
|
|
532
|
+
保存后点「测试此模型连接」。测试不携带群聊原文。更换地址、模型或密钥后需要重新测试。
|
|
533
|
+
</p>
|
|
534
|
+
<p>
|
|
535
|
+
也可以先保持模拟模式,在「天性」里和 TA 试聊,确认 TA 说话的样子后再让
|
|
536
|
+
TA 参加真实 QQ。
|
|
537
|
+
</p>
|
|
538
|
+
<h3>图片读取</h3>
|
|
539
|
+
<p>
|
|
540
|
+
在模型档案里开启「图片理解」,并使用服务商支持视觉的模型。图片从 QQ
|
|
541
|
+
地址、本地缓存或图片缓存接口读取,默认接受不超过 32 MiB、8000
|
|
542
|
+
万像素的源图,不再把超过 4 MiB
|
|
543
|
+
的普通照片和截图直接拒绝。小图经过解码验证后保持原样;大截图先尝试无损压缩,必要时再压缩编码或按比例缩小,照片按方向信息转正,不裁切画面。提交模型的每张图片默认不超过
|
|
544
|
+
4 MiB,最长边不超过 8192 像素,像素总量不超过 1600
|
|
545
|
+
万;原图不被修改,重复图片仍按原内容识别。
|
|
546
|
+
</p>
|
|
547
|
+
<p>
|
|
548
|
+
下载默认最多等待 30
|
|
549
|
+
秒,读取过程中断或图片损坏只影响该图片,不会阻止同一批其他正常图片。AVIF
|
|
550
|
+
会转换成通用格式;动态图本轮读取第一帧,不能据此判断完整动画。QQ
|
|
551
|
+
缓存接口返回大 Base64 图片不会再受到普通消息 1 MiB
|
|
552
|
+
限制,但普通消息仍保持原有上限。
|
|
553
|
+
</p>
|
|
554
|
+
<p>
|
|
555
|
+
需要调整时,可在 <code>.env</code> 设置
|
|
556
|
+
<code>VISION_SOURCE_MAX_MB</code>(4–64,默认
|
|
557
|
+
32)、<code>VISION_MODEL_MAX_MB</code>(1–4,默认 4)和
|
|
558
|
+
<code>VISION_DOWNLOAD_TIMEOUT_SECONDS</code>(5–120,默认
|
|
559
|
+
30),重启生效。图片能否理解还取决于所选模型的视觉能力和服务商接口是否可用。
|
|
560
|
+
</p>
|
|
561
|
+
<h2 id="step-5">5. 连接 QQ</h2>
|
|
562
|
+
<p>
|
|
563
|
+
打开「系统 → 连接 QQ」,顶部有两个选项:<strong>OneBot 11</strong> 与
|
|
564
|
+
<strong>QQ 官方机器人</strong
|
|
565
|
+
>,同一时间只使用一个。切换后会断开当前连接;原来方式下的会话仍可查看,但不能再向它们发送消息。两种方式的差别见
|
|
566
|
+
<code>docs/zh/connect.md</code>,下面是操作步骤。
|
|
567
|
+
</p>
|
|
568
|
+
<h3>方式一:OneBot 11</h3>
|
|
569
|
+
<p>
|
|
570
|
+
LuckyTri 只实现 OneBot 11 的反向 WebSocket
|
|
571
|
+
接口,接入端需要你自行准备和管理。
|
|
572
|
+
</p>
|
|
573
|
+
<ol>
|
|
574
|
+
<li>
|
|
575
|
+
在本机 <code>.env</code> 中设置
|
|
576
|
+
<code>ONEBOT_TOKEN</code>,修改后重启 LuckyTri。
|
|
577
|
+
</li>
|
|
578
|
+
<li>
|
|
579
|
+
在接入端自己的网络设置里添加 OneBot 11 反向 WebSocket 客户端:
|
|
580
|
+
</li>
|
|
581
|
+
</ol>
|
|
582
|
+
<table>
|
|
583
|
+
<thead>
|
|
584
|
+
<tr>
|
|
585
|
+
<th>项目</th>
|
|
586
|
+
<th>本机填写</th>
|
|
587
|
+
</tr>
|
|
588
|
+
</thead>
|
|
589
|
+
<tbody>
|
|
590
|
+
<tr>
|
|
591
|
+
<td>协议</td>
|
|
592
|
+
<td>OneBot 11</td>
|
|
593
|
+
</tr>
|
|
594
|
+
<tr>
|
|
595
|
+
<td>WebSocket URL</td>
|
|
596
|
+
<td><code>ws://127.0.0.1:3210/onebot/v11/ws</code></td>
|
|
597
|
+
</tr>
|
|
598
|
+
<tr>
|
|
599
|
+
<td>Token</td>
|
|
600
|
+
<td><code>.env</code> 里的 <code>ONEBOT_TOKEN</code></td>
|
|
601
|
+
</tr>
|
|
602
|
+
<tr>
|
|
603
|
+
<td>消息格式</td>
|
|
604
|
+
<td>数组</td>
|
|
605
|
+
</tr>
|
|
606
|
+
<tr>
|
|
607
|
+
<td>启用</td>
|
|
608
|
+
<td>开启并保存</td>
|
|
609
|
+
</tr>
|
|
610
|
+
</tbody>
|
|
611
|
+
</table>
|
|
612
|
+
<ol start="3">
|
|
613
|
+
<li>
|
|
614
|
+
在接入端完成 QQ 登录。小号需要已加入目标群;LuckyTri 不保存 QQ
|
|
615
|
+
密码。
|
|
616
|
+
</li>
|
|
617
|
+
</ol>
|
|
618
|
+
<p>
|
|
619
|
+
这里的 <code>3210</code> 是 LuckyTri 的端口。接入端和 LuckyTri
|
|
620
|
+
不在同一台机器或放在容器里时,<code>127.0.0.1</code>
|
|
621
|
+
指向各自环境,需要改成 LuckyTri 的实际地址,并先配置
|
|
622
|
+
<code>ADMIN_TOKEN</code>。
|
|
623
|
+
</p>
|
|
624
|
+
<h3>方式二:QQ 官方机器人</h3>
|
|
625
|
+
<p>
|
|
626
|
+
不需要登录 QQ 账号,也不需要额外的接入端,LuckyTri 自己连接 QQ
|
|
627
|
+
开放平台。
|
|
628
|
+
</p>
|
|
629
|
+
<ol>
|
|
630
|
+
<li>
|
|
631
|
+
在 QQ 开放平台创建机器人,记下 <strong>AppID</strong> 与
|
|
632
|
+
<strong>AppSecret</strong
|
|
633
|
+
>,并按平台要求开通群聊与单聊消息、把机器人加入要测试的群或添加为联系人。平台的入口和审核规则会调整,以开放平台当前说明为准。
|
|
634
|
+
</li>
|
|
635
|
+
<li>
|
|
636
|
+
在「系统 → 连接 QQ」选择「QQ 官方机器人」,填写 AppID 和
|
|
637
|
+
AppSecret,点击保存。也可以在 <code>.env</code> 里设置
|
|
638
|
+
<code>QQBOT_APP_ID</code> 与
|
|
639
|
+
<code>QQBOT_APP_SECRET</code>。AppSecret 保存后不会再显示。
|
|
640
|
+
</li>
|
|
641
|
+
<li>
|
|
642
|
+
状态显示「已连接」后,到群里 @
|
|
643
|
+
她或私聊一句。想让她看到群里的全部消息,需要在开放平台开启「接收所有消息」;没有开启时她只能收到
|
|
644
|
+
@ 她的消息,连接页会提示这一点。
|
|
645
|
+
</li>
|
|
646
|
+
<li>
|
|
647
|
+
官方接口不提供群名,新会话会以编号显示,可以在「对话」里给会话改名。
|
|
648
|
+
</li>
|
|
649
|
+
</ol>
|
|
650
|
+
<p>
|
|
651
|
+
两种方式都是:已连接只表示传输通了。到目标群发一条消息后,会话会出现在「对话」的会话列表里,新发现的会话默认暂停参与。
|
|
652
|
+
</p>
|
|
653
|
+
<h2 id="step-6">6. 让 TA 参与会话</h2>
|
|
654
|
+
<ol>
|
|
655
|
+
<li>
|
|
656
|
+
在「系统 →
|
|
657
|
+
运行开关」确认允许参与聊天,关闭模拟模式并保存。「此刻」的状态条也能看到这两项。
|
|
658
|
+
</li>
|
|
659
|
+
<li>
|
|
660
|
+
在「对话」选中目标群,在右侧「这个会话」里点「开启参与」,或直接拨动列表里的开关。
|
|
661
|
+
</li>
|
|
662
|
+
<li>在 QQ 里 @ 她,或直接叫 TA 的名字。</li>
|
|
663
|
+
<li>回到「对话」查看消息和「为什么这么说」。</li>
|
|
664
|
+
</ol>
|
|
665
|
+
<p>
|
|
666
|
+
开不开口由 TA 自己决定,没有参与概率和冷却。被点名、私聊、引用 TA
|
|
667
|
+
或出现危机信号时,TA
|
|
668
|
+
一定会细看,然后选择回答、简短反应、说不想聊或不出声;理由显示在「对话」和「此刻
|
|
669
|
+
→ 今天的 TA」。普通群消息只在 TA 在意时细看——刚聊过、有人问大家、聊到
|
|
670
|
+
TA
|
|
671
|
+
的兴趣、熟人在说话、攒了不少消息——其余只扫一眼,不调用模型,下次细看时一起读。觉得
|
|
672
|
+
TA 太安静,可以在「天性」里提高「主动」。
|
|
673
|
+
</p>
|
|
674
|
+
<p>
|
|
675
|
+
TA 默认 02:00 睡、08:00 醒,在「天性 →
|
|
676
|
+
作息」里拖动月亮和太阳修改,或者关闭。睡着时被叫到,会等醒来再看;这时整个界面会变成夜晚。每分钟发言轮数限制仍然保留,用来避免短时间连续发言。
|
|
677
|
+
</p>
|
|
678
|
+
<p>
|
|
679
|
+
在模型里打开「图片理解」后,私聊、@
|
|
680
|
+
或引用里的图片会先由本机读取,再交给模型看画面。主模型不能看图时,在「对话
|
|
681
|
+
→ 这个会话 →
|
|
682
|
+
会话设置」里另选一个打开了图片理解的视觉兼容模型。没有打开图片理解的模型不会收到画面。
|
|
683
|
+
</p>
|
|
684
|
+
<h2 id="step-7">7. TA、记忆和知识</h2>
|
|
685
|
+
<p>
|
|
686
|
+
「天性」是唯一由你编写的部分:名字、性格、兴趣、边界、底线和作息,每次保存为新的一版。拖动性格刻度时,旁边的光团会跟着变:温柔让颜色变暖、嘴角上扬,活泼让它跳得更快。
|
|
687
|
+
</p>
|
|
688
|
+
<p>
|
|
689
|
+
其余的都从经历里长出来:TA 的自我是「内心」星图里的一颗颗星,TA
|
|
690
|
+
对每个人的感觉在「人际」,TA
|
|
691
|
+
在各群的样子在「人际」下方的群像里。点开可以看到每次变化的来源,觉得不对可以撤销;撤销过的内容之后不会被写回来。很久没被触及的线索会慢慢淡出,退到星图的「远方」;它们没有被删除,被聊到时会重新想起。TA
|
|
692
|
+
独处、写日记、夜里整理、回顾和改写自传的记录,以及 TA
|
|
693
|
+
在等的事(别人说的安排、TA 答应的事,可以撤销),都在「一生」。每日
|
|
694
|
+
Token 上限、后台份额、夜里整理和回顾间隔在「天性 → TA 的日子」里设置。
|
|
695
|
+
</p>
|
|
696
|
+
<p>「记忆」里先选择会话,也可以按人筛选。</p>
|
|
697
|
+
<ul>
|
|
698
|
+
<li>
|
|
699
|
+
TA
|
|
700
|
+
对所有会话只有一份记忆:别处知道的事只在相关时想起;私聊里知道的标为「私下知道」,不当众说;被要求保密的只在原来的会话里。可以在每条记忆上调整分寸、锁定或撤销。关于某个人的记忆也会出现在「人际」的人物详情里。
|
|
701
|
+
</li>
|
|
702
|
+
<li>
|
|
703
|
+
群友说「记住,我……」会直接成为 TA
|
|
704
|
+
记得的事(密码、验证码之类不会记)。
|
|
705
|
+
</li>
|
|
706
|
+
<li>
|
|
707
|
+
资料放进「资料书架」的集合后按当前会话的可见范围检索。群聊不会装入其他私聊集合。
|
|
708
|
+
</li>
|
|
709
|
+
<li>清空「对话」里的上下文不会删除长期记忆。</li>
|
|
710
|
+
</ul>
|
|
711
|
+
<h2 id="step-8">8. 备份与停止</h2>
|
|
712
|
+
<pre><code class="language-powershell">npm run backup
|
|
713
|
+
npm run stop
|
|
714
|
+
npm start
|
|
715
|
+
</code></pre>
|
|
716
|
+
<p>
|
|
717
|
+
备份写到
|
|
718
|
+
<code>data/backups/</code
|
|
719
|
+
>。数据库里有聊天、记忆和保存在库中的密钥,按私密文件保管。<code
|
|
720
|
+
>.env</code
|
|
721
|
+
>
|
|
722
|
+
不在这份备份里。
|
|
723
|
+
</p>
|
|
724
|
+
<p>
|
|
725
|
+
TA 的一切都存在这一个数据库里,所以服务运行时会自动备份:默认每 24
|
|
726
|
+
小时在另一个进程里做一份 <code>luckytri-auto-*.db</code>,只保留最近 7
|
|
727
|
+
份,做完会检查完整性。自动备份里有聊天、记忆、自我、日记和关系,但不带一天以前的模型调用记录(每条动辄几百
|
|
728
|
+
KB,会让备份大上十几倍),所以「为什么这么说」只能回看最近一天的。<code
|
|
729
|
+
>npm run backup</code
|
|
730
|
+
>
|
|
731
|
+
仍然是完整备份。可以在 <code>.env</code> 里调整:
|
|
732
|
+
</p>
|
|
733
|
+
<table>
|
|
734
|
+
<thead>
|
|
735
|
+
<tr>
|
|
736
|
+
<th>变量</th>
|
|
737
|
+
<th>含义</th>
|
|
738
|
+
<th>默认</th>
|
|
739
|
+
</tr>
|
|
740
|
+
</thead>
|
|
741
|
+
<tbody>
|
|
742
|
+
<tr>
|
|
743
|
+
<td><code>BACKUP_INTERVAL_HOURS</code></td>
|
|
744
|
+
<td>自动备份间隔,<code>0</code> 关闭</td>
|
|
745
|
+
<td><code>24</code></td>
|
|
746
|
+
</tr>
|
|
747
|
+
<tr>
|
|
748
|
+
<td><code>BACKUP_KEEP</code></td>
|
|
749
|
+
<td>保留几份自动备份</td>
|
|
750
|
+
<td><code>7</code></td>
|
|
751
|
+
</tr>
|
|
752
|
+
<tr>
|
|
753
|
+
<td><code>BACKUP_TRACE_DAYS</code></td>
|
|
754
|
+
<td>备份里保留最近几天的调用记录</td>
|
|
755
|
+
<td><code>1</code></td>
|
|
756
|
+
</tr>
|
|
757
|
+
<tr>
|
|
758
|
+
<td><code>BACKUP_DIR</code></td>
|
|
759
|
+
<td>备份目录</td>
|
|
760
|
+
<td><code>data/backups</code></td>
|
|
761
|
+
</tr>
|
|
762
|
+
</tbody>
|
|
763
|
+
</table>
|
|
764
|
+
<p>
|
|
765
|
+
想立刻做一份自动备份:<code
|
|
766
|
+
>node scripts/backup.js --auto --force</code
|
|
767
|
+
>。自动备份失败会记在启动窗口或
|
|
768
|
+
<code>data/launcher.log</code
|
|
769
|
+
>,并隔越来越久才重试。备份和数据库放在同一块磁盘上,防不了磁盘损坏;重要的备份请自己复制到别处。
|
|
770
|
+
</p>
|
|
771
|
+
<p>
|
|
772
|
+
设置 <code>DB_PATH</code> 使用另一份数据库时,若未指定
|
|
773
|
+
<code>BACKUP_DIR</code>,备份默认写到该数据库旁的
|
|
774
|
+
<code>backups</code> 目录,避免多个实例的副本混在一起。
|
|
775
|
+
</p>
|
|
776
|
+
<p>
|
|
777
|
+
在「系统 →
|
|
778
|
+
数据与备份」可以查看每份历史数据库副本的大小,设置每天的整理时间、完整备份保留天数和最多份数,也可以逐份勾选后手动清理。默认每天服务器本地时间
|
|
779
|
+
04:30 检查,完整备份超过 14 天或多于 2 份就会列入整理;数量可设为
|
|
780
|
+
0,表示定时不保留完整备份。完整备份和迁移快照没有固定硬锁,可以手动选择全部清理。自动备份继续按上面的独立规则轮换,只轮换本实例有身份的副本,最新两份作为恢复点保留;无法确认身份的旧副本、迁移、旧版本和升级前快照仅手动清理。
|
|
781
|
+
</p>
|
|
782
|
+
<p>
|
|
783
|
+
执行前必须留下本实例近 72
|
|
784
|
+
小时内校验通过的自动备份,最新一份损坏时会尝试另一份。新备份清单带有数据库身份,防止另一实例的副本冒充当前实例的恢复保障;旧清单仍可验证和恢复,但需要更新自动备份后才能作为清理保障。备份和清理共用目录锁,运行库、同一文件的硬链接与正在使用的副本不能清理。清理失败时会列出失败文件,并准确统计已释放空间。要长期保留的历史恢复点,请先连同
|
|
785
|
+
<code>.db.json</code> 清单复制到另一块磁盘。
|
|
786
|
+
</p>
|
|
787
|
+
<p>
|
|
788
|
+
恢复时先停止服务,把当前 <code>data/friend.db</code> 及同名
|
|
789
|
+
<code>-wal</code>、<code>-shm</code> 移开,再把选中的备份复制为
|
|
790
|
+
<code>data/friend.db</code>。设置了
|
|
791
|
+
<code>DB_PATH</code> 时操作该路径。不要把旧的 WAL
|
|
792
|
+
文件和恢复后的数据库放在一起。更稳妥的做法是用
|
|
793
|
+
<code>npm run recovery</code> 校验并恢复到一个全新的文件,见
|
|
794
|
+
<code>docs/zh/recovery.md</code>。
|
|
795
|
+
</p>
|
|
796
|
+
<h2 id="step-9">9. 常见问题</h2>
|
|
797
|
+
<table>
|
|
798
|
+
<thead>
|
|
799
|
+
<tr>
|
|
800
|
+
<th>现象</th>
|
|
801
|
+
<th>先检查</th>
|
|
802
|
+
</tr>
|
|
803
|
+
</thead>
|
|
804
|
+
<tbody>
|
|
805
|
+
<tr>
|
|
806
|
+
<td>页面打不开</td>
|
|
807
|
+
<td>Node 是否在运行,地址是否为 <code>127.0.0.1:3210</code></td>
|
|
808
|
+
</tr>
|
|
809
|
+
<tr>
|
|
810
|
+
<td>端口已被占用</td>
|
|
811
|
+
<td>先 <code>npm run stop</code>,不要结束所有 node 进程</td>
|
|
812
|
+
</tr>
|
|
813
|
+
<tr>
|
|
814
|
+
<td>令牌错误</td>
|
|
815
|
+
<td>
|
|
816
|
+
使用 <code>ADMIN_TOKEN</code>;改 <code>.env</code> 后重启
|
|
817
|
+
</td>
|
|
818
|
+
</tr>
|
|
819
|
+
<tr>
|
|
820
|
+
<td>OneBot 未连接</td>
|
|
821
|
+
<td>
|
|
822
|
+
接入端是否登录,URL、端口、路径和
|
|
823
|
+
<code>ONEBOT_TOKEN</code> 是否一致
|
|
824
|
+
</td>
|
|
825
|
+
</tr>
|
|
826
|
+
<tr>
|
|
827
|
+
<td>官方机器人未连接</td>
|
|
828
|
+
<td>
|
|
829
|
+
AppID 与 AppSecret
|
|
830
|
+
是否正确,机器人是否已开通群聊与单聊消息,网络能否访问 QQ
|
|
831
|
+
开放平台
|
|
832
|
+
</td>
|
|
833
|
+
</tr>
|
|
834
|
+
<tr>
|
|
835
|
+
<td>官方机器人只收到 @ 的消息</td>
|
|
836
|
+
<td>
|
|
837
|
+
在开放平台开启「接收所有消息」;这是平台权限,不是 LuckyTri
|
|
838
|
+
的限制
|
|
839
|
+
</td>
|
|
840
|
+
</tr>
|
|
841
|
+
<tr>
|
|
842
|
+
<td>连接成功但没有会话</td>
|
|
843
|
+
<td>在 QQ 再发一条新消息;OneBot 方式下检查消息格式是否为数组</td>
|
|
844
|
+
</tr>
|
|
845
|
+
<tr>
|
|
846
|
+
<td>群里不回复</td>
|
|
847
|
+
<td>
|
|
848
|
+
全局开关、会话开关、模拟模式、密钥;「对话」里是「TA
|
|
849
|
+
扫了一眼」还是 TA 细看后选择了不出声
|
|
850
|
+
</td>
|
|
851
|
+
</tr>
|
|
852
|
+
<tr>
|
|
853
|
+
<td>@ 了也不回</td>
|
|
854
|
+
<td>
|
|
855
|
+
TA 是否睡着了(「此刻」,界面是夜晚)、每分钟限速、今日 Token
|
|
856
|
+
是否用完、模型错误,或 TA 自己的理由
|
|
857
|
+
</td>
|
|
858
|
+
</tr>
|
|
859
|
+
<tr>
|
|
860
|
+
<td>模型 401 / 403</td>
|
|
861
|
+
<td>密钥和权限;环境变量密钥可能覆盖 LuckyTri 里保存的密钥</td>
|
|
862
|
+
</tr>
|
|
863
|
+
<tr>
|
|
864
|
+
<td>模型 404</td>
|
|
865
|
+
<td>
|
|
866
|
+
API 地址不要重复拼接 <code>/chat/completions</code>,核对模型 ID
|
|
867
|
+
</td>
|
|
868
|
+
</tr>
|
|
869
|
+
<tr>
|
|
870
|
+
<td>模型不返回 JSON</td>
|
|
871
|
+
<td>换支持 JSON 对象输出的模型,先做连接测试</td>
|
|
872
|
+
</tr>
|
|
873
|
+
<tr>
|
|
874
|
+
<td>记忆没有出现</td>
|
|
875
|
+
<td>
|
|
876
|
+
是否是明确的「记住,我……」,是否被撤销,分寸是否为「要 TA
|
|
877
|
+
保密」而当前不在原来的会话
|
|
878
|
+
</td>
|
|
879
|
+
</tr>
|
|
880
|
+
<tr>
|
|
881
|
+
<td>界面动得太多</td>
|
|
882
|
+
<td>
|
|
883
|
+
左下角「减少动画」;系统开启了减少动态效果时会自动关闭粒子和形变
|
|
884
|
+
</td>
|
|
885
|
+
</tr>
|
|
886
|
+
</tbody>
|
|
887
|
+
</table>
|
|
888
|
+
<p>不要把 API 密钥、<code>.env</code> 或私聊原文发到公开位置。</p>
|
|
889
|
+
</article>
|
|
890
|
+
</div>
|
|
891
|
+
<footer>LuckyTri · 让经历和选择彼此连贯。教程与 v1.0.0 界面同步。</footer>
|
|
892
|
+
</body>
|
|
893
|
+
</html>
|