## 1. 引擎改动（不改架构）

- 条件节点透传

条件节点在返回 branch 的同时，把整份 input_data 写入 output，分支内节点可继续使用 memory、user_input、right、user_id 等。

- Cache 写入支持 memory_value

当 cache 节点 operation=set 且输入里带有 memory_value（dict）时，直接用它作为要写入的值，不再走模板求值；仍会对其中的 conversation_history 做相邻去重并截断到最近 8 条。

- 去重与截断统一

对 conversation_history 的相邻去重和「保留最近 8 条」统一放在「存储前」一步，无论 value 来自模板还是 memory_value。

---

## 2. 知你客服 5 号设计

- 记忆结构

在 4 号基础上增加 conversation_summary（字符串）：

{ conversation_summary, conversation_history, user_profile, context }。

cache-query 的 default_value 已包含 conversation_summary: ""。

- 主 LLM 输入

主 LLM 同时看「对话摘要」和「最近几轮」：

对话摘要（之前聊过的要点）：{{memory.conversation_summary}}\n最近几轮：{{memory.conversation_history}}。

- 何时做摘要

用 code 节点 算 history_count = len(memory.conversation_history)，条件节点 判断 {history_count} >= 4：

- ≥4 条（true）：走摘要分支

- 透传 + 摘要 LLM（deepseek-chat，max_tokens=150）把当前历史压成一段 ≤100 字摘要；

- merge 合并「透传数据」与「摘要文本」；

- code 拼出 memory_value：conversation_summary = 新摘要，conversation_history = 仅当前 1 轮（当前用户句 + 当前助手句）；

- cache-update-summary 用 memory_value 写入（不写 value 模板）。

- <4 条（false）：走追加分支

- transform 拼好要追加的数据；

- cache-update-append 用原有 value 模板追加一轮，并保留 conversation_summary（沿用已有或空）。

- 无需新节点类型

全部用现有节点：start、cache、transform、llm、json、condition、code、merge、end。

---

## 3. 文件与使用

- 脚本：backend/scripts/create_zhini_customer_service_v5.py

- 导出 JSON：知你客服5号-导入用.json

- 已通过 API 创建：知你客服5号，ID: 20e76481-5186-46f7-bd85-f0719151b785

使用方式：

- 只生成 JSON：python backend/scripts/create_zhini_customer_service_v5.py

- 生成并导入 8037：python backend/scripts/create_zhini_customer_service_v5.py --import

- 更新已有 5 号：python backend/scripts/create_zhini_customer_service_v5.py --update

在前端 Agent 管理 里发布「知你客服5号」后即可测试。长对话时（例如先聊几轮再问「刚才我说了什么」），5 号会通过「摘要 + 最近几轮」保留更多上下文，记忆能力优于只保留最近 8 条的 4 号。