metainsight-context-engine 0.0.1 → 0.0.4
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/README.md +24 -7
- package/dist/cos-bootstrap.d.ts.map +1 -1
- package/dist/cos-bootstrap.js +4 -21
- package/dist/cos-bootstrap.js.map +1 -1
- package/dist/cos-operations.js +1 -1
- package/dist/cos-operations.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +0 -2
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +186 -76
- package/dist/index.js.map +1 -1
- package/dist/local-memory-sync.d.ts.map +1 -1
- package/dist/local-memory-sync.js +7 -21
- package/dist/local-memory-sync.js.map +1 -1
- package/package.json +25 -39
- package/BOOTSTRAP.md +0 -341
package/BOOTSTRAP.md
DELETED
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
# COS Bootstrap — 前置条件初始化
|
|
2
|
-
|
|
3
|
-
> Cloud Context Engine 的基础设施初始化模块,负责在引擎启动前确保所有云端资源就绪。
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
`cos-bootstrap.ts` 是 Cloud Context Engine 的**第一个执行步骤**。它会自动检测并创建以下云端资源:
|
|
8
|
-
|
|
9
|
-
1. **COS 存储桶** — 用于存储所有文档和数据
|
|
10
|
-
2. **CI 数据集** — 用于智能文档搜索(支持多个数据集)
|
|
11
|
-
3. **数据集绑定** — 将数据集关联到存储桶中的指定路径前缀
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
┌──────────────────────────────────────────────────────────────────────┐
|
|
15
|
-
│ COS 存储桶 │
|
|
16
|
-
│ openclaw-metainsight-{APPID} │
|
|
17
|
-
│ │
|
|
18
|
-
│ ┌─────────────────┐ ┌──────────────────────────┐ ┌───────────┐ │
|
|
19
|
-
│ │ memory/ │ │ asset/ │ │ 其他路径/ │ │
|
|
20
|
-
│ │ *.md │ │ *.jpg/png/pdf/... │ │ (可扩展) │ │
|
|
21
|
-
│ └──────┬──────────┘ └──────┬──────────┬─────────┘ └─────┬─────┘ │
|
|
22
|
-
│ │ │ │ │ │
|
|
23
|
-
│ ▼ ▼ ▼ ▼ │
|
|
24
|
-
│ ┌─────────────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
|
|
25
|
-
│ │ memory 数据集 │ │ image │ │ document │ │ 自定义 │ │
|
|
26
|
-
│ │ DocSearch │ │ ImgSearch│ │ DocSearch│ │ (可扩展) │ │
|
|
27
|
-
│ └─────────────────┘ └──────────┘ └──────────┘ └───────────┘ │
|
|
28
|
-
└──────────────────────────────────────────────────────────────────────┘
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## 前置条件
|
|
32
|
-
|
|
33
|
-
### 1. 获取腾讯云访问密钥
|
|
34
|
-
|
|
35
|
-
前往 [腾讯云 CAM 控制台](https://console.cloud.tencent.com/cam/capi) 获取以下信息:
|
|
36
|
-
|
|
37
|
-
| 参数 | 说明 | 示例 |
|
|
38
|
-
|------|------|------|
|
|
39
|
-
| **SecretId** | 访问密钥 ID | `AKIDxxxxxxxxxxxxxxxxxxxx` |
|
|
40
|
-
| **SecretKey** | 访问密钥 Key | `xxxxxxxxxxxxxxxxxxxxxxxxx` |
|
|
41
|
-
| **APPID** | 腾讯云账号 APPID | `1253311026` |
|
|
42
|
-
|
|
43
|
-
> ⚠️ **安全提示**:密钥应通过环境变量或安全配置管理传入,切勿硬编码到代码中。
|
|
44
|
-
|
|
45
|
-
### 2. 地域限制
|
|
46
|
-
|
|
47
|
-
COS CI(智能内容识别)仅支持以下地域:
|
|
48
|
-
|
|
49
|
-
| 地域 | 地域代码 |
|
|
50
|
-
|------|----------|
|
|
51
|
-
| 北京 | `ap-beijing` |
|
|
52
|
-
| 上海 | `ap-shanghai` |
|
|
53
|
-
| 成都 | `ap-chengdu` |
|
|
54
|
-
|
|
55
|
-
### 3. SDK 依赖
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
npm install cos-nodejs-sdk-v5
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
> **注意**:必须使用 `cos-nodejs-sdk-v5`(Node.js 版本),不支持 `cos-js-sdk-v5`(浏览器版本)。
|
|
62
|
-
|
|
63
|
-
## 配置说明
|
|
64
|
-
|
|
65
|
-
### 最小配置(使用默认值)
|
|
66
|
-
|
|
67
|
-
```typescript
|
|
68
|
-
import { bootstrap } from './cos-bootstrap.js';
|
|
69
|
-
|
|
70
|
-
const outcome = await bootstrap({
|
|
71
|
-
secretId: process.env.COS_SECRET_ID!,
|
|
72
|
-
secretKey: process.env.COS_SECRET_KEY!,
|
|
73
|
-
appId: process.env.COS_APPID!,
|
|
74
|
-
}, logger);
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
默认行为:
|
|
78
|
-
- **bucket**: `openclaw-metainsight`(自动拼接 APPID → `openclaw-metainsight-{APPID}`)
|
|
79
|
-
- **region**: `ap-beijing`
|
|
80
|
-
- **datasets**: 三个默认数据集
|
|
81
|
-
- `openclaw-memory` — 绑定到 `memory/` 路径(对话记忆,DocSearch)
|
|
82
|
-
- `openclaw-image` — 绑定到 `asset/` 路径(图片检索,ImageSearch)
|
|
83
|
-
- `openclaw-document` — 绑定到 `asset/` 路径(文档检索,DocSearch)
|
|
84
|
-
|
|
85
|
-
### 完整配置
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
const outcome = await bootstrap({
|
|
89
|
-
secretId: 'AKIDxxxx',
|
|
90
|
-
secretKey: 'xxxx',
|
|
91
|
-
appId: '1253311026',
|
|
92
|
-
|
|
93
|
-
// 可选:自定义 bucket 名称(不含 APPID 后缀)
|
|
94
|
-
bucket: 'my-custom-bucket',
|
|
95
|
-
|
|
96
|
-
// 可选:自定义地域
|
|
97
|
-
region: 'ap-shanghai',
|
|
98
|
-
|
|
99
|
-
// 可选:自定义数据集定义
|
|
100
|
-
datasets: [
|
|
101
|
-
{
|
|
102
|
-
name: 'my-memory',
|
|
103
|
-
cosPrefix: 'memory/',
|
|
104
|
-
templateId: 'Official:DocSearch',
|
|
105
|
-
description: '对话记忆文档数据集',
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
}, logger);
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### 配置字段说明
|
|
112
|
-
|
|
113
|
-
#### `CosBootstrapConfig`
|
|
114
|
-
|
|
115
|
-
| 字段 | 必填 | 默认值 | 说明 |
|
|
116
|
-
|------|------|--------|------|
|
|
117
|
-
| `secretId` | ✅ | — | 腾讯云访问密钥 ID |
|
|
118
|
-
| `secretKey` | ✅ | — | 腾讯云访问密钥 Key |
|
|
119
|
-
| `appId` | ✅ | — | 腾讯云 APPID,从 [CAM 控制台](https://console.cloud.tencent.com/cam/capi) 获取 |
|
|
120
|
-
| `bucket` | ❌ | `openclaw-metainsight` | 存储桶短名称(不含 APPID 后缀,会自动拼接) |
|
|
121
|
-
| `region` | ❌ | `ap-beijing` | COS 地域代码 |
|
|
122
|
-
| `datasets` | ❌ | memory + image + document 数据集 | 数据集定义数组 |
|
|
123
|
-
|
|
124
|
-
#### `DatasetDefinition`
|
|
125
|
-
|
|
126
|
-
| 字段 | 必填 | 默认值 | 说明 |
|
|
127
|
-
|------|------|--------|------|
|
|
128
|
-
| `name` | ✅ | — | CI 数据集名称(APPID 范围内唯一) |
|
|
129
|
-
| `cosPrefix` | ✅ | `{name}/` | COS 路径前缀,绑定覆盖的范围(必须以 `/` 结尾) |
|
|
130
|
-
| `templateId` | ❌ | `Official:DocSearch` | CI 数据集模板 |
|
|
131
|
-
| `description` | ❌ | 自动生成 | 数据集描述 |
|
|
132
|
-
|
|
133
|
-
#### 可用的数据集模板
|
|
134
|
-
|
|
135
|
-
| 模板 ID | 说明 | 适用场景 |
|
|
136
|
-
|---------|------|----------|
|
|
137
|
-
| `Official:DocSearch` | 文档搜索 | memory 等文本文档 |
|
|
138
|
-
| `Official:ImageSearch` | 图像搜索 | 图像内容检索 |
|
|
139
|
-
| `Official:FaceSearch` | 人脸搜索 | 人脸识别检索 |
|
|
140
|
-
| `Official:COSBasicMeta` | COS 基础元信息 | 文件元数据索引 |
|
|
141
|
-
|
|
142
|
-
## 数据集架构
|
|
143
|
-
|
|
144
|
-
### 默认数据集
|
|
145
|
-
|
|
146
|
-
当 `datasets` 参数省略时,自动创建以下三个数据集:
|
|
147
|
-
|
|
148
|
-
#### memory 数据集
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
数据集名称: openclaw-memory
|
|
152
|
-
绑定路径: cos://{bucket}/memory/
|
|
153
|
-
模板: Official:DocSearch
|
|
154
|
-
用途: 存储对话记忆文档,支持语义搜索
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
文件存储约定:
|
|
158
|
-
```
|
|
159
|
-
memory/
|
|
160
|
-
├── conversation-{id}.json # 对话记忆
|
|
161
|
-
├── summary-{id}.json # 对话摘要
|
|
162
|
-
└── ...
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
#### image 数据集
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
数据集名称: openclaw-image
|
|
169
|
-
绑定路径: cos://{bucket}/asset/
|
|
170
|
-
模板: Official:ImageSearch
|
|
171
|
-
用途: 图片内容检索,支持多模态(文本→图片)语义搜索
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
#### document 数据集
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
数据集名称: openclaw-document
|
|
178
|
-
绑定路径: cos://{bucket}/asset/
|
|
179
|
-
模板: Official:DocSearch
|
|
180
|
-
用途: 文档内容检索,对 asset/ 目录下的文档进行语义搜索
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
文件存储约定:
|
|
184
|
-
```
|
|
185
|
-
asset/
|
|
186
|
-
├── screenshot.png # 图片文件(由 image 数据集索引)
|
|
187
|
-
├── images/
|
|
188
|
-
│ └── photo.jpg
|
|
189
|
-
├── report.pdf # 文档文件(由 document 数据集索引)
|
|
190
|
-
└── ...
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
> 📝 **多 Agent 模式**下,数据集名称会带上 agentId:
|
|
194
|
-
> - memory: `openclaw-{agentId}-memory`(路径: `openclaw-{agentId}/workspace/`)
|
|
195
|
-
> - image: `openclaw-{agentId}-image`(路径: `openclaw-{agentId}/asset/`)
|
|
196
|
-
> - document: `openclaw-{agentId}-document`(路径: `openclaw-{agentId}/asset/`)
|
|
197
|
-
|
|
198
|
-
### 如何扩展新数据集
|
|
199
|
-
|
|
200
|
-
只需在 `datasets` 数组中追加新定义:
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
datasets: [
|
|
204
|
-
// 已有默认数据集(显式声明时需手动包含)
|
|
205
|
-
{ name: 'openclaw-memory', cosPrefix: 'memory/' },
|
|
206
|
-
{ name: 'openclaw-image', cosPrefix: 'asset/', templateId: 'Official:ImageSearch' },
|
|
207
|
-
{ name: 'openclaw-document', cosPrefix: 'asset/' },
|
|
208
|
-
|
|
209
|
-
// 新增:知识库数据集
|
|
210
|
-
{
|
|
211
|
-
name: 'openclaw-knowledge',
|
|
212
|
-
cosPrefix: 'knowledge/',
|
|
213
|
-
templateId: 'Official:DocSearch',
|
|
214
|
-
description: '外部知识库文档数据集',
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Bootstrap 会自动:
|
|
220
|
-
1. 检测每个数据集是否存在,不存在则创建
|
|
221
|
-
2. 检测每个数据集的绑定是否存在,不存在则创建
|
|
222
|
-
3. 所有操作都是**幂等的**:重复运行不会出错
|
|
223
|
-
|
|
224
|
-
## Bootstrap 输出
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
interface BootstrapOutcome {
|
|
228
|
-
success: boolean; // 整体是否成功
|
|
229
|
-
cos: COS; // COS SDK 实例(后续操作直接使用)
|
|
230
|
-
config: ResolvedCosConfig; // 解析后的完整配置
|
|
231
|
-
bucketCreated: boolean; // 存储桶是否是本次新创建的
|
|
232
|
-
datasetOutcomes: Array<{ // 每个数据集的初始化结果
|
|
233
|
-
name: string; // 数据集名称
|
|
234
|
-
cosPrefix: string; // 绑定路径
|
|
235
|
-
datasetCreated: boolean; // 是否新创建
|
|
236
|
-
bindingCreated: boolean; // 绑定是否新创建
|
|
237
|
-
}>;
|
|
238
|
-
error?: string; // 失败时的错误信息
|
|
239
|
-
}
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## 执行流程
|
|
243
|
-
|
|
244
|
-
```
|
|
245
|
-
bootstrap(config, logger)
|
|
246
|
-
│
|
|
247
|
-
▼
|
|
248
|
-
┌─ resolveConfig ──────────────────────────────┐
|
|
249
|
-
│ • 校验 appId、region │
|
|
250
|
-
│ • 拼接 bucket: {name}-{APPID} │
|
|
251
|
-
│ • 解析 datasets(默认: memory + image + document)│
|
|
252
|
-
│ • 校验无重复数据集名称 │
|
|
253
|
-
└──────────────────────────────────────────────┘
|
|
254
|
-
│
|
|
255
|
-
▼
|
|
256
|
-
┌─ Step 1: 存储桶 ─────────────────────────────┐
|
|
257
|
-
│ headBucket → 存在? 跳过 : putBucket 创建 │
|
|
258
|
-
└──────────────────────────────────────────────┘
|
|
259
|
-
│
|
|
260
|
-
▼
|
|
261
|
-
┌─ Step 2: 遍历 datasets ──────────────────────┐
|
|
262
|
-
│ for each dataset: │
|
|
263
|
-
│ 2a. GET /dataset → 存在? 跳过 : POST 创建 │
|
|
264
|
-
│ 2b. GET /datasetbinding → 存在? 跳过 : │
|
|
265
|
-
│ POST 创建 (URI: cos://{bucket}/{prefix})│
|
|
266
|
-
└──────────────────────────────────────────────┘
|
|
267
|
-
│
|
|
268
|
-
▼
|
|
269
|
-
BootstrapOutcome { success: true, ... }
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
## 辅助工具
|
|
273
|
-
|
|
274
|
-
### `sendCIRequest()` — CI API 通用请求
|
|
275
|
-
|
|
276
|
-
```typescript
|
|
277
|
-
import { sendCIRequest, getCOSInstance } from './cos-bootstrap.js';
|
|
278
|
-
|
|
279
|
-
const cos = getCOSInstance(secretId, secretKey);
|
|
280
|
-
const result = await sendCIRequest(
|
|
281
|
-
cos,
|
|
282
|
-
'bucket-name-1253311026',
|
|
283
|
-
'ap-beijing',
|
|
284
|
-
'POST', // HTTP 方法
|
|
285
|
-
'datasetquery/hybridsearch', // CI API 端点
|
|
286
|
-
{ /* 请求体 */ },
|
|
287
|
-
{ /* 查询参数 */ },
|
|
288
|
-
);
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
该方法自动处理:
|
|
292
|
-
- COS SDK 签名鉴权
|
|
293
|
-
- JSON 请求/响应序列化
|
|
294
|
-
- CI API Host 拼接(`{bucket}.ci.{region}.myqcloud.com`)
|
|
295
|
-
|
|
296
|
-
### `getCOSInstance()` — COS SDK 单例
|
|
297
|
-
|
|
298
|
-
相同 `secretId` 返回同一实例,避免重复初始化:
|
|
299
|
-
|
|
300
|
-
```typescript
|
|
301
|
-
const cos1 = getCOSInstance(secretId, secretKey);
|
|
302
|
-
const cos2 = getCOSInstance(secretId, secretKey);
|
|
303
|
-
// cos1 === cos2 → true
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## 内置保障
|
|
307
|
-
|
|
308
|
-
| 特性 | 说明 |
|
|
309
|
-
|------|------|
|
|
310
|
-
| **幂等性** | 所有操作都是先检测后创建,重复执行安全无副作用 |
|
|
311
|
-
| **自动重试** | 网络请求失败自动重试 2 次,指数退避(1s / 2s) |
|
|
312
|
-
| **TTL 缓存** | 数据集和绑定查询结果缓存 5 分钟,减少 API 调用 |
|
|
313
|
-
| **错误容错** | 新建桶后查询数据集可能返回 400(而非 404),已兼容处理 |
|
|
314
|
-
| **Bucket 命名** | 自动拼接 APPID 后缀,已含 APPID 时不重复拼接 |
|
|
315
|
-
| **cosPrefix 规范化** | 自动在路径末尾补 `/` |
|
|
316
|
-
|
|
317
|
-
## 常见问题
|
|
318
|
-
|
|
319
|
-
### Q: APPID 在哪里获取?
|
|
320
|
-
|
|
321
|
-
前往 [腾讯云 CAM 控制台](https://console.cloud.tencent.com/cam/capi),APPID 显示在密钥列表上方的账号信息区域。也可以通过 `getService`(ListBuckets)API 从返回的 Owner 字段获取。
|
|
322
|
-
|
|
323
|
-
### Q: 为什么 Bucket 名称要带 APPID?
|
|
324
|
-
|
|
325
|
-
COS 全局 Bucket 命名格式为 `{BucketName}-{APPID}`,这是腾讯云的强制要求。Bootstrap 会自动处理拼接。
|
|
326
|
-
|
|
327
|
-
### Q: 数据集绑定后多久生效?
|
|
328
|
-
|
|
329
|
-
绑定创建后状态会从 `Creating` 变为 `Running`,通常在几秒内完成。绑定生效后,往对应路径上传的文件会自动被索引。
|
|
330
|
-
|
|
331
|
-
### Q: 能否给同一路径绑定多个数据集?
|
|
332
|
-
|
|
333
|
-
可以。`image` 和 `document` 数据集都绑定到 `asset/` 路径,但使用不同的模板(`ImageSearch` vs `DocSearch`)。CI 会根据模板类型对同一路径下的文件进行不同方式的索引。
|
|
334
|
-
|
|
335
|
-
### Q: memory 数据集的数据源是什么?
|
|
336
|
-
|
|
337
|
-
memory 数据集绑定到 `memory/` 路径,数据源是本地的 memory 文件夹中的对话记忆文件。上传到 `cos://{bucket}/memory/` 的 JSON 文件会自动被 CI 索引,支持后续的语义搜索。
|
|
338
|
-
|
|
339
|
-
### Q: image 数据集如何使用?
|
|
340
|
-
|
|
341
|
-
image 数据集绑定到 `asset/` 路径,使用 `Official:ImageSearch` 模板。上传到 `cos://{bucket}/asset/` 的图片文件(jpg/png 等)会自动被 CI 索引。检索时通过 `category="image"` 路由到该数据集,`Templates` 会自动切换为 `ImageSearch`,支持文本→图片的多模态语义搜索。
|