---
title: "harness - 会话与心智记忆"
---

会话（Session）保存一次对话的上下文，心智记忆（Memory）则在多次对话之间长期留存关键事实。两者配合，让 Agent 既有“短期记忆”也有“长期记忆”。

### 1、会话提供者（sessionProvider）

`sessionProvider` 是构建引擎的必填项，决定会话如何创建与存储。最简单的是内存实现：

```java
HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
        .sessionProvider(InMemoryAgentSession::of)   // 内存会话（进程级，重启即失）
        .build();
```

获取/使用会话：

```java
AgentSession session = engine.getSession("default");  // 按实例 id 获取

engine.prompt("hello")
        .session(session)            // 不传则为临时会话（不留历史）
        .call();
```

> 需要持久化会话时，实现自定义的 `AgentSessionProvider`，把会话落到文件/数据库即可。会话相关的运行态数据默认落在 `{harnessHome}/sessions/` 下。

### 2、会话窗口与上下文压缩

为控制上下文长度，引擎提供两层机制（详见 [《harness - 配置参考》](/article/1427)）：

* `sessionWindowSize`：新指令携带几条历史消息（默认 8）。
* `compressionThreshold(maxMessages, maxTokens)`：消息条数或内容长度超阈值时，自动压缩历史上下文。

### 3、心智记忆（Memory）

心智记忆让 Agent 把用户偏好、项目规约等关键事实长期保存，并在需要时检索召回。需满足两个条件：`memoryEnabled=true`（默认开启）且已通过 `memoryProvider(...)` 配置记忆方案。

记忆的存取由 `MemorySolution` 和 `MemorySolutionProvider` 定义，MemorySolution 组合了两个能力：

* `MemoryStorer`：物理持久化与 TTL 管理。（有不同的适配，按需选择）
* `MemorySearcher`：语义检索与热记忆提取。（有不同的适配，按需选择）

通过 `memoryProvider(Factory)` 注入，工厂按工作区（`__cwd`）返回对应方案，从而支持多租户/多项目隔离：

```java
HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
        .sessionProvider(InMemoryAgentSession::of)
        .memoryProvider(new MemoryProvider())  // 按工作区构建记忆方案
        .build();
```

内置的 Markdown 方案（零外部依赖）把记忆以 MD 文件存储，Store 与 Search 共享同一份内存数据，写入即更新索引：

```java
public class MemoryProvider implements MemorySolutionProvider {
    private Map<String, MemorySolution> cached = new ConcurrentHashMap<>();
    private boolean memoryIsolation;

    public MemoryProvider(boolean memoryIsolation) {
        this.memoryIsolation = memoryIsolation;
    }

    @Override
    public MemorySolution get(String __cwd) {
        if (memoryIsolation== false) { //
            __cwd = System.getProperty("user.home");
        }


        return cached.computeIfAbsent(__cwd, k ->
                new MemorySolutionMdImpl(Paths.get(k, ".demo/memory/")));
    }
}
```

> 除 MD 外，记忆模块还提供 Redis、Lucene、Repository（向量库）等存储/检索实现，可按需组合自己的 `MemorySolution`。

### 4、记忆能力

配置记忆方案后，Agent 可自主进行：提取（写入事实）、召回（按 key 精确取）、语义检索、认知整合（碎片升维合并）与修剪（删除过时认知）。记忆条目带重要度评分，便于按价值排序与管理。
