在 LangGraph 中处理多轮对话上下文超出 LLM 窗口(Context Window)的问题,通常有两种核心策略:滑动窗口截断(Sliding Window / Truncation) 和 对话总结(Summarization)。 在 LangGraph 的设计中,因为状态(State)通常使用 这个 reducer,它默认是追加消息的。因此,要管理上下文,我们需要利用 LangGraph 的消息删除机制或动态过滤机制。 以下是具体的架构设计和代码实现方案: --- 方案一:动态截断(只保留最近 N 条消息或 Token 限制) 如果你不需要长期的历史记忆,只需要最近几轮的上下文,最简单的做法是在传给 LLM 之前对消息列表进行截断。 设计思路: 不需要修改全局的 State(不删除原本的记录,如果需要保存完整日志的话),仅仅在调用 LLM 之前,使用 LangChain 提供的 工具对传给模型的 Message 列表进行修剪。 代码示例: --- 方案二:总结与清理混合机制(Hybrid Summarization)—— 推荐做法 截断会导致丢失早期的关键信息。更高级的...