提升Airbnb列表:GPT-4o Mini与Anthropic的3.5 Sonnet在代理RAG中

探索 GPT-4o Mini 与 Anthropic 3.5 Sonnet 在为 Airbnb 房源描述创建代理方面的性能表现。了解如何设置实用的数据集、嵌入和使用 Llama Index 和 VectorDB 的代理 RAG 管道。在这个全面的比较中,发现每个模型的优势和局限性。

2025年2月15日

party-gif

探索OpenAI最新的GPT-4o Mini模型在为Agentic RAG创建代理方面的表现,这是一种强大的信息检索技术。这篇博客文章提供了与Anthropic Cloud 3.5 Sonnet模型的实际比较,使用真实世界的Airbnb数据集来展示每个模型在代理工作流程中的功能和局限性。

介绍 GPT-4o Mini:一种具有成本效益的代理 RAG 模型

GPT-4o Mini是OpenAI最新推出的最具成本效益的模型,在其价格范围内是表现最佳的模型之一。然而,问题仍然存在:这个模型在创建代理,特别是代理式检索增强生成(RAG)方面的表现如何?

在这一部分,我们将探讨GPT-4o Mini的性能,并与Anthropic Cloud 3.5 Sonnet模型进行比较,后者是代理式RAG的热门选择。我们将使用一个实际的数据集,即来自MongoDB的Airbnb嵌入数据集,来测试这些模型的功能。

该数据集包含各种元数据列,我们将对数据进行预处理,以创建适合RAG管道的输入。我们将使用Llama Index来设置RAG实现,利用其代理功能。

对于LLM或代理,我们将使用GPT-4o Mini和Cloud 3.5 Sonnet,对于VectorDB,我们将依赖ChromaDB。我们将介绍设置过程,包括安装所需的库、设置环境变量以及配置LLM和嵌入模型。

在设置环境之后,我们将深入研究数据加载和处理步骤,在这里我们将创建RAG管道所需的数据结构。这包括将数据转换为pandas DataFrame,删除现有的文本嵌入,并创建元数据模板以用于嵌入过程。

最后,我们将使用ChromaDB设置向量存储,并定义可供代理使用的查询引擎工具。然后,我们将创建代理工作者,并使用聊天功能与之交互,比较GPT-4o Mini和Cloud 3.5 Sonnet在代理式RAG任务中的表现。

通过本节的学习,您将更好地了解GPT-4o Mini在代理式RAG中的功能,以及它与更强大的Cloud 3.5 Sonnet模型的比较。

设置环境和数据

要开始,我们首先需要设置所需的库和环境变量。我们将安装必要的软件包,包括Llama Index、OpenAI和ChromaDB。

接下来,我们将配置环境变量,包括OpenAI API密钥和Hugging Face令牌(如果需要)。

然后,我们将设置LLM(语言模型)和嵌入模型。对于LLM,我们将使用GPT-4 OM Mini模型。对于嵌入,我们将使用OpenAI TextEmbedding3小型模型,它允许我们定制嵌入大小以减少计算和存储成本。

设置好模型后,我们将转移到数据的加载和处理。我们将使用来自MongoDB的Airbnb嵌入数据集,重点关注前2,000个数据点,以保持处理时间和成本可控。

我们将删除现有的文本嵌入,并使用OpenAI嵌入创建自己的嵌入向量。我们还将从数据集中提取相关的元数据,如房源名称、摘要、房屋规则、房产类型、房间类型、卧室数量和床位数。这些元数据将用于丰富LLM在检索过程中看到的文本。

为了准备数据以供向量存储使用,我们将把文本分成5,000个字符的块,并创建包含文本、嵌入向量和元数据的节点。最后,我们将设置ChromaDB向量存储来存储这些节点,这将用作代理式RAG(检索增强生成)工作流的知识库。

嵌入 Airbnb 数据集

要嵌入Airbnb数据集,我们首先将数据集转换为JSON文档列表。然后,我们创建一个元数据模板,包括重要信息,如Airbnb房源的名称、摘要、房屋规则、房产类型、房间类型、卧室类型、卧室数量和床位数。这些元数据将添加到要嵌入的文本中。

接下来,我们将文本分成5,000个字符的块,以确保每个嵌入向量都可以捕捉相关信息。然后,我们使用OpenAI TextEmbedding3小型模型计算嵌入,该模型允许我们定制嵌入大小以减少计算和存储成本。

计算完嵌入后,我们将它们存储在ChromaDB向量存储中,该存储将作为我们代理的知识库。我们创建了一个QueryEngineToolClass,它将为代理提供对向量存储的访问权限,允许它根据用户的查询检索最相关的文本块。

通过对数据进行预处理、创建元数据模板和设置向量存储,我们已经为使用Llama Index代理做好了准备。这个过程确保了代理可以访问必要的信息,以向用户提供准确和有信息的响应。

创建向量存储和查询引擎工具

要开始,我们首先需要设置所需的库和环境变量。我们将安装必要的软件包,包括Llama Index、ChromaDB和OpenAI模型。

接下来,我们将设置LLM和嵌入模型。对于LLM,我们将使用GPT-4 OM Mini模型,对于嵌入,我们将使用OpenAI TextEmbedding3小型模型。

然后,我们将加载和预处理Airbnb数据集,删除现有的文本嵌入并创建我们自己的包含元数据的文本块。这些块将被嵌入并存储在ChromaDB向量存储中。

为了创建查询引擎工具,我们将使用Llama Index的QueryEngine工具类,它将提供对向量存储的访问,并允许我们检索与给定查询最相似的前k个块。我们将将此工具定义为代理知识库的一部分。

最后,我们将创建代理工作者,它将LLM和查询引擎工具结合在一起,使我们能够与代理互动并检索最佳的Airbnb房源。

这个过程的关键步骤是:

  1. 设置所需的库和环境变量。
  2. 配置LLM和嵌入模型。
  3. 加载和预处理Airbnb数据集。
  4. 使用ChromaDB创建向量存储。
  5. 定义查询引擎工具并将其添加到代理的知识库中。
  6. 通过结合LLM和查询引擎工具创建代理工作者。

通过这些步骤,我们已经建立了必要的基础设施,可以使用GPT-4 OM Mini模型进行代理式RAG任务,并应用于Airbnb数据集。

实现代理工作者

要创建代理工作者,我们首先定义可供代理使用的工具。在本例中,我们使用Llama Index的QueryEngineToolV2类,它提供对我们之前创建的向量存储的访问。

query_engine_tool = QueryEngineToolV2(
    "Knowledge base",
    "Provides information about Airbnb listings and reviews, use a detailed plain text question as input to the tool.",
    self.vector_store
)
tools = [query_engine_tool]

接下来,我们使用Llama Index的FunctionCallingAgentWorker类创建代理工作者。我们为代理工作者提供工具列表和语言模型(在本例中为GPT-4 Mini)。

agent_worker = FunctionCallingAgentWorker(
    tools,
    self.llm,
    verbose=True
)
self.agent = agent_worker

现在,我们可以使用代理的chat函数与之交互。我们可以为代理提供提示,它将使用工具生成响应。

prompt = "Tell me the best listing for a place in New York."
result = self.agent.chat(prompt)
print(result)

代理的响应将包括思考过程和最终答案。在这种情况下,GPT-4 Mini代理的响应不如Anthropic 3.5 Sonnet代理的响应详细或有见地。

为了进行比较,我们也可以尝试不同的提示,如"What is the worst Airbnb listing in Miami?"。Anthropic 3.5 Sonnet代理提供了更周到和细致的响应,承认了知识库的局限性,并提供了关于纽约和迈阿密度假租赁差异的一般见解。

总的来说,使用Llama Index创建代理工作者的实现很简单,但代理的性能取决于底层语言模型的功能。Anthropic 3.5 Sonnet模型似乎更适合代理式工作流,而GPT-4 Mini模型则不太适合。

比较 GPT-4o Mini 和 Cloud 3.5 Sonnet 作为代理

在这一部分,我们比较了GPT-4o Mini和Cloud 3.5 Sonnet作为代理在使用来自MongoDB的Airbnb嵌入数据集的实际代理式RAG(检索增强生成)工作流中的表现。

主要发现如下:

  1. GPT-4o Mini作为代理: 尽管GPT-4o Mini是一个强大的模型,但它在代理工作流中表现不佳。该模型的思维过程表达不够清晰,响应也缺乏预期的细节和准确性。

  2. Cloud 3.5 Sonnet作为代理: 相比之下,Cloud 3.5 Sonnet在代理角色中表现出色。它能有效地重写提示,使用知识库工具收集相关信息,并提供详细准确的响应,即使知识库中没有特定主题的信息。

  3. 强大LLM对代理工作流的重要性: 这一比较突出了使用更强大和更优秀的LLM(如Cloud 3.5 Sonnet)进行代理工作流的重要性。代理理解上下文、重写提示和生成高质量响应的能力对于有效完成任务和与用户互动至关重要。

总之,虽然GPT-4o Mini是一个具有成本效益的模型,但它可能不是代理工作流的最佳选择。相反,Cloud 3.5 Sonnet在这种用例中表现出色,展示了在基于代理的应用程序中使用更强大LLM的好处。

结论

GPT-4o Mini和Anthropic的Cloud 3.5 Sonnet在代理式RAG(检索增强生成)任务中的比较突出了模型功能在代理工作流中的重要性。虽然GPT-4o Mini是一个强大且具有成本效益的模型,但它在代理方面的表现不佳,这从它简单的提示重写和较少详细的响应中可以看出。

相比之下,Anthropic Cloud 3.5 Sonnet模型展示了更强大和复杂的代理行为。它有效地重写提示,从知识库中收集相关信息,并提供详细而有见地的响应,即使面对的是数据集中不存在的位置的查询。

这一比较突出了在设计基于代理的工作流时,仔细考虑模型功能的必要性。虽然GPT-4o Mini可能适用于某些任务,但更复杂的代理应用可能需要使用更强大和专门的模型,如Anthropic Cloud 3.5 Sonnet,才能达到所需的性能和用户体验水平。

FAQ