smart_brain 0.1.2 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/MEMPAL_GUIDE.md +1074 -0
- data/README.en.md +173 -173
- data/README.md +467 -173
- data/config/brain.yml +69 -1
- data/conversation_demo.rb +438 -438
- data/db/migrate/002_turn_events_payload.sql +9 -0
- data/db/migrate/003_tiers_and_lifecycle.sql +28 -0
- data/db/migrate/004_kg_edges.sql +30 -0
- data/db/migrate/005_domains_and_memory_scopes.sql +163 -0
- data/docs/coding_todo.md +139 -0
- data/docs/context_package.md +220 -0
- data/docs/evidence_pack.md +190 -0
- data/docs/gap_vs_mempal.md +161 -0
- data/docs/mcp.md +93 -0
- data/docs/memory_types.md +278 -0
- data/docs/multi_scope_memory_refactor_plan.md +483 -0
- data/docs/multi_scope_migration.md +65 -0
- data/docs/policies.md +308 -0
- data/docs/retrieval_plan.md +231 -0
- data/docs/smartbrain_design.md +299 -0
- data/docs/user_guide.md +546 -0
- data/example.rb +91 -91
- data/examples/01_memory_basic.rb +57 -0
- data/examples/02_governance.rb +63 -0
- data/examples/03_postgres_persistence.rb +63 -0
- data/examples/04_ollama_llm.rb +69 -0
- data/examples/05_smart_rag_integration.rb +79 -0
- data/examples/06_multi_scope_memory.rb +50 -0
- data/examples/README.md +49 -0
- data/exe/smart_brain +168 -0
- data/lib/smart_brain/adapters/smart_rag/direct_client.rb +16 -5
- data/lib/smart_brain/adapters/smart_rag/http_client.rb +16 -5
- data/lib/smart_brain/adapters/smart_rag/null_client.rb +7 -2
- data/lib/smart_brain/adapters/smart_rag/scope_filter.rb +60 -0
- data/lib/smart_brain/configuration.rb +57 -0
- data/lib/smart_brain/consolidator/working_summary.rb +80 -12
- data/lib/smart_brain/context_composer/composer.rb +40 -3
- data/lib/smart_brain/contracts/retrieval_plan.rb +10 -0
- data/lib/smart_brain/contracts/scope_context.rb +46 -0
- data/lib/smart_brain/contracts/scope_ref.rb +25 -0
- data/lib/smart_brain/db.rb +109 -0
- data/lib/smart_brain/event_store/in_memory.rb +6 -2
- data/lib/smart_brain/event_store/postgres.rb +199 -0
- data/lib/smart_brain/fusion/merger.rb +31 -2
- data/lib/smart_brain/governance/briefing.rb +146 -0
- data/lib/smart_brain/governance/fact_check.rb +110 -0
- data/lib/smart_brain/governance/knowledge_graph.rb +60 -0
- data/lib/smart_brain/governance/lifecycle.rb +225 -0
- data/lib/smart_brain/governance/tiers.rb +60 -0
- data/lib/smart_brain/memory_extractor/extractor.rb +25 -7
- data/lib/smart_brain/memory_store/in_memory.rb +202 -17
- data/lib/smart_brain/memory_store/postgres.rb +500 -0
- data/lib/smart_brain/model_provider/base.rb +87 -0
- data/lib/smart_brain/model_provider/factory.rb +49 -0
- data/lib/smart_brain/model_provider/ollama.rb +60 -0
- data/lib/smart_brain/model_provider/openai.rb +60 -0
- data/lib/smart_brain/model_provider/stub.rb +26 -0
- data/lib/smart_brain/model_provider.rb +7 -0
- data/lib/smart_brain/observability/tracker.rb +39 -1
- data/lib/smart_brain/retrievers/exact_retriever.rb +6 -0
- data/lib/smart_brain/retrievers/memory_retriever.rb +59 -5
- data/lib/smart_brain/runtime.rb +288 -16
- data/lib/smart_brain/scopes/conflict_resolver.rb +67 -0
- data/lib/smart_brain/scopes/registry.rb +133 -0
- data/lib/smart_brain/scopes/resolver.rb +32 -0
- data/lib/smart_brain/server/http_app.rb +143 -0
- data/lib/smart_brain/server/mcp_server.rb +385 -0
- data/lib/smart_brain/server/service.rb +129 -0
- data/lib/smart_brain/support/levenshtein.rb +35 -0
- data/lib/smart_brain/version.rb +5 -5
- data/lib/smart_brain.rb +80 -35
- metadata +88 -36
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
## 1. 目的
|
|
2
|
+
|
|
3
|
+
MemoryTypes 用于把“对话与工具事件中可沉淀的长期信息”结构化,解决:
|
|
4
|
+
- 记忆污染(把闲聊当长期事实)
|
|
5
|
+
- 冲突不可控(同一事实多版本)
|
|
6
|
+
- 检索不可用(只存全文,无法聚合/过滤/关联)
|
|
7
|
+
- 无法解释(不知道这条记忆来自哪里)
|
|
8
|
+
|
|
9
|
+
本规范定义:
|
|
10
|
+
- 记忆类型(type)
|
|
11
|
+
- key 规则(如何唯一标识一条记忆)
|
|
12
|
+
- value 形态(建议的 JSON)
|
|
13
|
+
- 写入门控与冲突合并策略(最低要求)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 2. 总体存储模型(建议)
|
|
18
|
+
|
|
19
|
+
### 2.1 memory_items(结构化)
|
|
20
|
+
字段建议:
|
|
21
|
+
- `id`
|
|
22
|
+
- `type`
|
|
23
|
+
- `key`
|
|
24
|
+
- `value_json`
|
|
25
|
+
- `confidence`(0..1)
|
|
26
|
+
- `status`(active|superseded|retracted)
|
|
27
|
+
- `source_turn_id`
|
|
28
|
+
- `source_message_id`(可选)
|
|
29
|
+
- `evidence_refs`(可选:document_id/section_id/url)
|
|
30
|
+
- `updated_at`
|
|
31
|
+
|
|
32
|
+
### 2.2 memory_chunks(可检索文本)
|
|
33
|
+
- `id`
|
|
34
|
+
- `memory_item_id`
|
|
35
|
+
- `text`(用于 FTS/embedding)
|
|
36
|
+
- `embedding`
|
|
37
|
+
- `tsv`
|
|
38
|
+
- `meta_json`(包含 type/key、版本、语言等)
|
|
39
|
+
|
|
40
|
+
> 规则:memory_items 是真相;memory_chunks 是派生索引内容,可重建。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. 类型清单(v0.1)
|
|
45
|
+
|
|
46
|
+
v0.1 约定以下类型(type):
|
|
47
|
+
|
|
48
|
+
### 3.1 profile(用户/主体画像)
|
|
49
|
+
- 含义:稳定身份信息(职业、背景、组织、长期角色)
|
|
50
|
+
- key 规则:`profile:<subject>`
|
|
51
|
+
- subject 常用:`user`(默认)、或 `agent`(多主体时)
|
|
52
|
+
- value_json 示例:
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"subject": "user",
|
|
56
|
+
"facts": [
|
|
57
|
+
{"k": "role", "v": "Executive Secretary General of ...", "since": "2024-05-17"}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
* 写入门控:只有明确陈述且稳定的信息才写入;不确定内容写入 events,不写 profile。
|
|
63
|
+
|
|
64
|
+
### 3.2 preferences(偏好与约束)
|
|
65
|
+
|
|
66
|
+
* 含义:写作风格、工具偏好、语言偏好、预算偏好等
|
|
67
|
+
* key 规则:`pref:<scope>:<name>`
|
|
68
|
+
|
|
69
|
+
* scope:`writing|coding|tools|ui|other`
|
|
70
|
+
* value_json 示例:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"scope": "writing",
|
|
75
|
+
"name": "tone",
|
|
76
|
+
"value": "focused and exacting",
|
|
77
|
+
"priority": 0.8
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
* 冲突策略:同 key 新值覆盖旧值(旧值 status=superseded),保留历史版本。
|
|
82
|
+
|
|
83
|
+
### 3.3 goals(长期目标)
|
|
84
|
+
|
|
85
|
+
* 含义:项目目标、学习目标、长期规划
|
|
86
|
+
* key 规则:`goal:<project_or_topic>:<name>`
|
|
87
|
+
* value_json 示例:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"project": "SmartBrain",
|
|
92
|
+
"name": "local_first_memory_runtime",
|
|
93
|
+
"description": "Build ...",
|
|
94
|
+
"status": "active"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 3.4 tasks(任务与待办)
|
|
99
|
+
|
|
100
|
+
* 含义:可追踪的任务项(含状态流转)
|
|
101
|
+
* key 规则:`task:<project>:<task_id>`(task_id 可为 uuid 或 slug)
|
|
102
|
+
* value_json 示例:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"project": "SmartBot",
|
|
107
|
+
"task_id": "brain_runtime_mvp",
|
|
108
|
+
"title": "Integrate SmartBrain into SmartBot loop",
|
|
109
|
+
"status": "todo|doing|done|blocked",
|
|
110
|
+
"due": "2026-03-01",
|
|
111
|
+
"notes": ["..."]
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
* 重要:tasks 应当支持状态更新(commit_turn 时识别“已完成/阻塞”)。
|
|
116
|
+
|
|
117
|
+
### 3.5 decisions(决策与承诺)
|
|
118
|
+
|
|
119
|
+
* 含义:已经决定的方案、选择、不可逆约束
|
|
120
|
+
* key 规则:`decision:<project>:<topic>`
|
|
121
|
+
* value_json 示例:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"project": "SmartRAG",
|
|
126
|
+
"topic": "retrieve_api_contract",
|
|
127
|
+
"decision": "Add retrieve(plan) returning EvidencePack",
|
|
128
|
+
"rationale": "Contract-based integration with SmartBrain",
|
|
129
|
+
"made_at": "2026-02-20"
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 3.6 entities(实体)
|
|
134
|
+
|
|
135
|
+
* 含义:对话中出现的重要实体(人/组织/项目/仓库/文件/URL 域名等)
|
|
136
|
+
* key 规则:`entity:<kind>:<canonical>`
|
|
137
|
+
|
|
138
|
+
* kind:`person|org|repo|file|url|topic|other`
|
|
139
|
+
* value_json 示例:
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"kind": "repo",
|
|
144
|
+
"canonical": "zhuangbiaowei/smart_rag",
|
|
145
|
+
"aliases": ["smart_rag"],
|
|
146
|
+
"attrs": {"host": "github.com"}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
* 备注:entities 通常配合 entity_mentions 表用于关联检索。
|
|
151
|
+
|
|
152
|
+
### 3.7 events(重要事件)
|
|
153
|
+
|
|
154
|
+
* 含义:可被未来引用的关键事件(发布、会议、里程碑、异常)
|
|
155
|
+
* key 规则:`event:<project_or_scope>:<date>:<slug>`
|
|
156
|
+
* value_json 示例:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"scope": "SmartBrain",
|
|
161
|
+
"date": "2026-02-20",
|
|
162
|
+
"title": "Decided to split memory runtime into SmartBrain",
|
|
163
|
+
"impact": "architecture"
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 3.8 cases(案例/经验片段)
|
|
168
|
+
|
|
169
|
+
* 含义:某次任务的输入—过程—输出—结果,可复用
|
|
170
|
+
* key 规则:`case:<domain>:<slug_or_id>`
|
|
171
|
+
* value_json 示例:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"domain": "rag_debug",
|
|
176
|
+
"problem": "...",
|
|
177
|
+
"solution": "...",
|
|
178
|
+
"outcome": "works",
|
|
179
|
+
"artifacts": [{"type":"doc","ref":"..."}]
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 3.9 patterns(模式/规则)
|
|
184
|
+
|
|
185
|
+
* 含义:从多个案例/对话中归纳出的可复用策略
|
|
186
|
+
* key 规则:`pattern:<domain>:<name>`
|
|
187
|
+
* value_json 示例:
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"domain": "context_composing",
|
|
192
|
+
"name": "slot_based_composition",
|
|
193
|
+
"rule": "system core -> summary -> recent -> evidence -> user",
|
|
194
|
+
"confidence": 0.7
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 4. key 设计规则(必须遵守)
|
|
201
|
+
|
|
202
|
+
1. **稳定性**:同一事实应映射到同一 key(便于更新与去重)
|
|
203
|
+
2. **可读性**:key 应可读可排查(不全是 uuid)
|
|
204
|
+
3. **可扩展**:允许引入 scope/domain/project 前缀
|
|
205
|
+
4. **可多主体**:必要时将 subject 纳入 key(profile/user vs profile/agent)
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 5. 写入门控(Retention Gate)最低要求
|
|
210
|
+
|
|
211
|
+
SmartBrain 在 commit_turn 时必须执行门控:
|
|
212
|
+
|
|
213
|
+
* 必写(高价值):
|
|
214
|
+
|
|
215
|
+
* tool_call 结果(尤其是产出 artifact、变更状态)
|
|
216
|
+
* refs(文件/URL)及其摘要/元信息
|
|
217
|
+
* decisions(明确决策)
|
|
218
|
+
* tasks(新增/更新/完成)
|
|
219
|
+
* 条件写(中价值):
|
|
220
|
+
|
|
221
|
+
* preferences(明确偏好、可稳定复用)
|
|
222
|
+
* goals(明确长期目标)
|
|
223
|
+
* entities/events(出现频繁或被强调的实体/事件)
|
|
224
|
+
* 不写入长期记忆(仅存 event):
|
|
225
|
+
|
|
226
|
+
* 闲聊、情绪性内容、一次性无复用信息
|
|
227
|
+
* 模糊推测、未确认事实
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 6. 冲突合并策略(最低要求)
|
|
232
|
+
|
|
233
|
+
### 6.1 覆盖型(overwrite)
|
|
234
|
+
|
|
235
|
+
适用:preferences/goals/tasks(同 key 新值应覆盖旧值)
|
|
236
|
+
|
|
237
|
+
* 旧值标记:`status = superseded`
|
|
238
|
+
* 保留历史版本(便于回滚/审计)
|
|
239
|
+
|
|
240
|
+
### 6.2 多版本并存(versioned)
|
|
241
|
+
|
|
242
|
+
适用:profile(谨慎)、decisions/events(应保留历史)
|
|
243
|
+
|
|
244
|
+
* 以时间或版本号区分(在 value_json 中存 `version` 或 `made_at`)
|
|
245
|
+
* compose 时默认选最新/最高置信
|
|
246
|
+
|
|
247
|
+
### 6.3 撤回(retracted)
|
|
248
|
+
|
|
249
|
+
适用:用户明确否认的事实
|
|
250
|
+
|
|
251
|
+
* 将旧条目标记 `status = retracted`
|
|
252
|
+
* 新条目可写入修正事实(同 key 或新 key)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 7. memory_chunks 文本化规则(用于检索)
|
|
257
|
+
|
|
258
|
+
为了让 FTS/embedding 有用,每个 memory_item 应生成一个或多个 chunk 文本:
|
|
259
|
+
|
|
260
|
+
* 第一行:`[type:key]`(用于定位)
|
|
261
|
+
* 主体:对 value_json 的可读摘要
|
|
262
|
+
* 可附:来源/时间/项目
|
|
263
|
+
|
|
264
|
+
示例(preferences):
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
[preferences:pref:writing:tone]
|
|
268
|
+
User prefers a focused and exacting tone for technical documents.
|
|
269
|
+
Updated at: 2026-02-20
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 8. 版本与兼容
|
|
275
|
+
|
|
276
|
+
* v0.1:类型集合与 key 规则为最低一致性要求
|
|
277
|
+
* 可新增 type,但必须遵守 key 规则
|
|
278
|
+
* 破坏性变更(重命名 type/key 规则)需要 major 版本与迁移策略
|