# 上下文管理

> PentAGI 如何通过总结每个 agent 链中较早的部分，将长 flows 保持在模型的上下文窗口内，以及用于调整此功能的设置。

长 [flows](https://pentagi.com/zh-cn/docs/glossary/#flow) 会产生超出任何模型承载能力的对话内容。PentAGI 通过**链摘要**将每个 [agent](https://pentagi.com/zh-cn/docs/glossary/#agent) 的链控制在边界内：在每次 agent 回合结束后，较早的部分会被压缩，而最近的部分则保持完整，除非它们超出了大小限制。如果 PentAGI 知道模型的上下文窗口——来自其内置的模型目录，或者来自报告了该信息的自定义端点——且链仍然无法容纳，系统会在调用模型前再次对其进行压缩。Ollama 模型及其他上下文窗口未知的模型不会执行此步骤，因此对于上下文较小的模型，请降低下面的大小设置。

```mermaid
flowchart TD
  accTitle: Chain summarization steps after each agent turn and before each model call
  A[Agent turn finished] --> B[Condense each older section into one summary]
  B --> C[Keep the recent sections within their size limits]
  C --> D[Summarize old question-answer pairs]
  D --> E{Next model call: fits the context window?}
  E -->|Yes| F[Send the chain]
  E -->|No| G[Compact to the window size]
  G --> F
```

## [调优](https://pentagi.com/zh-cn/docs/concepts/context/#tuning)

默认设置适用于大多数模型。Agents 和交互式 [assistant](https://pentagi.com/zh-cn/docs/glossary/#assistant) 拥有独立的设置；assistant 会保留更多的近期历史记录。

| 设置项                                    | Agents                            | Assistant                                   |
| -------------------------------------- | --------------------------------- | ------------------------------------------- |
| 限制近期部分的大小                              | `SUMMARIZER_PRESERVE_LAST=true`   | `ASSISTANT_SUMMARIZER_PRESERVE_LAST=true`   |
| 近期部分的大小限制                              | `SUMMARIZER_LAST_SEC_BYTES=51200` | `ASSISTANT_SUMMARIZER_LAST_SEC_BYTES=76800` |
| 单个 [tool](https://pentagi.com/zh-cn/docs/glossary/#tool) 结果的最大值 | `SUMMARIZER_MAX_BP_BYTES=16384`   | `ASSISTANT_SUMMARIZER_MAX_BP_BYTES=16384`   |
| 保留的问答部分数量                              | `SUMMARIZER_MAX_QA_SECTIONS=10`   | `ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS=7`    |
| 这些部分的大小                                | `SUMMARIZER_MAX_QA_BYTES=65536`   | `ASSISTANT_SUMMARIZER_MAX_QA_BYTES=76800`   |
| 未合并的近期部分                               | `SUMMARIZER_KEEP_QA_SECTIONS=1`   | `ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS=3`   |

使用 `false` 时，近期部分没有自身的大小限制，单一工具结果限制也不适用。

`SUMMARIZER_USE_QA` 用于启用问答策略（默认开启），而 `SUMMARIZER_SUM_MSG_HUMAN_IN_QA` 还会对该策略中您自己的消息进行摘要（默认关闭）。两者仅适用于 agent：**Assistant** 始终使用该策略，且从不摘要您的消息。