Files
mai-bot/plugins/A_memorix/IMPORT_GUIDE.md
DawnARC 71b3a828c6 添加 A_Memorix 插件 v2.0.0(包含运行时与文档)
引入 A_Memorix 插件 v2.0.0:新增大量运行时组件、存储/模式更新、检索能力提升、管理工具、导入/调优工作流以及相关文档。关键新增内容包括:lifecycle_orchestrator、SDKMemoryKernel/运行时初始化器、新的存储层与 metadata_store 变更(SCHEMA_VERSION v8)、检索增强(双路径检索、图关系召回、稀疏 BM25),以及多种工具服务(episode/person_profile/relation/segmentation/tuning/search execution)。同时新增 Web 导入/摘要导入器及大量维护脚本。还更新了插件清单、embedding API 适配器、plugin.py、requirements/pyproject,以及主入口文件,使新插件接入项目。该变更为 2.0.0 版本发布做好准备,实现统一的 SDK Tool 接口并扩展整体运行能力。
2026-03-19 00:09:04 +08:00

336 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# A_Memorix 导入指南 (v2.0.0)
本文档对应当前 `2.0.0` 代码路径,覆盖两类导入方式:
1. 脚本导入(离线批处理)
2. `memory_import_admin` 任务导入(在线任务化)
## 1. 导入前检查
建议先执行:
```bash
python plugins/A_memorix/scripts/runtime_self_check.py --json
```
再确认:
- `storage.data_dir` 路径可写
- embedding 配置可用
- 若是升级项目,先完成迁移脚本
## 2. 方式 A脚本导入推荐起步
## 2.1 原始文本导入
`.txt` 文件放入:
```text
plugins/A_memorix/data/raw/
```
执行:
```bash
python plugins/A_memorix/scripts/process_knowledge.py
```
常用参数:
```bash
python plugins/A_memorix/scripts/process_knowledge.py --force
python plugins/A_memorix/scripts/process_knowledge.py --chat-log
python plugins/A_memorix/scripts/process_knowledge.py --chat-log --chat-reference-time "2026/02/12 10:30"
```
## 2.2 OpenIE JSON 导入
```bash
python plugins/A_memorix/scripts/import_lpmm_json.py <json文件或目录>
```
## 2.3 LPMM 数据转换
```bash
python plugins/A_memorix/scripts/convert_lpmm.py -i <lpmm数据目录> -o plugins/A_memorix/data
```
## 2.4 历史数据迁移
```bash
python plugins/A_memorix/scripts/migrate_chat_history.py --help
python plugins/A_memorix/scripts/migrate_maibot_memory.py --help
python plugins/A_memorix/scripts/migrate_person_memory_points.py --help
```
## 2.5 导入后修复与重建
```bash
python plugins/A_memorix/scripts/backfill_temporal_metadata.py --dry-run
python plugins/A_memorix/scripts/backfill_relation_vectors.py --limit 1000
python plugins/A_memorix/scripts/rebuild_episodes.py --all --wait
python plugins/A_memorix/scripts/audit_vector_consistency.py --json
```
## 3. 方式 B`memory_import_admin` 任务导入
`memory_import_admin` 是在线任务化导入入口,适合宿主侧面板或自动化管道。
### 3.1 常用 action
- `settings` / `get_settings` / `get_guide`
- `path_aliases` / `get_path_aliases`
- `resolve_path`
- `create_upload`
- `create_paste`
- `create_raw_scan`
- `create_lpmm_openie`
- `create_lpmm_convert`
- `create_temporal_backfill`
- `create_maibot_migration`
- `list`
- `get`
- `chunks` / `get_chunks`
- `cancel`
- `retry_failed`
### 3.2 调用示例
查看运行时设置:
```json
{
"tool": "memory_import_admin",
"arguments": {
"action": "settings"
}
}
```
创建粘贴导入任务:
```json
{
"tool": "memory_import_admin",
"arguments": {
"action": "create_paste",
"content": "今天完成了检索调优回归。",
"input_mode": "plain_text",
"source": "manual:worklog"
}
}
```
查询任务列表:
```json
{
"tool": "memory_import_admin",
"arguments": {
"action": "list",
"limit": 20
}
}
```
查看任务详情:
```json
{
"tool": "memory_import_admin",
"arguments": {
"action": "get",
"task_id": "<task_id>",
"include_chunks": true
}
}
```
重试失败任务:
```json
{
"tool": "memory_import_admin",
"arguments": {
"action": "retry_failed",
"task_id": "<task_id>"
}
}
```
## 4. 直接写入 Tool非任务化
若你不需要任务编排,也可以直接调用:
- `ingest_summary`
- `ingest_text`
示例:
```json
{
"tool": "ingest_text",
"arguments": {
"external_id": "note:2026-03-18:001",
"source_type": "note",
"text": "新的召回阈值方案已通过评审",
"chat_id": "group:dev",
"tags": ["worklog", "review"]
}
}
```
`external_id` 建议全局唯一,用于幂等去重。
## 5. 时间字段建议
可用时间字段(按常见优先级):
- `timestamp`
- `time_start`
- `time_end`
建议:
- 事件类记录优先写 `time_start/time_end`
- 仅有单点时间时写 `timestamp`
- 历史数据可先导入,再用 `backfill_temporal_metadata.py` 回填
## 6. source_type 建议
常见值:
- `chat_summary`
- `note`
- `person_fact`
- `lpmm_openie`
- `migration`
建议保持稳定枚举,便于后续按来源治理与重建 Episode。
## 7. 导入完成后的验证
建议执行以下顺序:
1. `memory_stats` 看总量是否增长
2. `search_memory``mode=search`/`aggregate`)抽检召回
3. `memory_episode_admin``status`/`query` 检查 Episode 生成
4. `memory_runtime_admin``self_check` 再确认运行时健康
## 8. 常见问题
### Q1: 导入任务创建成功但无写入
- 检查聊天过滤配置 `filter`(若 `respect_filter=true` 可能被过滤)
- 检查任务详情中的失败原因与分块状态
### Q2: 任务反复失败
- 检查 embedding 与 LLM 可用性
- 降低并发(`web.import.default_*_concurrency`
- 调整重试参数(`web.import.llm_retry.*`
### Q3: 导入后检索效果差
- 先做 `runtime_self_check`
- 检查 `retrieval.sparse` 是否启用
- 使用 `memory_tuning_admin` 创建调优任务做参数回归
## 9. 相关文档
- [QUICK_START.md](QUICK_START.md)
- [CONFIG_REFERENCE.md](CONFIG_REFERENCE.md)
- [README.md](README.md)
- [CHANGELOG.md](CHANGELOG.md)
## 10. 附录:策略模式参考
A_Memorix 导入链路仍然遵循策略模式Strategy-Aware`process_knowledge.py` 会自动识别文本类型,也支持手动指定。
| 策略类型 | 适用场景 | 核心逻辑 | 自动识别特征 |
| :-- | :-- | :-- | :-- |
| `Narrative` (叙事) | 小说、同人文、剧本、长篇故事 | 按场景/章节切分,使用滑动窗口;提取事件与角色关系 | `#``Chapter``***` 等章节标记 |
| `Factual` (事实) | 设定集、百科、说明书 | 按语义块切分,保留列表/定义结构;提取 SPO 三元组 | 列表符号、`术语: 解释` |
| `Quote` (引用) | 歌词、诗歌、名言、台词 | 按双换行切分,原文即知识,不做概括 | 平均行长短、行数多 |
## 11. 附录:参考用例(已恢复)
以下样例可直接复制保存为文件测试,或作为 LLM few-shot 示例。
### 11.1 叙事文本 (`plugins/A_memorix/data/raw/story_demo.txt`)
```text
# 第一章:星之子
艾瑞克在废墟中醒来,手中的星盘发出微弱的蓝光。他并不记得自己是如何来到这里的,只依稀记得莉莉丝最后的警告:“千万不要回头。”
远处传来了机械守卫的轰鸣声。艾瑞克迅速收起星盘,向着北方的废弃都市奔去。他知道,那里有反抗军唯一的据点。
***
# 第二章:重逢
在反抗军的地下掩体中,艾瑞克见到了那个熟悉的身影。莉莉丝正站在全息地图前,眉头紧锁。
“你还是来了。”莉莉丝没有回头,但声音中带着一丝颤抖。
“我必须来,”艾瑞克握紧了拳头,“为了解开星盘的秘密,也为了你。”
```
### 11.2 事实文本 (`plugins/A_memorix/data/raw/rules_demo.txt`)
```text
# 联邦安全协议 v2.0
## 核心法则
1. **第一公理**:任何人工智能不得伤害人类个体,或因不作为而使人类个体受到伤害。
2. **第二公理**:人工智能必须服从人类的命令,除非该命令与第一公理冲突。
## 术语定义
- **以太网络**:覆盖全联邦的高速量子通讯网络。
- **黑色障壁**:用于隔离高危 AI 的物理防火墙设施。
```
### 11.3 引用文本 (`plugins/A_memorix/data/raw/poem_demo.txt`)
```text
致橡树
我如果爱你——
绝不像攀援的凌霄花,
借你的高枝炫耀自己;
我如果爱你——
绝不学痴情的鸟儿,
为绿荫重复单调的歌曲;
也不止像泉源,
常年送来清凉的慰籍;
也不止像险峰,
增加你的高度,衬托你的威仪。
```
### 11.4 LPMM JSON (`lpmm_data-openie.json`)
```json
{
"docs": [
{
"passage": "艾瑞克手中的星盘是打开遗迹的唯一钥匙。",
"extracted_triples": [
["星盘", "是", "唯一的钥匙"],
["星盘", "属于", "艾瑞克"],
["钥匙", "用于", "遗迹"]
],
"extracted_entities": ["星盘", "艾瑞克", "遗迹", "钥匙"]
},
{
"passage": "莉莉丝是反抗军的现任领袖。",
"extracted_triples": [
["莉莉丝", "是", "领袖"],
["领袖", "所属", "反抗军"]
]
}
]
}
```