在# LangChain4j系列:Advanced RAG 核心组件源码分析与实践 文章中介绍了Advanced RAG 增强器组件,本文开始对查询转换器 QueryTransformer 的优化方案进行一一详细解密并实战。
更详细的内容大家参考如下:
查询转换 ??
查询转换将用户输入查询转换为一个或者多个查询,目标是通过修改或扩展原始 Query
来提高检索质量。让大模型更了解用户的真实意图。
目前已知的一些查询转换的方式和技术;
- 查询压缩 (Query compression)
- 查询扩展 (Query expansion)
- 查询重写 (Query re-writing)
- 后退提示 (Step-back prompting)
- 假设文档嵌入 (HyDE)
本文将详细介绍每种查询转换技术的技术细节以及在实践中如何使用它们。
查询压缩
在LangChain4j框架中查询压缩的实现方式基于:大模型 + 提示词。
text
"""
Read and understand the conversation between the User and the AI. \
Then, analyze the new query from the User. \
Identify all relevant details, terms, and context from both the conversation and the new query. \
Reformulate this query into a clear, concise, and self-contained format suitable for information retrieval.
Conversation:
{{chatMemory}}
User query: {{query}}
It is very important that you provide only reformulated query and nothing else! \
Do not prepend a query with anything!"""
意思就是:从用户会话的上下文中识别与用户查询相关的内容,将用户的查询改写为清晰、准确、自描述的新的查询。
举个例子:
text
User: Tell me about John Doe
AI: John Doe was a ...
User: Where did he live?
Where did he live?如果不结合历史会话或者说没有查询压缩,那么大模型无法确认 he 是谁。所以经过压缩查询,Where did he live?将会转换为 Where did John Doe live?
查询扩展
学习中,逐步完善
查询重写
学习中,逐步完善
Step-Back Prompting
学习中,逐步完善
HyDE
学习中,逐步完善