知你客服 6 号（检索增强记忆）已按「检索 + 最近几轮」混合方案做完，并完成引擎扩展与导入。摘要如下。

---

## 1. 引擎新增/改动

### 新增 embedding 节点

- 类型：embedding

- 作用：调用 OpenAI 兼容的 Embedding API（默认 DeepSeek），把文本变成向量。

- 输入：从 text / content / query / user_input 中取第一个非空作为待向量化文本。

- 输出：{ embedding: number[], text: string }

- 配置：provider（默认 deepseek）、model（默认 deepseek-embedding）

### vector_db 节点：按 user 持久化

- 当 collection = user_memory 且输入里带 user_id 时：

- 从 Redis 读写：key = vector_memory:{user_id}，TTL 7 天。

- search：先从 Redis 拉取该 user 的向量列表再算相似度、取 top_k。

- upsert：先加载该 user 列表，插入/更新后再写回 Redis。

### get_node_input：补充 user_id

- 若某节点输入里没有 user_id，会从 start 节点（执行入参）里补上，供按 user 的向量检索/写入使用。

---

## 2. 知你客服 6 号流程（检索 + 最近几轮）

1. start → cache-query → transform-merge

与 5 号一致，拿到当前用户输入、记忆（含 conversation_history、user_profile）、user_id。

1. 检索分支

- embedding-query：对当前 user_input 做向量化。

- merge-retrieve：合并「merge 的完整输出」与「embedding 结果」。

- transform-prepare-search：拼出 embedding、user_id、memory、user_input 等，供检索和后续用。

- vector-search：collection=user_memory，top_k=5，用 Redis 里该 user 的向量做相似度检索。

- merge-context：合并「prepare-search 输出」与「检索结果列表」。

- code-build-context：

- 检索结果 → 拼成「相关历史（检索）」字符串。

- memory.conversation_history 取最近 4 条 → 拼成「最近几轮」字符串。

- 输出：user_input、memory.user_profile、memory.relevant_from_retrieval、memory.recent_turns。

1. llm-unified

使用上面构造的「相关历史」+「最近几轮」+ 用户信息生成回复（格式同 5 号，含 intent、reply、user_profile）。

1. 解析与提取

json 解析 → transform-extract-reply-and-profile 得到 right（回复）、user_profile_update。

1. 写入向量库（每轮一次）

- code-build-turn-for-vector：用当前 query + right 拼成本轮文本（如「用户：xxx\n助手：yyy」），并生成 id、带出 user_id（依赖引擎注入）。

- embedding-turn：对本轮文本做向量化。

- merge-for-upsert → transform-for-vector-upsert：拼出 embedding、text、user_id、id。

- vector-upsert：collection=user_memory，按 user_id 写入 Redis，供之后检索。

1. 记忆与输出

与 5 号相同：transform-cache-input → code-add-count → condition-need-summary → 摘要分支 / 追加分支 → cache-update-* → transform-output-format → end。