用于谷歌云 Vertex AI 平台原生落地的 Elasticsearch 向量数据库
探索 Elasticsearch 作为 Google Cloud's Vertex AI 的首个第三方原生落地引擎,如何让您通过将 Gemini 模型落地到企业数据中来构建定制的 GenAI 体验。
Elastic非常高兴地宣布,Elasticsearch矢量数据库现已集成到谷歌云的Vertex人工智能平台,成为一个本地支持的信息检索引擎,使用户能够利用谷歌Gemini模型的多模态优势和Elasticsearch先进的人工智能驱动的语义和混合搜索功能。
开发人员现在可以在一个统一的旅程中创建他们的 RAG 应用程序,以一种低代码、灵活的方式将他们的聊天体验建立在他们的私人数据之上。无论您是为客户和内部员工构建人工智能代理,还是在软件中利用 LLMs 生成,Vertex 人工智能平台都能让 Elasticsearch 的相关性触手可及,只需最少的配置。这种集成使 Gemini 模型更容易、更快速地应用于生产用例,推动 GenAI 从 PoCs 进入实际生活场景。
在本博客中,我们将指导您将 Elasticsearch 与谷歌云的 Vertex AI 平台集成,以实现无缝数据落地,并构建完全可定制的 GenAI 应用程序。让我们一起来探索吧。
借助 Elasticsearch,Google 云的 Vertex AI 和 Gemini 模型可在您的数据中落地生根
利用 Vertex AI 服务和工具创建 GenAI 应用程序的用户现在可以访问新的 "接地 "选项,将其私人数据自动引入对话交互。Elasticsearch 现在是该功能的一部分,可以通过这两种方式使用:
Vertex AILLM API,可在生成时直接丰富 Google 的双子座模型(首选);
地基生成应用程序接口(Grounded Generation API ),在顶点人工智能代理 生成器 (Vertex AI Agent Builder)生态系统中用于构建代理体验。
通过这种集成,下载和部署最多的向量数据库Elasticsearch 将把您的相关企业数据带到您的内部终端客户聊天中所需的任何地方,这对 GenAI 在业务流程中的实际应用至关重要。
上述应用程序接口将允许开发人员在其代码中采用这项新的合作伙伴功能。不过,及时的工程设计和测试仍然是应用程序开发的关键步骤,也是最初的探索过程。为了支持这一点,Elasticsearch 的设计便于用户在 Vertex AI Studio 控制台工具中进行评估。
只需几个简单的步骤,在用户界面的 "自定义接地 "选项卡中用所需的参数(要搜索的索引、要检索的文档数量和所需的搜索模板)配置 Elastic 端点,如下图所示(注意,要使其正常工作,必须在用户界面和下面的代码示例中键入带有"ApiKey" 字样的 API 密钥)。现在,您已经准备好用您的私人知识进行生成了!

轻松实现可投入生产的 GenAI 应用程序
Elastic 和 Google Cloud 致力于提供开发人员优先、全面和愉快的体验。在 Vertex AI 上构建 GAI 应用程序时,通过 LLM 和接地生成 API 原生连接到 Elastic 可降低复杂性和开销,避免不必要的额外 API 和数据协调,同时只需一次统一调用即可接地。
让我们看看在这两种情况下是如何工作的。
第一个示例使用 LLM API 执行:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \https://us-central1-aiplatform.googleapis.com/v1beta1/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/gemini-2.0-flash-001:generateContent \
-d '
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "What's my company car policy?"
}
]
}
],
"tools": [{
"retrieval": {
"externalApi": {
"api_spec": "ELASTIC_SEARCH",
"endpoint": "https://<my-elastic-cluster>.gcp.elastic-cloud.com:9243",
"apiAuth": {
"apiKeyConfig": {
"apiKeyString": "ApiKey <API_KEY>"
}
},
"elasticSearchParams": {
"index": "<my-index>",
"searchTemplate": "<my-search-template>"
}
}
}
}]
}在上例中,通过请求将内容生成到 Gemini 2.0 Flash 的 API 的retrieval 字段,我们可以根据上下文设置请求的检索引擎。将api_spec 设置为 "ELASTIC_SEARCH "后,就可以使用其他配置参数,如 API 密钥和集群端点(需要将请求路由到 Elastic 集群)、检索数据的索引以及用于搜索逻辑的搜索模板。
同样,通过接地生成 API,设置groundingSpec 参数,也可以获得相同的结果:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-discoveryengine.googleapis.com/v1alpha/projects/<PROJECT_ID>/locations/global:generateGroundedContent -d '
{
"contents": [{
"role": "user",
"parts": [{
"text": "What do I need to patch a hole in my drywall?"
}]
}],
"groundingSpec": {
"groundingSources": [{
"elasticSource": {
"endpoint": "https://<my-elastic-cluster>.gcp.elastic-cloud.com:9243",
"index": "<my-index>",
"searchTemplate": "<my-search-template",
"apiKey": "projects/<PROJECT_ID>/secrets/api-key/versions/latest"
}
}]
}
}
'使用这两种方法,响应都将提供一个包含 Elasticsearch 中最相关的私有文档的答案,以及相关的连接数据源,以支持您的查询。
但是,不能把简单与缺乏个性化以满足您的特定需求和使用情况混为一谈。考虑到这一点,我们在设计时允许您根据自己的情况对搜索配置进行完美调整。
指尖上的完全自定义搜索:搜索模板
为了最大限度地定制您的搜索方案,我们与 Google Cloud 合作,在我们著名的搜索模板基础上打造了这一体验。Elasticsearch 搜索模板是创建动态、可重用和可维护搜索查询的绝佳工具。它们允许你预定义和重复使用查询结构。在使用不同参数执行类似查询时,它们尤其有用,因为它们可以节省开发时间并减少出错的机会。模板可包括变量占位符,使查询动态化,并适应不同的搜索要求。
在使用 Vertex AI API 和 Elasticsearch 作为基础时,您必须引用所需的搜索模板(如上面的代码片段所示),在该模板中实现搜索逻辑并将其推送到 Elasticsearch。对于 Vertex AI 用户、网络应用程序开发人员或 AI 工程师来说,他们只需在基础 API 中指定模板名称,就能以完全透明的方式异步管理、配置和更新搜索方法,并根据特定的索引、模型和数据进行定制。
这种设计允许完全定制,将广泛的 Elasticsearch 检索功能置于 Google Cloud AI 环境中供您使用,同时确保模块化、透明性和易用性,以适应不同的开发人员,甚至是不熟悉 Elastic 的开发人员。
无论何时您需要 BM25 检索、语义检索或两者的混合方法(您是否已经探索过检索器?在单个搜索 API 调用中使用可组合检索技术),您可以在搜索模板中定义自定义逻辑,Vertex AI 可以自动利用该模板。
这也适用于您选择用来管理向量和结果的嵌入和重排模型。根据您的使用情况,您可能希望在 Elastic 的 ML 节点上托管模型,通过推理 API 使用第三方服务端点,或者在本地运行本地模型。这可以通过搜索模板来实现,我们将在下一节了解其工作原理。
从参考模板开始,然后创建自己的模板
为了帮助您快速上手,我们提供了一套兼容的搜索模板示例,供您作为初始参考,然后您可以修改并建立自己的自定义模板:
使用 ELSER 模型(稀疏向量和分块)进行语义搜索
使用 e5 多语言模型(密集向量和分块)进行语义搜索
使用顶点人工智能文本嵌入模型进行混合搜索
您可以在此GitHub 仓库中找到它们。
让我们来看一个例子:使用谷歌云的顶点人工智能应用程序接口在产品目录上创建嵌入。首先,我们需要在 Elasticsearch 中创建搜索模板,如下图所示:
PUT _scripts/google-template-knn
{
"script": {
"lang": "mustache",
"source": {
"_source": {
"excludes": [ "title_embedding", "description_embedding", "images" ]
},
"size": "{{num_hits}}",
"knn" : [
{
"field": "description_embedding",
"k": 5,
"num_candidates": 10,
"query_vector_builder": {
"text_embedding": {
"model_id": "googlevertexai_embeddings_004",
"model_text": "{{query}}"
}
},
"boost": 0.4
},
{
"field": "title_embedding",
"k": 5,
"num_candidates": 10,
"query_vector_builder": {
"text_embedding": {
"model_id": "googlevertexai_embeddings_004",
"model_text": "{{query}}"
}
},
"boost": 0.6
}
]
}
}
}在本例中,我们将在一次搜索中对两个字段执行 KNN 搜索: title_embedding - 包含产品名称的矢量字段 - 以及description_embedding - 包含产品描述的矢量字段。
您可以利用excludes 语法,避免向 LLM 返回不必要的字段,以免在处理过程中产生噪音,影响最终答案的质量。在我们的示例中,我们排除了包含向量和图片 url 的字段。
矢量是在查询时通过顶点人工智能嵌入式应用程序接口googlevertexai_embeddings_004 的推理端点在提交的输入上即时创建的,其定义如下:
PUT /_inference/text_embedding/googlevertexai_embeddings_004
{
"service": "googlevertexai",
"service_settings": {
"service_account_json": "<your_service_account_key>",
"model_id": "text-embedding-004",
"location": "us-central1",
"project_id": "<your_gcp_project>"
}
}有关如何使用 Elastic Inference API 的更多信息,请点击此处。
现在我们可以测试模板搜索了:
GET product-catalog-with-embeddings/_search/template
{
"id": "google-template-knn",
"params": {
"query": "What do I need to patch a hole in my drywall?",
"index_name": "product-catalog-with-embeddings",
"num_hits": 3
}
}params 字段将替换我们在模板脚本中设置的变量,这些变量位于双卷曲括号中。目前,Vertex AI LLM 和 Grounded Generation API 可以向 Elastic 发送以下输入变量:
"query" - 要搜索的用户查询
"index_name" - 要搜索的索引名称
"num_hits" - 我们希望在最终输出中检索多少文件
下面是输出示例:
{
"_index": "product-catalog-with-embeddings",
"_id": "9ZQCm5IBcrGI1ivqV-f_",
"_score": 0.4925191,
"_ignored": [
"description.keyword",
"images.keyword"
],
"_source": {
"description": "DAP Eclipse Rapid Wall Repair Patch is a new, revolutionary product solution for repairing drywall damage. No more waiting for spackling to dry or messy sanding. DAP Eclipse allows you to patch drywall damage and paint immediately, allowing you to finish your project faster. This all-in-1, mess free solution not only provides a permanent, long-lasting repair but also superior impact resistance for areas that may see reoccurring impact, such as behind a door.",
"availability": "InStock",
"model_id": "googlevertexai_embeddings_004",
"title": "4 in. Eclipse Wall Repair Patch (2-Pack)",
"url": "https://www.myDIYwebsite.com/p/DAP-4-in-Eclipse-Wall-Repair-Patch-2-Pack-7079809164/317967195",
"price": 23.96,
"product_id": 317967195,
"currency": "USD",
"brand": "DAP"
}上述查询正是 Google Cloud 的 Vertex AI 在引用之前创建的搜索模板时在 Elasticsearch 上运行的幕后查询。Gemini 模型将使用输出文档作为其答案的基础:当您问 "我需要什么来修补干墙?"时,聊天代理将为您提供具体的产品,而不是通用的建议!

借助 Elastic 和谷歌云实现端到端 GenAI 之旅
Elastic 与谷歌云(Google Cloud)合作,创建生产就绪的端到端 GenAI 体验和解决方案。正如我们刚刚看到的那样,Elastic 是第一个直接集成到顶点人工智能平台的用户界面和 SDK 中的 ISV,可以利用我们的矢量搜索功能实现无缝、接地气的双子座模型提示和代理。此外,Elastic 还与 Vertex AI 和 Google AI Studio 的嵌入、重排序和完成模型集成,无需离开 Google 云环境即可创建矢量并对 其 进行排序,确保 遵循负责任的人工智能 原则。通过支持多模式方法,我们共同促进了各种数据格式的应用。
您可以通过我们的Playground 调整、测试和导出 GenAI 搜索代码。

但它不仅仅是构建搜索应用程序:Elastic 利用 Gemini 模型增强 IT 运营能力,如Elastic AI 助手、攻击发现和自动导入功能,减少安全分析师和 SRE 每天在低价值任务上的疲劳,使他们能够专注于改进业务。Elastic 还能全面监控 Vertex AI 的使用情况,跟踪响应时间、令牌和资源等指标和日志,以确保最佳性能。我们共同管理从数据摄取、嵌入生成到混合搜索落地的整个 GenAI 生命周期,同时利用 LLM 驱动的行动确保 GenAI 工具的稳健可观测性和安全性。
更多探索和尝试!
您有兴趣试一试吗?该功能目前在您的 Google Cloud 项目中使用!
如果您还没有开始使用 Elastic Search AI Platform 并探索我们的功能,最简单的方法之一就是免费试用 Elastic Cloud或通过Google Cloud Marketplace 订阅。
本文章中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。目前尚未提供的任何特性或功能可能无法按时交付或根本无法交付。Elastic、Elasticsearch 和相关标记是 Elasticsearch N.V. 在美国和其他国家的商标、徽标或注册商标。所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。
常见问题
什么是谷歌云的 Vertex AI 平台?
Vertex AI 是谷歌云为整个人工智能生命周期提供的统一平台。它旨在通过汇集谷歌最好的机器学习(ML)和生成式人工智能工具,缩小"研究" 和"生产" 之间的差距。
在 Google Cloud 的 Vertex AI 平台中使用 Elasticsearch 有什么好处?
在谷歌 Vertex AI 平台中使用 Elasticsearch 的主要好处是,只需几个简单的步骤,就能为 Elastic 端点配置所需的参数,例如要搜索的索引或要检索的文档数量。
Elasticsearch 有哪些资源可以让为 Gemini 模型设置查询变得更容易?
Elasticsearch 具有可定制的搜索模板,可用于创建动态、可重复使用的搜索查询。




