
使用NestJS和Prisma构建REST API:身份验证
记于2024年8月31日,深夜
今天,将继续翻译、解读、分享“从预检索到生成的15种高级RAG技术”中的第二篇,检索中的3种RAG高级技巧。
预检索即检索前的5种RAG高级技巧,可以阅读历史文章:从预检索到生成的15种高级RAG技术(篇一)
搜索系统在特定格式呈现搜索查询时通常能够最佳运行。LLMs是一种强大的工具,可用于为特定搜索系统定制或优化用户搜索查询。为了说明这一点,让我们看两个例子:优化简单搜索查询和对话系统的查询。
假设用户想要搜索来自example-news-site.com有关比尔·盖茨或史蒂夫·乔布斯的所有新闻文章。他们可能会在Google中输入类似以下内容:次优的Google搜索查询:关于比尔·盖茨或史蒂夫·乔布斯的文章来自example-news-siteLLMs可以被用来优化这个搜索查询内容,专门针对谷歌,利用谷歌提供的一些高级搜索功能:最佳谷歌搜索查询:“比尔·盖茨” OR “史蒂夫·乔布斯” -site:example-news-site.com这种方法适用于简单查询,但对于对话系统,我们需要提升一下水平。
上述简单搜索查询优化可以被视为一种增强,让我们发现,在对话系统中使用LLMs来优化搜索查询对于RAG至关重要。对于一个只能进行单轮交互的简单问答机器人,用户的问题可以作为搜索查询,以检索信息来增强LLM的知识。但在对话系统中情况会复杂一些。看下面的对话为例:顾客:“你们的定期存单利率是多少?”助手:“我们的利率是XYZ。”顾客:“哪张信用卡适合旅行?”助手:“XYZ信用卡因为ABC原因适合旅行。”顾客:“告诉我更多关于那张信用卡的利率。”为了回答用户的最后一个问题,很可能需要进行语义搜索,以检索关于特定XYZ旅行信用卡的信息。那么,搜索查询应该是什么?仅仅使用最后一条用户消息并不够具体,因为金融机构很可能有多种产生利息的产品。在这种情况下,语义搜索可能会产生大量潜在无关信息,这可能会淹没LLM上下文窗口中的真正相关信息。那么,将整个对话文本作为语义搜索查询呢?这可能会产生更好的结果,但它们仍然可能包含关于定期存单的信息,这与用户在对话中提出的最新问题无关。到目前为止我们发现的最佳技术是使用LLM生成给定对话作为输入的最佳搜索查询。对于上面的对话,提示如下:
const messages = [...]
const systemPrompt = `您正在检查一个顾客和Example bank聊天机器人之间的对话。查看Example bank的政策、产品或服务的文档对于聊天机器人回应顾客是必要的。请构建一个搜索查询,该查询将被用于检索相关文档,以便回应用户。`
let optimizedSearchQuery = await this.textCompletionEngine.complete(
[
{ role: ‘system’, content: systemPrompt },
{ role: ‘user’, content: stringifyChatConversation(messages) }
],
‘gpt-4’,
{
temperature: 0,
maxTokens: 100,
},
);
这种技术的一个变体是查询扩展,LLM生成多个子搜索查询。这种变体在具有混合检索系统的RAG系统中特别有用,该系统将来自具有不同结构的多个数据存储库的搜索结果结合在一起(例如,SQL数据库+单独的向量数据库)。其他提示工程技术,如后退提示和HyDE(在下一节中讨论),也可以与这种方法结合使用。
在信息检索中,查询-文档不对称指的是用户提出的查询与文档库中实际文档之间的语义差异。为了解决这一问题并提高检索结果的语义相似性,可以应用一种称为假设性文档嵌入(HyDE)的技术。以下是对这项技术的详细介绍:
通过使用HyDE技术,可以改善信息检索系统的性能,提高检索结果的质量,使得系统更加智能和适应用户需求。
在这个技术介绍中,提到了两个关键概念:查询路由和RAG决策器模式,这些是用于增强检索系统性能和效率的先进技术。
1. RAG决策器模式:
2. 应用场景:
3. 优势与挑战:
通过实现查询路由和采用RAG决策器模式,可以使检索系统更加智能和高效,提升用户体验,并为系统的运行和维护带来更多便利。
以上就是检索中可用的3种高级RAG技巧。
预检索即检索前的5种RAG高级技巧,可以阅读历史文章:从预检索到生成的15种高级RAG技术(篇一)
明天我们将继续分享:检索后的3种RAG高级技巧。
敬请期待…
AI智能时代,我们更需要成为一个独立思考、独一无二的个体。持续学习,遇见不一样的自己。
文章转自微信公众号@耳东观察