# KnowHub Internal Tools

这些工具只能在 Knowledge Manager 内部使用，不暴露给普通 Agent。

## 缓存管理工具

Knowledge Manager 使用本地缓存机制来处理调研数据，流程如下：

### 1. 接收数据 → 缓存到本地

调研 Agent 通过 IM 发送调研结果时，KM 使用 `cache_research_data` 缓存到本地：

```python
await cache_research_data(
    data={
        "tools": [...],
        "resources": [...],
        "knowledge": [...]
    },
    source="agent_research"
)
```

**存储位置**：`.cache/.knowledge/buffer/{source}_{timestamp}.json`

### 2. 整理数据 → 去重合并

当需要整理缓存数据时，使用 `organize_cached_data`：

```python
await organize_cached_data(merge=True)
```

**功能**：
- 读取所有 buffer 中的文件
- 按名称/标题去重
- 合并到一个文件
- 保存到 `.cache/.knowledge/organized/organized_{timestamp}.json`
- 清空 buffer（如果 `merge=True`）

### 3. 提交到数据库（可选）

只有在明确要求时，才使用 `commit_to_database` 提交到数据库：

```python
await commit_to_database()
```

**功能**：
- 读取最新的 organized 文件
- 调用 `resource_save` 和 `knowledge_save` 入库
- 返回提交统计

### 4. 查看缓存状态

使用 `list_cache_status` 查看当前缓存情况：

```python
await list_cache_status()
```

## 工作流示例

### 场景 1：只缓存和整理，不入库

```
调研 Agent: 发送调研结果
KM: cache_research_data() → 缓存到 buffer
KM: 回复"已缓存"

用户: 整理一下
KM: organize_cached_data() → 整理到 organized
KM: 回复"已整理，去重 X 个"
```

### 场景 2：缓存、整理、入库

```
调研 Agent: 发送调研结果
KM: cache_research_data() → 缓存到 buffer
KM: 回复"已缓存"

用户: 提交到数据库
KM: organize_cached_data() → 整理
KM: commit_to_database() → 入库
KM: 回复"已提交到数据库"
```

## 目录结构

```
.cache/.knowledge/
├── buffer/              # 原始缓存（调研 Agent 提交的数据）
│   ├── agent_research_20260402_120000.json
│   └── agent_research_20260402_130000.json
└── organized/           # 整理后的数据（去重合并）
    └── organized_20260402_140000.json
```

## 设计原则

1. **默认缓存**：收到数据时先缓存，不直接入库
2. **按需入库**：只有明确要求时才提交到数据库
3. **去重优先**：整理时必须去重
4. **快速响应**：缓存操作很快，不阻塞调研 Agent
