## 任务基本信息 - **任务**:方案A:同一聊天框多话题时避免上下文污染(新话题禁用 `dialog_context`) - **项目**:`backman-camel`(FastAPI Text2SQL API) - **范围**:后端接口 `/g3sb/api/nl/chat`、`/g3sb/api/nl/chat/stream` 的会话上文注入策略 ## 改动说明 - **新增**:`backend/utils/dialog_context.py` 增加 `is_likely_follow_up(user_text)`,用于轻量判断是否为续问/沿用口径。 - **调整**:`api_server.py` `_load_session_text2sql_context(request, user_text)` 在构造上文时: - **续问**:注入最近 2 轮会话摘要 - **新话题**:不注入历史摘要(`max_pairs=0`) - **目的**:减少多话题情况下历史 SQL/条件回流导致的串话与错误 SQL。 ## 影响与风险 - **破坏性变更**:否(对外 API 不变) - **风险等级**:中 - 可能将少量“隐式续问”误判为新话题,导致指代消解能力下降 - 但能显著降低跨话题上下文污染导致的 SQL 错误 - **回滚**:回退本次改动即可恢复旧策略(或将 `max_pairs` 恢复为默认值 8) ## 测试与验证 - 建议手工验证: - 同一 session:先做话题A数据查询,再提一个完全不同话题B(无“再/按上面”等续问词),应不再引用 A 的表/过滤条件。 - 同一 session:首轮查询后,第二轮使用“再/按上面/沿用口径”等续问词,应仍能续用上轮口径生成 SQL。 ## 后续事项 - 若误判率偏高,可迭代 `is_likely_follow_up` 规则(补充关键词/短语),或升级为轻量 LLM 判别器(方案B)。