引言数字便利性几乎是所有企业的必需品。然而,在外出就餐时,我们还没有看到太多变化。虽然餐馆在COVID疫苗可用后采用了电子菜单,但大多数都是静态PDF或模拟在线订购的体验,而实际上用户是在餐厅里。实体菜单是可以的。它们完成了工作。但如果我们要真正改进它们,当前的方法错过了目标。它们提供的交互性和灵活性有限。搜索大多数菜单的方法要么是通读整个菜单,要么使用“命令+F”(这在大多数手机上也不太理想)。这就是我们看到真正改善的一个好窗口:语义搜索。用户可以以更微妙的方式与菜单互动,不需要确切知道他们想要什么,而是像与经验丰富的服务员交谈一样提出自然语言查询。在LlamaIndex和W&B Weave的帮助下,这就是我们今天要构建的内容。
我们将涵盖的内容为了构建这个应用程序,我们将整合几个关键功能:
-
语义搜索功能:我们希望用户根据上下文和意义,而不是精确的单词匹配来搜索菜单项。
-
用户友好的界面:一个简单且响应迅速的设计,使菜单导航变得无缝。
-
应用数据分析:分析用户交互和偏好的能力,为餐厅提供有关客户实际寻找什么的宝贵见解!
技术概述将这些静态菜单转化为智能、可搜索的界面需要多步骤的方法。该项目旨在通过以下一系列步骤实现这一目标:
- 使用GPT-4进行数据标准化:过程从将传统菜单中多样化的非结构化文本转换为结构化、标准化的JSON格式开始。
- 创建向量索引:标准化后的数据随后被转换为向量。这个向量索引代表了菜单项的语义内容,促进了高效准确的语义搜索。
- 查询向量索引:有了索引,用户就可以执行自然语言查询。系统根据这些查询的语义含义检索最相关的结果,而不仅仅是关键词匹配。
- 使用GPT-3.5过滤返回结果:为了进一步细化搜索结果,我们将使用GPT-3.5来过滤结果。这确保最终呈现给用户的输出高度相关且精确。虽然向量索引可以根据语义内容有效地检索菜单项,但它可能仍然会返回与用户的特定查询不太相关的结果。GPT-3.5的语言理解能力可用于进一步审查这些结果,确保它们紧密地与查询的意图和上下文相一致。这种方法更像是“检索增强删除”,而不是传统的检索增强生成(RAG)。这里的模型充当智能过滤器,筛选检索到的数据,去除任何不相关或不太准确的信息。这种方法符合RAG的原则,其目的是用来自数据集或数据库的相关信息来增强生成过程。
为什么需要向量索引?在深入研究之前,我认为解释一下我们为什么要使用向量索引是很重要的。您可能会想,为什么不直接循环遍历菜单并传递用户查询和每一页给模型,然后只需询问模型哪些结果相关呢?
使用GPT-3.5对整个菜单内容进行处理的暴力方法确实可行,但由于以下几个原因,它将是极其低效的。
- 首先,由于GPT-3.5的价格模式基于模型接收和生成的令牌数量,处理大量菜单将需要大量的令牌,因此可能是成本高昂的。
- 其次,它会显著降低响应时间,延迟结果导致用户体验下降。相反,使用向量搜索最初缩小结果范围确保我们的LLM只考虑最相关项,同时保持成本效率和返回搜索结果的高度相关性。
使用GPT-4进行数据标准化:奠定基础在创建向量索引之前,我们需要将我们的菜单数据放入可以轻松访问的格式。为此,我们需要将菜单(目前为PDF形式)转换为JSON格式。GPT-4是这项工作的绝佳工具。使用模型和特别设计的提示,我们可以将文档传递给模型并将菜单转换为JSON格式。由于本文的主要重点在于AI搜索功能,因此我将省略将菜单转换为JSON格式的脚本的大部分内容。