You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: packages/docs-site/guide/channels.md
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -128,10 +128,16 @@ Talk to your XiaoAi smart speaker as a sbot channel.
128
128
| 登录方式 |`passToken` (recommended, obtained via **sbox**), or Mi account password |
129
129
| 密码 / passToken | The credential matching the selected login mode |
130
130
| 登录设备 ID | Optional PassportSDK `deviceId`, obtained via **sbox**|
131
-
| 音箱名称 | Target speaker name (matches a device in your Mi account) |
131
+
| 音箱名称 | Target speaker name (matches a device in your Mi account). One per line to bind several speakers to this channel|
132
132
133
133
2. The bot logs in to Mi Cloud, listens for voice messages on the device, and replies via TTS through the speaker
134
134
135
+
A single channel can drive multiple speakers — list them all in 音箱名称 rather than creating one channel per speaker. The speakers share one Mi Cloud login, and each gets its own session, so a reply always goes back to the speaker that was spoken to. Creating several channels for the *same* Mi account does not work: each login invalidates the previous `serviceToken`, so all but the last channel fail with HTTP 401.
136
+
137
+
::: warning
138
+
Every speaker is polled independently, so N speakers means N × (1000 / 轮询间隔) requests per second against Mi Cloud. Raise 轮询间隔 when binding more than a few.
139
+
:::
140
+
135
141
::: tip Getting `passToken` and `deviceId` with sbox
136
142
Mi accounts often reject server-side password login (risk control / 2FA), so the recommended path is to log in once with **sbox** — a desktop helper toolbox — and copy the credentials it extracts:
Copy file name to clipboardExpand all lines: packages/docs-site/guide/memory.md
+9-7Lines changed: 9 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,20 +2,21 @@
2
2
3
3
Sidebar → **Memory Profiles** (under **Tasks**), then enable it per-agent in the agent edit page → **Memory**.
4
4
5
-
Memory is the agent's automatic long-term memory. A background **MemoryLLM** reviews each conversation after it goes idle and distills durable knowledge — user preferences, project facts, decisions, lessons learned — into memory entries. On later turns the agent reads them back via the `search_memory` and `read_memory` tools.
5
+
Memory is the agent's automatic long-term memory. After each conversation, a background Selector reviews the full memory catalog for relevant entries, then the **MemoryLLM** reads those entries' complete bodies and applies final changes. On later turns the agent reads memories back via the `search_memory` and `read_memory` tools.
6
6
7
7
Think of it as the agent learning from every conversation without you having to teach it explicitly — and without bloating the system prompt.
8
8
9
9
## How It Works
10
10
11
-
1.**Extract** — after a conversation idles, the **writer model** silently reviews the exchange and writes new memories (or updates/removes existing ones).
12
-
2.**Read** — on subsequent turns the agent calls:
13
-
-`search_memory` — fuzzy/keyword/semantic lookup across stored memories
11
+
1.**Select** — after a conversation idles, the **selector model** matches the transcript against self-contained titles from every global + current-workspace entry. It uses one request while the title catalog fits its budget; for oversized catalogs it compresses the transcript once and matches titles in batches. The Selector never reads bodies. If no selector is configured, the writer model performs this step.
12
+
2.**Extract** — the **writer model** reads the selected entries' complete bodies together with the conversation, then creates, updates, removes, or leaves memories unchanged.
13
+
3.**Read** — on subsequent turns the agent calls:
14
+
-`search_memory` — BM25 keyword lookup across stored memories
14
15
-`read_memory` — fetch the full body of a memory by its slug
15
-
3.**Maintain** — background jobs keep the store healthy:
16
+
4.**Maintain** — background jobs keep the store healthy:
16
17
-**Consolidate** — merges and de-duplicates related memories
17
18
-**Reconcile** — re-indexes and prunes stale entries
18
-
4.**Delete** — removed memories are moved to `.archive/` and can be recovered.
19
+
5.**Delete** — removed memories are moved to `.archive/` and can be recovered.
19
20
20
21
## Global and Workspace Memory
21
22
@@ -34,7 +35,8 @@ A **Memory Profile** defines how memories are extracted and read. Sidebar → **
34
35
|-------|-------------|
35
36
| Name | Display name for this profile |
36
37
| Enabled | Pause the profile without deleting it |
37
-
| Writer Model | The MemoryLLM used to extract memories (a reasoning-capable model recommended) |
38
+
| Writer Model | The authoritative MemoryLLM that reads selected full bodies and applies final changes |
39
+
| Selector Model | Optional cheaper model that screens the complete catalog; defaults to Writer Model |
0 commit comments