Implement follow-up detection in dialog context to prevent context pollution in multi-topic conversations. Introduce is_likely_follow_up function to determine when to inject session history based on user input. Adjust _load_session_text2sql_context to conditionally include context based on follow-up status, enhancing SQL generation accuracy. Update relevant API endpoints to pass user text for improved context handling.

This commit is contained in:
陈辅元
2026-04-15 17:33:07 +08:00
parent a55fd18915
commit 85ad31348e
8 changed files with 103 additions and 3 deletions
+41
View File
@@ -42,6 +42,47 @@
---
# Impact Analysis Report — 方案A:新话题禁用 dialog_context(防上下文污染)
## 1. 改动概览
- **背景与目标**:同一会话内出现多个不同话题时,历史摘要(含上轮 SQL)注入 Text2SQL 易造成上下文污染,导致选表/条件串话。本次引入“续问判定”规则:仅在疑似续问时注入少量上文;新话题默认不注入上文。
- **涉及模块**:`api_server.py`、`backend/utils/dialog_context.py`。
- **改动类型**:缺陷修复 / 行为优化(仅影响带 `session_id` 且存在历史消息的请求)。
## 2. 方法级改动分析
| 位置 | 变更 |
|------|------|
| `backend/utils/dialog_context.py` `is_likely_follow_up` | 新增:基于用户文本的轻量续问判定(关键字/短句规则),用于决定是否需要注入上文。 |
| `api_server.py` `_load_session_text2sql_context` | 调整:新增 `user_text` 入参;根据 `is_likely_follow_up(user_text)` 选择 `max_pairs=2` 或 `0`,并据此构造 `dialog_context`。 |
| `api_server.py` 两个入口 | 调整:`/g3sb/api/nl/chat` 与 `/g3sb/api/nl/chat/stream` 调用 `_load_session_text2sql_context(request, text)`。 |
## 3. 调用方与影响范围分析
- **调用方**:`/g3sb/api/nl/chat`、`/g3sb/api/nl/chat/stream`(请求带 `session_id` 且历史不为空时生效)。
- **行为变化**:
- **新话题**(非续问):`dialog_context` 变为空(不再携带历史摘要),降低串话风险。
- **续问**:仅携带最近 **2** 轮(原默认最多 8 轮),降低旧话题回流概率。
- **破坏性变更**:否(对外 API 入参/出参未变;仅内部上下文组装策略变化)。
## 4. 风险与回滚
- **风险级别**:中(可能把少量“隐式续问”误判为新话题,导致指代消解能力下降;但能显著降低跨话题污染)。
- **回滚**:回退本次提交(或将 `max_pairs` 固定恢复为 8 / 去掉续问判定)。
**回滚方式是否简单**:是。
## 5. 验证与测试
- 建议手工:
- 同一 session:话题A生成 SQL → 话题B(无续问词)应不再引用 A 的表/条件。
- 同一 session:首轮查询 → 次轮“再/按上面/沿用口径”续问,应仍能沿用上轮 SQL 的业务口径。
## 6. 配置变更
- 无。
# Impact Analysis Report — 库探针追问与交付分支(追加)
## 1. 改动概览