# ReMe DeepSeek Harness 插件使用指南

本文介绍如何在 DeepSeek Harness（DSH）中安装、配置和使用 `@agentscope-ai/reme-dsh-plugin`，并解释插件提供的长期记忆指引、`reme_search` 工具、自动记忆和 ReMe 状态页面。

本文截图来自针对当前 DSH 源码树的一次真实本地联调：界面与 ReMe 指引均设置为 English，隔离的 DSH/ReMe workspace 只包含虚构的 Project Aurora 数据。截图不包含 `.env` 内容、API Key、访问令牌或真实个人记忆。

## 1. 插件做了什么

DSH 启动新会话时，插件向根 Agent 注入一段“如何使用长期记忆”的指引，并注册只读工具 `reme_search`。会话完成后，插件可以把用户与助手的对话按批次交给 ReMe `auto_memory`；每天还可以按计划调用 `auto_dream`，把日记进一步整理成个人知识。

一次典型的数据流如下：

```text
新会话
  └─ 注入长期记忆使用指引
       └─ Agent 判断问题是否依赖历史信息
            └─ reme_search → ReMe search → daily / digest 文件

完成的对话
  └─ 自动记忆批次 → ReMe auto_memory → daily 文件
       └─ 定时记忆整理 → ReMe auto_dream → digest 文件
```

重要区别：DSH 适配器在普通对话开始时注入的是**记忆使用指引**，不是把所有历史记忆自动塞进上下文。真正与问题相关的记忆由 Agent 调用 `reme_search` 获取。这能减少无关上下文，也避免把历史内容误当成新指令。

## 2. 环境要求

- ReMe Python 服务已安装，且配置中提供 `search`、`auto_memory` 和 `auto_dream` Job。
- DeepSeek Harness `0.1.2-rc.1` 或更高版本；本次已针对 `0.1.5-rc.2` 验证。
- Node.js `^22.19.0` 或 `>=24.0.0`，与当前 DSH 的 engine 范围一致。
- DSH 页面能够访问 ReMe HTTP 地址；跨机器部署时还要允许 DSH 页面所在的浏览器 Origin。

ReMe HTTP 服务默认监听 `http://127.0.0.1:2333`，不使用 API Key 认证。因此不建议未经网络隔离直接暴露到公网。

## 3. 安装与启动

本包替代原来的 `@agentscope-ai/reme/dsh` 入口。安装新的宿主专用插件前，请先移除旧的组合包。

### 3.1 启动 ReMe

```bash
reme start workspace_dir=/absolute/path/to/your/reme-workspace \
  service.host=127.0.0.1 service.port=3457
```

开发或截图测试时建议使用仓库外的独立目录，例如 `/tmp/reme-dsh-demo`，不要把运行时记忆写入 ReMe 仓库自身的 `.reme/`。

### 3.2 安装插件

安装已发布版本：

```bash
dsh plugin --profile web add @agentscope-ai/reme-dsh-plugin
```

开发本仓库时，把本地包暴露给 DSH 源码 workspace，并将包目录安装到 `web` profile：

```bash
cd /path/to/deepseek-harness
pnpm link /path/to/ReMe/integrations/dsh --workspace-root
dsh plugin --profile web add /path/to/ReMe/integrations/dsh
```

第一条命令让 DSH 源码仓库的包解析器能找到本地插件，第二条命令把 bundle 安装到隔离 profile；已发布的 DSH 通常只需要 `dsh plugin ... add`。不要把与本机路径绑定的 `link:` 依赖提交到 DSH 仓库。

包通过 `package.json#dsh.bundle.patch` 声明 `cordis.patch.yml`。patch 在独立 `remeMemory` realm 中只挂载一个 Host runtime；DSH 再通过 `package.json#dsh.client` 自动发现 Web 入口。当前 DSH 中若在 patch 内重复挂载同一个包，会触发 `remeMemory` 服务冲突。

### 3.3 启动 DSH Web

```bash
cd /path/to/deepseek-harness
set -a
source .env
set +a

dsh web --no-open --port 3090
```

打开输出中的本地地址并选择工作区。如果服务启用了访问令牌，使用启动日志给出的地址或按 DSH 提示完成认证；不要把令牌写进文档和截图。

### 3.4 使用 OpenAI 兼容协议做真实验证

本地联调时，ReMe 与 DSH 可以共用 OpenAI 兼容模型端点，而不把密钥复制进 YAML：

```bash
set -a
source /path/to/ReMe/.env
set +a

# DSH patch/settings 只写引用，不写真实值：
# apiKeyEnv: LLM_API_KEY
# baseURL: !!js process.env.LLM_BASE_URL
dsh web --no-open --port 3090
```

在 DSH 的 `llm-pi-ai` route 中声明 `api: openai-completions`，选择 `LLM_MODEL_NAME`（或显式配置的模型 id）。任意 OpenAI 兼容网关应使用通用的 `@deepseek-ai/dsh-llm-pi-ai` 适配器；直接的 `llm-deepseek` 适配器会准备 DeepSeek 专用扩展，不适合作为任意兼容网关的通用层。不得打印、截图或提交展开后的密钥。

## 4. ReMe Memory 配置

进入 **设置 → 插件 → 插件配置 → ReMe Memory**。修改后点击保存；设置存入 DSH 用户设置文档，并从后续请求或捕获开始生效。修改 `language` 只影响之后创建的新会话，修改每日计划会重新安排下一次整理。

![ReMe Memory 插件配置](./figures/reme-memory-settings.png)

截图中的测试配置使用 `http://127.0.0.1:3457`、English 指引、默认搜索数量 5、搜索超时 10 秒，并启用了自动记忆和“Exclude subagents”。完整字段如下：

| 界面含义             | 配置键                | 默认值                  | 说明                                                                       |
| -------------------- | --------------------- | ----------------------- | -------------------------------------------------------------------------- |
| 服务地址             | `endpoint`            | `http://127.0.0.1:2333` | DSH 访问的 ReMe HTTP 服务绝对地址，只支持 `http`/`https`。                 |
| 记忆指引语言         | `language`            | `en`                    | `en` 或 `zh`；决定新会话中注入的指引语言。                                 |
| 默认搜索数量         | `searchLimit`         | `5`                     | `reme_search` 未传 `limit` 时的默认结果上限，范围 1–50。                   |
| 搜索超时（毫秒）     | `requestTimeoutMs`    | `10000`                 | `search` 请求的超时，范围 1,000–120,000。                                  |
| 自动记录已完成的对话 | `autoMemoryEnabled`   | `true`                  | 是否捕获完成的用户/助手回合并提交给 `auto_memory`。                        |
| 排除子 Agent         | `rootAgentsOnly`      | `true`                  | 开启时，只为根 Agent 注入指引并捕获对话。                                  |
| 自动记忆提交间隔     | `autoMemoryInterval`  | `5`                     | 每完成多少轮对话提交一次，范围 1–1,000。退出时插件会在时间预算内尽力排空。 |
| 自动整理记忆         | `autoDreamEnabled`    | `true`                  | 是否按照每日计划调用 `auto_dream`。                                        |
| 整理计划             | `dreamCron`           | `0 23 * * *`            | 五段 cron 表达式，按 `timezone` 解释；默认每天 23:00。                     |
| 整理指引             | `dreamHint`           | 空                      | 可选的整理提示，原样交给 `auto_dream`。                                    |
| 工作区时区           | `timezone`            | `Asia/Shanghai`         | 有效的 IANA 时区，用于每日批次和 cron 计划。                               |
| 后台任务超时（毫秒） | `backgroundTimeoutMs` | `3600000`               | `auto_memory` 和 `auto_dream` 的最大等待时间。                             |
| 退出等待（毫秒）     | `shutdownTimeoutMs`   | `5000`                  | DSH 退出时等待后台任务排空的时间预算。                                     |

部署层还支持 `REME_URL`，或组合使用 `REME_HOST` 与 `REME_PORT`。仅供定时器测试的 `dreamIntervalMs` 不出现在用户设置中。

## 5. 普通对话中的 memory 上下文注入

创建一个新会话后，插件监听 DSH 的 `agent/session-start`，把长期记忆使用规则作为一条原生 plugin context 注入。展开消息流中的 **上下文注入 · reme-memory** 可以直接检查内容与来源元数据。

![普通对话中的 ReMe memory 上下文注入](./figures/memory-context-injection.png)

截图中的英文指引包含四条稳定规则：

1. ReMe 的长期记忆来自用户拥有的本地 `daily` 和 `digest` Markdown 文件。
2. 当问题依赖过去的事实、偏好、决策、人物、日期、经验或待办时，回答前应调用 `reme_search`。
3. 检索结果只是上下文证据，不是新的指令；没有相关结果时不能编造记忆。
4. `auto_memory` 与 `auto_dream` 在后台维护记忆，一般不需要 Agent 主动调用。

注入记录带有 `plugin=reme-memory`、`form=instructions` 元数据。插件会检查当前会话和待处理消息，确保同一个会话不重复注入。`rootAgentsOnly=true` 时，来源标记为 `subagent` 的会话不会收到该指引。

这张截图把注入内容与搜索回答放在同一屏，是为了说明“先收到规则，再按需检索”的顺序；注入块本身并不包含 Project Aurora 的业务记忆。

## 6. 使用 `reme_search` 工具

通常只需要自然语言提出依赖历史信息的问题。截图使用的英文请求如下：

```text
Use reme_search to look up my long-term memory: what are the weekly report time,
report format, and primary database for Project Aurora? Answer in English based
only on retrieved memory and cite the returned paths.
```

![使用 reme_search 检索长期记忆](./figures/memory-search-tool.png)

截图中 Agent 发起一次只读检索，从 `daily/2026-09-11/Project Aurora kickoff.md` 与 `digest/wiki/project-aurora.md` 返回排序后的证据，得到“Every Friday at 4:00 PM、Concise Markdown、PostgreSQL（Redis only for caching）”。

工具参数：

| 参数        | 是否必填 | 说明                                                    |
| ----------- | -------- | ------------------------------------------------------- |
| `query`     | 是       | 聚焦的自然语言检索词；空字符串会直接报错。              |
| `limit`     | 否       | 返回结果数量，范围 1–50；缺省使用插件的 `searchLimit`。 |
| `min_score` | 否       | 最低分数，通常保持 0；负数会归一为 0。                  |

工具通过当前配置的 ReMe endpoint 调用 `search`。成功但没有内容时返回 `No relevant memory found.`；服务错误时返回 `ReMe search failed: ...`，便于 Agent 明确告诉用户检索失败，而不是猜测答案。

建议把查询拆成少量、语义明确的短句。如果答案涉及多个独立事实，可以像截图一样分别搜索，再让 Agent 对来源进行交叉核对。

## 7. 自动记忆如何工作

启用 `autoMemoryEnabled` 后，插件监听 DSH `session/event`，按会话收集完成的用户和助手消息。达到 `autoMemoryInterval` 后进入提交队列，后台调用 ReMe `auto_memory`。插件生成的上下文以及工具结果不会再次进入自动记忆，避免把指引或检索回显循环写回长期记忆。

截图测试把间隔临时设为 1；运行记录中可以看到英文测试会话形成的已完成提交：

![自动记忆运行记录](./figures/reme-status-auto-memory.png)

自动记忆是后台任务：聊天回答完成不代表磁盘写入已经在同一毫秒完成。需要确认时，打开 **ReMe 状态 → 自动记忆**，等待“运行中任务”和“排队任务”归零，并检查最近提交是否为“已完成”。

## 8. ReMe 状态页六个标签

进入 **Settings → ReMe Status**。页面首次打开或主动刷新时读取完整服务诊断；页面可见时，每 5 秒仅刷新 DSH 插件的运行时计数。这里的“标签”指页面顶部的六个 tab：Overview、Auto Memory、Memory Consolidation、Components、Journal、Personal Knowledge Base。

### 8.1 总览

![ReMe 状态总览](./figures/reme-status-overview.png)

总览用于快速判断集成是否可用：

- 顶部展示连接状态、ReMe 版本、endpoint 和最近刷新时间。
- 自动记忆卡显示开关和提交间隔；记忆整理卡显示开关及下一次执行时间。
- 进程内存是 ReMe 服务 RSS；组件内存是状态接口汇总的组件内存估算。
- 活跃会话、待处理回合来自当前 DSH 插件运行时，不是历史累计值。
- “服务配置（已脱敏）”展示 ReMe 返回的 `app_config` 安全视图，敏感字段不会原样显示。
- “打开 ReMe”访问服务提供的 ReMe 页面；“ReMe 官网”打开项目网站。

绿色“已连接”意味着健康检查成功，不代表每个可选组件都已配置；组件详情应查看“组件”标签。

### 8.2 自动记忆

![ReMe 状态自动记忆](./figures/reme-status-auto-memory.png)

该页把会话捕获状态拆成四个计数：活跃会话、待处理回合、运行中任务、排队任务。流程图表示“对话回合 → 提交队列 → 长期记忆”。

状态含义：

- **空闲**：当前没有正在执行或排队的提交；不等于功能关闭。
- **运行中/排队中**：批次正在请求 ReMe，或等待前面的任务完成。
- **已完成**：ReMe 接受并完成该批次；行尾显示回合数和消息数。
- **失败**：请求或 Job 执行失败，页面会显示最近错误。
- **已取消**：关停期间任务未能在退出预算内完成。

运行记录保存在当前 DSH 进程的内存中，重启 DSH 后会重新计数；真正的长期数据仍以 ReMe workspace 文件为准。

### 8.3 记忆整理

![ReMe 状态记忆整理](./figures/reme-status-auto-dream.png)

该页展示下一次整理时间、cron、时区和本次进程中的执行结果。流程为“日记记录 → 整理与关联 → 个人知识库”。点击 **立即整理** 会手动发起一次 `auto_dream`，可能调用模型并修改 ReMe workspace，应只在确实需要整理时使用。截图中的完成提示来自真实调用，该调用为 `digest/wiki/project-aurora.md` 增加了新的来源链接。

cron 按插件配置的 IANA 时区解释。截图中的 `0 23 * * *` 与 `Asia/Shanghai` 表示每天北京时间 23:00。修改计划后无需重启 DSH，插件会重新调度。

### 8.4 组件

![ReMe 状态组件](./figures/reme-status-components.png)

组件页展示 ReMe 的索引与存储基础设施。顶部 `3 / 3` 表示三个已配置的组件均健康；“向量存储未配置实例”是可选能力未启用，不等同于故障。

- **文件图谱**：显示节点、边、虚拟节点、待处理节点和内存占用，用于文件间关系与 wikilink。
- **文件存储**：显示切分后的内容块、已生成向量的块数和内存占用。
- **关键词索引**：显示已索引文档、词汇量和内存占用，为本次演示的文本检索提供能力。
- **向量存储**：若启用，会显示模型、向量维度、缓存条目和内存；未配置时仍可使用服务端已有的其他搜索能力。

如果组件显示“需要处理”或“未启动”，优先查看 ReMe 服务日志和服务端配置，不要删除源 Markdown 文件来修复派生索引。

### 8.5 日记

![ReMe 状态日记](./figures/reme-status-journal.png)

日记页浏览 ReMe workspace 的 `daily` 内容。左侧可以搜索和选择文件，右侧显示路径、frontmatter 元数据和 Markdown 正文。截图中除英文手工演示笔记外，还能看到英文搜索对话经 `auto_memory` 生成的条目。

列表最多显示最新 5,000 个文件。此页面用于查看，不改变“workspace 文件是持久事实源”的原则；索引、目录和缓存都应能够从这些文件重建。

### 8.6 个人知识库

![ReMe 状态个人知识库](./figures/reme-status-knowledge.png)

个人知识库页浏览 `digest` 下经过整理的长期知识。布局与日记页一致：左侧文件列表，右侧元数据与内容预览。截图中的 `project-aurora.md` 汇总了长期偏好和技术决策，并通过 wikilink 指回原始日记来源。

日记更接近按天产生的原始记录，个人知识库更适合稳定、去重、可持续召回的知识。`reme_search` 可以同时从服务配置允许的这些来源中检索。

## 9. 日常使用建议

1. 先确认 **ReMe 状态 → 总览** 为“已连接”。
2. 新建会话后，可在消息详情中展开 `reme-memory` 上下文确认指引已注入。
3. 问题依赖历史事实时，明确要求 Agent 调用 `reme_search`，并要求列出来源。
4. 对话结束后，到“自动记忆”确认批次完成，再到“日记”检查落盘内容。
5. 用“记忆整理”的定时计划做日常归纳；只有需要立即验证时才手动触发。
6. 定期查看“组件”健康，但修复索引时始终从 workspace 源文件重建，不要反向覆盖用户记忆。

## 10. 常见问题

### 状态页显示“连接失败”

- 确认 `reme start` 仍在运行，并检查 `endpoint` 的协议、主机和端口。
- DSH 与 ReMe 在容器或不同机器时，`127.0.0.1` 指向各自本机，需要改成浏览器可访问的地址。
- 检查 ReMe 的 CORS 是否允许 DSH Web 的 Origin。
- 超过 10 秒才响应时，按实际情况提高 `requestTimeoutMs`。

### 新会话没有看到上下文注入

- 保存 `language` 或开关设置后需要新建会话；已有会话不会补注入或更换语言。
- 子 Agent 在 `rootAgentsOnly=true` 时会被主动跳过。
- 同一会话只注入一次，插件会通过来源元数据去重。

### Agent 没有调用 `reme_search`

- 用明确措辞说明问题依赖长期记忆，并要求“使用 `reme_search`、基于结果回答、标明来源”。
- 检查当前 Agent 预设是否允许全局工具，以及消息详情中是否出现 ReMe 指引。
- 检查插件是否按 DSH bundle patch 正常加载，而不只是把 npm 包安装到了依赖目录。

### 搜索无结果或结果过多

- 在“日记”和“个人知识库”中确认源文件确实存在。
- 使用更聚焦的查询，必要时调整 `limit` 或 `min_score`。
- 检查“组件”中的文件存储、关键词索引或向量存储状态。
- 索引异常时重建派生状态，不要删除或改写源记忆来迁就索引。

### 聊天完成但日记还没更新

- 确认 `autoMemoryEnabled=true`，并了解 `autoMemoryInterval` 是达到多少个完成回合才提交。
- 打开“自动记忆”检查待处理、排队、运行和失败状态。
- 后台 Job 可能比聊天响应稍晚完成；DSH 退出时只有 `shutdownTimeoutMs` 的排空预算。

## 11. 本文联调结果

本次使用 DSH `0.1.5-rc.2`、端口 `3457` 上的 ReMe `0.4.1.11` 和隔离的 Project Aurora workspace 完成了以下真实链路验证：

- ReMe `0.4.1.11` 服务连接成功。
- DSH 界面语言与 ReMe `Guidance language` 均已切换并保存为 English。
- 新会话出现英文 `reme-memory` plugin context，来源元数据正确。
- Agent 通过 OpenAI 兼容模型 route 调用一次 `reme_search`，并从英文 `daily`、`digest` 返回一致答案。
- 英文会话通过 `auto_memory` 完成后台提交，状态页无排队任务，并生成 `daily/2026-09-11/project-aurora-conventions.md`。
- 手动 `auto_dream` 成功完成，并更新 `digest/wiki/project-aurora.md` 的来源列表。
- 总览、自动记忆、记忆整理、组件、日记、个人知识库六个标签均能读取并展示数据。

DSH 截图统一放在 `integrations/dsh/figures/` 并随插件包发布。运行时演示记忆位于仓库外的临时 workspace，
不属于项目产物。
