Files
gh-dwsy-ai-runtime-ai-runti…/skills/memory/references/guides/tools.md
2025-11-29 18:24:34 +08:00

267 lines
5.5 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.
# 记忆系统工具详解
## memory_cli.py - 命令行查询工具
### 核心功能
提供SQL风格的命令行接口支持复杂条件查询情景记忆事件。
### 命令语法
```bash
python3 memory_cli.py query [选项...]
```
### 查询选项详解
#### --select 字段选择
```bash
# 选择特定字段
--select "id,timestamp,title"
# 默认选择(不指定时)
--select "id,timestamp,title"
```
#### --where 条件过滤
支持SQL风格WHERE条件字段包括
- `id`, `type`, `level`, `title`, `date`, `timestamp`
- `tags` (支持 CONTAINS 操作)
```bash
# 基础条件
--where "type='decision'"
--where "date>='2025-11-14'"
--where "tags CONTAINS 'architecture'"
# 组合条件
--where "date>='2025-11-14' AND tags CONTAINS 'decision'"
--where "type='meeting' OR type='decision'"
```
#### --order-by 排序
```bash
# 单个字段排序
--order-by "timestamp desc"
--order-by "date asc"
# 多个字段排序(暂不支持)
```
#### --limit / --offset 分页
```bash
--limit 20 --offset 0 # 第一页20条
--limit 20 --offset 20 # 第二页20条
```
#### --format 输出格式
```bash
--format table # 表格格式(默认)
--format json # JSON格式
```
### 使用示例
#### 基础查询
```bash
# 查看所有事件
python3 memory_cli.py query
# 查看今天的事件
python3 memory_cli.py query --where "date='2025-11-14'"
```
#### 高级查询
```bash
# 查找架构决策
python3 memory_cli.py query \
--where "type='decision' AND tags CONTAINS 'architecture'" \
--order-by "timestamp desc" \
--limit 10
# 搜索错误事件
python3 memory_cli.py query \
--where "type='error'" \
--select "timestamp,title,tags" \
--format table
```
#### 时间范围查询
```bash
# 本周事件
python3 memory_cli.py query \
--where "date>='2025-11-10' AND date<='2025-11-16'"
# 最近7天
python3 memory_cli.py query \
--where "timestamp >= '2025-11-07T00:00:00'" \
--order-by "timestamp desc"
```
## memory_discovery.py - 编程接口
### 类概述
#### MemoryDiscovery 类
核心记忆发现和查询引擎。
#### MemoryEvent 类
单个记忆事件的索引信息数据类。
### 编程接口
#### 初始化
```python
from memory_discovery import MemoryDiscovery
# 初始化发现器
discovery = MemoryDiscovery("path/to/memory/root")
```
#### 刷新索引
```python
# 重新扫描episodic目录
discovery.refresh()
```
#### SQL风格查询
```python
# 基础查询
events = discovery.query()
# 条件查询
events = discovery.query(
where="date>='2025-11-14' AND tags CONTAINS 'architecture'",
order_by="timestamp desc",
limit=20,
offset=0
)
```
#### 格式化输出
```python
# 表格格式
output = discovery.format_events(events, format_type="table")
# JSON格式
output = discovery.format_events(events, format_type="json")
# 自定义字段选择
output = discovery.format_events(
events,
select=["id", "title", "date"],
format_type="table"
)
```
### 事件解析协议
#### 时间推断顺序
1. YAML front matter `timestamp`/`time` 字段
2. 正文 `## 时间` 段落第一行
3. 文件名模式 `YYYYMMDD-HHMM.md`
4. 文件名模式 `YYYYMMDD.md`
5. 文件修改时间 (mtime)
#### 标签解析顺序
1. YAML front matter `tags` 数组
2. 正文 `## 标签` 段落(逗号分隔)
3. 空数组(无标签)
#### 标题解析顺序
1. YAML front matter `title`
2. 正文第一个 `# ` 标题
3. 文件名(去除扩展名)
### 高级用法
#### 自定义查询条件
```python
# 复杂的标签组合查询
events = discovery.query(
where="tags CONTAINS 'architecture' AND (tags CONTAINS 'decision' OR tags CONTAINS 'design')"
)
```
#### 批量处理
```python
# 分页处理大量事件
page_size = 50
all_events = []
for offset in range(0, 1000, page_size): # 最多1000条
batch = discovery.query(limit=page_size, offset=offset)
if not batch:
break
all_events.extend(batch)
```
#### 事件对象操作
```python
# 访问事件属性
for event in events:
print(f"ID: {event.id}")
print(f"标题: {event.title}")
print(f"时间: {event.timestamp}")
print(f"标签: {event.tags}")
print(f"类型: {event.type}")
# 转换为字典
event_dict = event.to_dict()
```
## 工具集成
### Shell脚本集成
```bash
# 创建查询别名
alias memory-query="python3 .ai-runtime/memory/memory_cli.py query"
# 快速查看今天事件
memory-query --where "date='$(date +%Y-%m-%d)'"
```
### Python脚本集成
```python
#!/usr/bin/env python3
import sys
sys.path.insert(0, '.ai-runtime/memory')
from memory_discovery import MemoryDiscovery
def get_recent_decisions(days=7):
import datetime
cutoff = datetime.datetime.now() - datetime.timedelta(days=days)
discovery = MemoryDiscovery('.ai-runtime/memory')
return discovery.query(
where=f"type='decision' AND timestamp >= '{cutoff.isoformat()}'",
order_by="timestamp desc"
)
```
## 故障排除
### 常见问题
**查询无结果**
- 检查WHERE条件语法
- 验证字段名称拼写
- 确认时间格式YYYY-MM-DD
**事件不显示**
- 检查文件路径结构episodic/YYYY/MM/DD/
- 验证YAML front matter格式
- 确认时间戳有效性
**性能问题**
- 使用LIMIT限制结果数量
- 优化WHERE条件先过滤时间范围
- 考虑分页查询大量数据
### 调试技巧
```python
# 查看所有已解析事件
discovery = MemoryDiscovery('.ai-runtime/memory')
for event in discovery.events:
print(f"{event.id}: {event.title} ({event.date}) - {event.tags}")
```