数据是一切 AI 解决方案的核心。您拥有大量有价值的 BigQuery 数据,但如何才能将这些数据集成到大语言模型应用程序当中呢?大语言模型擅长使用非结构化数据。包含结构化数据可以丰富和巩固模型的响应,并捕获数据中的新关系。现在,让我们来探讨一下如何使用 LangChain BigQuery Data Loader 来做到这一点。

LangChain 是一个开源框架,可以让您将大语言模型连接到数据源,并控制它们之间的信息流。通过使用 LangChain,您可以通过模块化架构和预构建连接器来简化大语言模型的开发。一些最流行的用例包括聊天机器人和虚拟助手、代码生成工具以及使用大型语言模型的自定义 Web 应用程序。如果一个大语言模型的工作流程包含多个步骤和集成点,那么您应该考虑使用 LangChain 来完成该任务。

无论您是 LangChain 的新手,还是从未使用过数据加载器,这篇文章都将为您逐步介绍每个步骤。在我们的示例中,我们的模型将分析多个电子商务表,以选择最适合营销活动的客户。您将学习如何使用数据加载器来支持从摘要到代码生成的生成式 AI 用例。

LangChain 入门

想同时了解 BigQuery 和 LangChain,我们只需要询问 Vertex AI 文本基础模型即可。从头到尾只有六行代码,不难吧!

# Install LangChain and the Vertex AI SDK

!pip install --quiet google-cloud-aiplatform langchain


# Initialize Vertex AI SDK

import vertexai

vertexai.init(project="<your-project-id>", location="us-central1")


# Query the model 

from langchain.llms import VertexAI

llm = VertexAI(model_name="text-bison@001", temperature=0)

llm("What's BigQuery?")

它告诉我们什么?

BigQuery 是一个完全托管的 PB 级分析数据仓库,使企业能够非常快速地分析所有数据。它是一种基于云的服务,提供快速性能、可扩展性和灵活性。 BigQuery 易于使用,并且可以与其他 Google Cloud Platform 服务集成

专业提示:现在您可以使用 BigQuery Studio 运行笔记本并直接在 BigQuery 中尝试本博客文章中的 SQL 语句。

使用数据加载器

征服了“Hello world!”这座高峰后,让我们学习如何使用文档加载器。我们将使用一个名为 TheLook 的虚构电子商务服装网站的数据,该网站可作为 BigQuery 公共数据集使用。

假设我们从一堆我们并不熟悉的表格开始着手,并且我们的营销团队即将在日本开展一场活动。哦,天哪!我们可以让大型语言模型识别我们的目标客户吗?

了解数据的第一步是加载数据。让我们从此数据集中查询架构以提取数据定义语言 (DDL)。 DDL 用于创建和修改表格,并且可以告诉我们每一列及其类型。

作为先决条件,我们要确保 BigQuery 客户端库已经安装:

# Install BigQuery library

!pip install google-cloud-bigquery

现在让我们定义查询并加载数据:

# Define our query

query = f"""

SELECT table_name, ddl

FROM `bigquery-public-data.thelook_ecommerce.INFORMATION_SCHEMA.TABLES`

WHERE table_type = 'BASE TABLE'

ORDER BY table_name;

"""


# Load the data

loader = BigQueryLoader(query, project="<your-project-id>", metadata_columns="table_name", page_content_columns="ddl")

data = loader.load()

我们的查询是提取每个表的表名和 DDL。然后我们创建一个数据加载器,指定表名是一个元数据列,DDL 是内容。

结果是一个文档数组,如下所示:

[Document(page_content='ddl:

   CREATE TABLE `bigquery-public-data.thelook_ecommerce.distribution_centers`

    (id INT64, name STRING, latitude FLOAT64, longitude FLOAT64)

   OPTIONS(description=

     "The Look fictitious e-commerce dataset: distribution_centers table");',

   metadata={'table_name': 'distribution_centers'}),...]

编写我们的第一个链式操作

现在我们已经加载了文档,让我们开始使用它们吧!我们需要一个查询来提供我们营销活动提供所需的答案 – 理解数据。我们将使用代码生成模型来完成此任务。

我们将创建一个基本链,将所有表元数据“填充”到一个提示词中。对于包含更多表的大型数据集,将需要更复杂的链式操作方法。这是因为每个提示词(即上下文窗口)的长度有限。

例如,您可以将每个单独表格中的重点内容压缩成更小的文档,然后使用 map-reduce 方法汇总这些文档。或者,您可以迭代每个表,随时细化您的查询。

以下是具体操作方法。我们将使用 LangChain 表达式语言 (LCEL) 来定义链,分 3 个步骤:

1. 我们将把每个文档中的 page_content(记住,这是每个表的 DDL)组合成一个名为 content 的字符串。

2. 创建一个提示词来查找我们最有价值的客户,传递 content,即组合的表元数据的组合集。

3. 将提示词传递给大语言模型。

# Use code generation model

llm = VertexAI(model_name="code-bison@latest", max_output_tokens=2048)


# Define the chain

from langchain.prompts import PromptTemplate

from langchain.schema import format_document

chain = (

   {

       "content": lambda docs: "\\n\\n".join(

           format_document(doc, PromptTemplate.from_template("{page_content}")) for doc in docs

       )

   }

   | PromptTemplate.from_template("Suggest a query that will help me identify my most valuable customers, with an emphasis on recent sales:\\n\\n{content}")

   | llm

)


# Invoke the chain with the documents, and remove code backticks

result = chain.invoke(data).strip('```')

print(result)

让我们看一下查询:

SELECT

 users.id AS user_id,

 users.first_name AS first_name,

 users.last_name AS last_name,

 users.email AS email,

 SUM(order_items.sale_price) AS total_spend,

 users.country AS country

FROM `bigquery-public-data.thelook_ecommerce.users` AS users

JOIN `bigquery-public-data.thelook_ecommerce.orders` AS orders

ON users.id = orders.user_id

JOIN `bigquery-public-data.thelook_ecommerce.order_items` AS order_items

ON orders.order_id = order_items.order_id

WHERE users.country = 'Japan'

GROUP BY users.id, users.first_name, users.last_name, users.email, users.country

ORDER BY total_spend DESC

LIMIT 10;

太好了,我们得到了查询结果!建议首先进行试运行。现在让我们来回答从日本获取用户的问题:

import google.cloud.bigquery as bq


client = bq.Client(project="<your-project-id>")

client.query(result).result().to_dataframe()

您现在已经了解了如何将 BigQuery 数据集成到 LLM 解决方案中。如果您想要亲自尝试,可以使用生成式 AI 示例存储库中提供的 Notebook 进行试验。

相关推荐