为什么要问题重写
你有没有遇到过这种情况:用户问了一个很正常的问题,RAG系统返回的结果却牛头不对马嘴?
比如在一个在线教育的客服系统里,用户先问了"Python入门课多少钱",助手回答了价格,然后用户接着问"那它有没有证书"——这个"它"指的是Python入门课,人一看就懂。但向量检索拿到的是"那它有没有证书"这几个字,去知识库里一搜,大概率匹配到的是"证书查询流程"或者"考试认证说明"之类的内容,完全跑偏了。
问题出在哪?检索系统没有记忆,也不会联系上下文。
大模型能看到整个对话历史,所以它知道"它"是什么。但检索模块只拿到当前这一句话,它不知道前面聊了什么,自然也就无法理解指代关系。
这就是问题改写要解决的核心矛盾:把用户那句"人能听懂但机器听不懂"的话,翻译成检索系统能精准匹配的查询语句。
不改写会怎样?五个典型翻车场景
在动手写代码之前,先看看不做问题改写到底会出什么问题。这些场景在实际项目中非常高频。
场景一:代词满天飞
多轮对话中最常见的问题。用户说"这个怎么退款""它支持分期吗""那个课程还在吗",这些代词对检索来说就是噪音。
| 用户原话 | 检索实际拿到的 | 期望检索的 |
|---|---|---|
| 那它有没有证书 | 那它有没有证书 | Python入门课是否提供结业证书 |
| 这个怎么退款 | 这个怎么退款 | Java实战营课程退款流程 |
| 上面说的那个能试听吗 | 上面说的那个能试听吗 | 数据分析课程是否支持免费试听 |
场景二:省略太多信息
中文对话习惯省略主语和宾语。用户问完"Spring Boot和Spring Cloud有什么区别"之后,接着问"哪个更适合微服务"——省略了主语,检索系统不知道在比较什么。
场景三:口语和知识库的表达鸿沟
用户说"服务挂了咋整",知识库里写的是"服务异常排查与恢复流程"。语义上是一回事,但词汇完全不搭边,向量相似度可能很低。
场景四:一句话塞了好几个问题
"Redis的持久化方式有哪些,RDB和AOF的区别是什么,生产环境推荐用哪个?"——这一句话其实包含三个独立问题,如果不拆开,检索只能碰运气匹配到其中一个。
场景五:问题太短太模糊
用户就打了两个字"缓存"或者"怎么部署",信息量太少,向量检索很难找到精准的匹配。
问题改写的本质:在用户提问和向量检索之间加一个"翻译层",把人话翻译成检索能听懂的话。
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的详细文档
- 讲解视频:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
