1. 概览
在不同行业中,专利研究都是了解竞争格局、发现潜在许可或收购机会以及避免侵犯现有专利的关键工具。
专利研究涉及的范围广且复杂。从无数技术摘要中过滤出相关创新是一项艰巨的任务。传统的基于关键字的搜索通常不准确且耗时。摘要冗长且技术性强,难以快速掌握核心思想。这可能会导致研究人员错过关键专利,或在不相关的结果上浪费时间。
目标
在此 Codelab 中,我们将利用 Spanner、原地 Gemini 1.0 Pro、嵌入和向量搜索,让专利搜索过程更快、更直观且极其精确。
构建内容
在此实验中,您将:
- 创建 Spanner 实例
- 加载 Google 专利公共数据集
- 使用 Gemini 1.0 Pro 模型创建用于文本嵌入的远程模型
- 根据加载的数据集创建生成式分析洞见
- 根据分析洞见生成嵌入
- 针对数据集发出相似度搜索查询
下图表示实现过程中涉及的数据流和步骤。

要求
2. 准备工作
创建项目
- 在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的云项目已启用结算功能。了解如何 检查项目是否已启用结算功能 。
- 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。点击 Google Cloud 控制台顶部的**激活 Cloud Shell** 。

- 连接到 Cloud Shell 后,您可以使用以下命令检查自己是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
- 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
- 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
- 确保已启用 Vertex AI 和 Spanner API,方法是在控制台中搜索它们。或者,您也可以在 Cloud Shell 终端中使用以下命令:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
另一种方法是使用 此链接。
如需了解 gcloud 命令和用法,请参阅 文档。
3. 准备 Spanner 数据库
让我们创建一个 Spanner 实例、数据库和表,以便加载专利数据集。
创建 Spanner 实例
- 创建名为
spanner-vertex的 Spanner 实例。
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
创建数据库
- 在 Google Cloud 控制台中,打开 Spanner 页面。
- 从列表中选择
spanner-vertex实例。 - 在“数据库”下,点击创建数据库 。
- 将数据库名称设置为 patents。
- 点击创建 以创建数据库。
创建表
- 在 Google Cloud 控制台中,打开 Spanner 页面。
- 从列表中选择
spanner-vertex实例。 - 选择
patents数据库。 - 在表 标签页下,点击创建表 。系统会打开 Spanner Studio 页面。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 请运行以下查询:
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. 将专利数据加载到数据库中
我们将使用 BigQuery 上的 Google 专利公共数据集 作为数据集。我们将使用 Spanner Studio 运行查询。 spanner-gemini-search 代码库包含我们将运行的 insert_into_patents_data.sql 脚本,用于加载专利数据。
- 在 Google Cloud 控制台中,打开 Spanner 页面。
- 从列表中选择
spanner-vertex实例。 - 选择
patents数据库。 - 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 从编辑器中的
insert_into_patents_data.sql脚本复制insert查询语句。您可以复制 50-100 个 insert 语句,以便快速演示此用例。 - 点击运行 。查询结果会显示在结果 表中。
5. 为 Gemini 1.0 Pro 创建远程模型
将专利数据加载到数据库后,我们将创建一个使用 Gemini 1.0 Pro Vertex AI 模型生成标题和关键字汇总集的远程模型。
在 Spanner Studio 编辑器中运行以下 DDL 命令:
- 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 请运行以下查询:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- 点击运行 。查询结果会显示在结果 表中。
6. 为文本嵌入创建远程模型
上一步的结果包含由标题和关键字组成的整合摘要。我们将此响应转换为嵌入,以便在运行查询时生成适当的匹配项。我们将从 Spanner 远程使用 Vertex AI 中的 Text Embedding Gecko 003 model。
- 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 请运行以下查询:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- 点击运行 。查询结果会显示在结果 表中。
7. 根据专利摘要创建生成式分析洞见
我们将创建一个 patents_data_gemini 表,用于存储我们将使用之前创建的 Gemini 1.5 Pro 模型生成的生成式分析洞见。
创建表
- 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 请运行以下查询:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- 点击运行 。查询结果会显示在结果 表中。
生成数据分析
如需使用生成式分析洞见填充表,建议您使用采用批量写入或突变方法的应用。在此 Codelab 中,我们将运行以下 DDL 查询最多 4 次,以填充表。
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
注意:如果您在此步骤中收到配额超出错误(在免费额度较少的情况下可能会发生),请尝试跳过插入,仅运行下面临时解决方法部分中的 select 查询。
临时解决方法部分 :
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
观察分析洞见
该表包含为查询中的 'Identify the areas of work or keywords in this abstract', 提示生成的分析洞见。
注意 :如果您运行的是上述临时解决方法部分查询,而不是 INSERT DDL,请跳过此部分,改为运行此页面中的最后一个 SELECT 查询。
让我们运行以下查询来验证分析洞见的结果:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
您会看到以下结果:

注意 :如果您运行的是临时解决方法部分查询,请将上述 select 查询中的表名称替换为临时解决方法部分中的查询。因此,您将改为运行以下查询:
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
结果应与上述结果屏幕截图中的结果相同。
8. 为生成的分析洞见生成嵌入
在表中填充分析洞见后,我们现在可以使用这些分析洞见来生成嵌入。借助这些嵌入,我们无需依赖完全匹配的关键字,而是可以根据概念相似性生成结果。
注意 :如果您在上一步中运行的是临时解决方法部分查询,则可以跳过此步骤,并在此步骤中运行临时解决方法部分查询。
运行以下查询以生成嵌入:
- 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 运行以下查询以创建
patents_data_embeddings表。
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- 点击运行 。查询结果会显示在结果 表中。
- 运行以下查询以生成嵌入。
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- 点击运行 。查询结果会显示在结果 表中。
观察结果
该表包含为标题和摘要文本生成的嵌入。
让我们运行以下查询来验证结果:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
您会看到以下结果:

临时解决方法部分:
如果您在其他步骤中执行了临时解决方法部分,请使用此查询:
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
这应会产生与上述屏幕截图中显示的结果相同的结果。
9. 准备进行向量搜索
现在我们已生成文本嵌入,可以准备我们的 Web 应用,以便执行相似度向量搜索。在此 Codelab 中,我们将创建一个 Web 应用,其中包含根据 K 最近邻 相似度搜索功能提供搜索结果的逻辑。您可以将此准备好的数据集与 搜索应用 搭配使用,以直观呈现搜索结果的显示方式。
在此 Codelab 中,我们将运行一个示例查询,该查询会搜索提示、根据上下文生成结果,并将结果限制为 10 个条目。
请运行以下查询:
- 在导航菜单中,点击 Spanner Studio 。探索器 窗格会显示数据库中的对象列表。
- 点击新的 SQL 编辑器标签页 以打开新标签页。
- 运行以下查询以创建
patents_data_embeddings表。
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- 点击运行 。查询结果会显示在结果 表中。
注意 :如果您使用了临时解决方法部分中的查询,由于其中一个最早的 Insert 语句中存在配额错误,您可以跳过所有其他步骤,直接运行以下查询,以观察在 Spanner 数据库中对向量嵌入执行最近邻搜索的结果:
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
观察结果
之前的查询使用 COSINE_DISTANCE 方法查找与我们的提示最接近的 10 个匹配项。
您会看到以下结果:

生成的结果在上下文中与查询中的提示非常接近。
10. 清理
为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:
- 在 Google Cloud 控制台中,前往 管理资源 页面。
- 在项目列表中,选择要删除的项目,然后点击删除 。如果您不想删除项目,只需删除您在 Spanner 中创建的实例即可。
- 在对话框中输入项目 ID,然后点击关停 以删除项目。
11. 恭喜
恭喜!您已成功使用 Spanner 的内置向量搜索执行了相似度搜索。此外,您还了解了如何轻松使用嵌入和 LLM 模型,直接使用 SQL 提供生成式 AI 功能。
接下来怎么做?
如需详细了解 Spanner 的精确最近邻 (KNN 向量搜索) 功能,请访问: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
您还可以详细了解如何使用 Spanner 的 Vertex AI 集成通过 SQL 执行在线预测: https://cloud.google.com/spanner/docs/ml