数据是一切 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 进行试验。
文章信息
相关推荐
