注意 :此功能为预览版,受 GCP 服务专用条款 的“正式发布前产品条款”约束。我们对正式发布前产品和功能的支持可能比较有限,并且对正式发布前产品和功能的更改可能与其他正式发布前版本不兼容。如需了解详情,请参阅发布阶段说明 。此外,使用此功能即表示您同意
生成式 AI 预览版条款及条件
(“预览条款”)。对于此功能,您可以按照
云端数据处理附录
遵守本协议(如预览版条款中所定义)中的适用限制和义务。
本页面介绍了如何将自然语言理解应用于
对搜索查询进行过滤,从而提高搜索查询质量
返回的结果。
您可以将此功能用于与结构化数据相关联的搜索应用
商店。
关于自然语言查询理解
如果您有一个包含结构化数据的通用搜索应用,则可以将用户的自然语言查询重新格式化为过滤查询。这会带来比搜索字词更好的搜索结果
。
与编写自己的过滤表达式相比,使用自然语言查询理解功能更简单、更灵活。如需了解如何编写过滤表达式,请参阅过滤结构化或非结构化数据的通用搜索 。
最好通过示例来解释此功能:
示例:从查询中提取字段
下面通过搜索酒店的示例来介绍此自然语言查询理解功能。
对酒店网站的结构化数据存储区进行以下查询:
“帮我查找至少四星级、价格更便宜、适合家庭入住的酒店
允许我带狗狗,并提供免费 Wi-Fi。”
如果无法理解自然语言查询,搜索应用会查找包含相应字词的文档
。
借助自然语言查询理解和适当结构化的数据,系统可以将查询中的部分自然语言替换为过滤条件,从而提高搜索效率。如果结构化数据包含 star_rating
(数字)、price
(数字)和 amenities
(字符串)字段,则可以将查询重写为以下过滤器和一个残留查询:
从自然语言查询中提取的过滤条件:
{
"star_rating": ≥4,
"price": ≤300,
"amenities": "Wifi", "Pets Allowed"
}
残差查询,在提取过滤条件后重组:
family-friendly
示例:使用地理位置过滤器
此示例与前一个示例类似,只不过它包含一个
geolocation 过滤条件,这是一种提取的特殊过滤条件。
Vertex AI Search 能够识别查询中的位置,
为地理位置创建邻近区域过滤器。
假设用户向某个州级商家网站发出以下查询:“帮我找一家位于旧金山、至少 4 星级且别致时尚的酒店。”
通过自然语言查询的理解和地理位置过滤器,将搜索重写为
过滤器和剩余查询:
从自然语言查询中提取的过滤条件(至少 4 星)
评分并在旧金山 10 公里半径范围内:
{
"star_rating": ≥4,
"location": GEO_DISTANCE(\"San Francisco, CA\", 10000)
}
在此示例中,GEO_DISTANCE
是地址,但在其他查询中,它可能写为经纬度,即使原始查询包含地址也是如此。
在提取过滤条件后重新制定的残留查询:
chic and stylish in San Francisco
尽管提供了地理定位过滤器,但地点名称仍保留在
残差查询。这与其他过滤条件(例如 star_rating
)不同。
限制
自然语言查询理解功能存在以下限制:
自然语言查询理解功能无法应用于混合搜索应用 。您
如果您尝试将自然语言查询理解与混合搜索应用结合使用,则会收到错误消息。
自然语言查询理解适用于使用结构化数据的任何通用搜索应用。不过,Google 不建议将此功能与以下类型的结构化数据搭配使用:
包含元数据的非结构化数据
包含结构化数据的网站数据
将此功能应用于这些类型时不太可能产生良好的结果
因为此类数据通常不包含内容,
而是包含有关内容性质的信息。
使用自然语言查询理解功能会增加延迟时间,因此您可能会选择不使用该功能
确定是否有延迟问题
对于地理定位,必须明确描述位置。您
无法使用“我附近”等位置信息或“家”的位置。
地理定位的半径为 10 公里,不可配置。
准备工作
在开始使用自然语言查询理解功能之前,您必须为与您计划使用的应用关联的数据存储区启用该功能。
如需启用自然语言查询的理解功能,请按以下步骤操作:
REST
找到您的数据存储区 ID。如果您已经有数据存储区 ID,请跳至下一步。
在 Google Cloud 控制台中,前往 Agent Builder 页面,然后
在导航菜单中,点击 Data Stores 。
前往“数据存储区”页面
点击您的数据存储区的名称。
在数据存储区的数据 页面上,获取数据存储区 ID。
运行以下 curl 命令:
curl -X PATCH \
-H "Authorization: Bearer $( gcloud auth print-access-token) " \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID " \
"https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID /locations/global/collections/default_collection/dataStores/DATA_STORE_ID ?update_mask= natural_language_query_understanding_config.mode" \
-d '{
"naturalLanguageQueryUnderstandingConfig": {
"mode": "ENABLED"
}
} '
PROJECT_ID
:您的 Google Cloud 项目的 ID。
DATA_STORE_ID
:Vertex AI Search 数据存储区的 ID。
注意 : 如果要对数据存储区停用自然语言查询理解功能,请运行以下命令:
,将 ENABLED
替换为 DISABLED
。
命令和响应示例
curl -X PATCH
-H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Type: application/json"
-H "X-Goog-User-Project: my-project-123"
"https://discoveryengine.googleapis.com/v1beta/projects/my-project-123/locations/global/collections/default_collection/dataStores/my-data-store?update_mask=natural_language_query_understanding_config.mode"
-d '{
"naturalLanguageQueryUnderstandingConfig": {
"mode": "ENABLED"
}
}'
{
"name": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store",
"displayName": "test_data_store",
"industryVertical": "GENERIC",
"createTime": "2024-07-10T18:50:01.673414Z",
"solutionTypes": [
"SOLUTION_TYPE_SEARCH"
],
"defaultSchemaId": "default_schema",
"documentProcessingConfig": {
"name": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/documentProcessingConfig",
"defaultParsingConfig": {
"digitalParsingConfig": {}
}
},
"servingConfigDataStore": {},
"naturalLanguageQueryUnderstandingConfig": {
"mode": "ENABLED"
}
}
对每个数据存储区重复执行第 1 步和第 2 步。
等待大约 24 小时。
如果您在数据存储区准备就绪之前尝试使用自然语言查询理解功能,则响应
您得到的结果与将 filterExtractionCondition
设置为 DISABLED
时得到的结果相同。
搜索,将自然语言查询转换为过滤器
如需使用自然语言查询进行搜索并获取针对自然语言查询进行了优化的结果,请执行以下操作:
REST
运行以下 curl 命令,该命令会调用 search
方法:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID /locations/global/collections/default_collection/engines/APP_ID /servingConfigs/default_search:search" \
-d '{
"query": "QUERY ",
"naturalLanguageQueryUnderstandingSpec": {
"filterExtractionCondition": "ENABLED"
}
}'
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。
APP_ID
:您在创建 Vertex AI Search 应用时
查询。该应用必须
关联包含结构化数据或元数据的数据存储区。通过
应用不能是
混合搜索应用。
QUERY
:查询以自然语言编写
语言。
命令和结果示例
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Type: application/json"
"https://discoveryengine.googleapis.com/v1beta/projects/123456
/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:search"
-d '{
"query": "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, lets me bring my dog, and has free Wi-Fi.",
"naturalLanguageQueryUnderstandingSpec": {
"filterExtractionCondition": "ENABLED"}
}'
{
"results": [
{
"id": "b2617d862",
"document": {
"name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/b2617d862",
...
}
},
{
"id": "a51841841",
"document": {
"name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/a51841841",
...
}
}
],
"naturalLanguageQueryUnderstandingInfo": {
"extractedFilters": "(amenities: ANY(\"Pets Allowed\") AND amenities: ANY(\"Wifi\") AND star_rating: >= 4 AND price: < 300)",
"rewrittenQuery": "family-friendly",
"extractedFilterStructured": {
"expression": {
"andExpr": {
"expressions": [
{
"numberConstraint": {
"fieldName": "star_rating",
"value": 4,
"comparison": "GREATER_THAN_EQUALS",
}
},
{
"numberConstraint": {
"fieldName": "price",
"value": 300,
"comparison": "LESS_THAN",
}
},
{
"stringConstraint": {
"fieldName": "amenities",
"any": ["Pets Allowed"]
}
},
{
"stringConstraint": {
"fieldName": "amenities",
"any": ["Wifi"]
}
},
]
}
搜索,将查询中的地理位置转换为地理位置过滤器
使用自然语言来搜索查询查询,并获取针对
自然语言查询(包括与位置的邻近性),请执行以下操作:
REST
运行以下 curl 命令,该命令会调用 search
方法:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID /locations/global/collections/default_collection/engines/APP_ID /servingConfigs/default_search:search" \
-d '{
"query": "QUERY ",
"naturalLanguageQueryUnderstandingSpec": {
"filterExtractionCondition": "ENABLED",
"geoSearchQueryDetectionFieldNames": ["GEO_FIELD_NAME_1 ", "GEO_FIELD_NAME_N "]"
}
}'
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。
APP_ID
:您在创建 Vertex AI Search 应用时
查询。该应用必须
关联包含结构化数据或元数据的数据存储区。通过
应用不能是
混合搜索应用。
QUERY
:查询以自然语言编写
语言。
GEO_FIELD_NAME_1, GEO_FIELD_NAME_N
:一个列表
类型为 geolocation
的值。如果值类型不是 geolocation
,则系统会忽略此字段。
命令和结果示例
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Type: application/json"
"https://discoveryengine.googleapis.com/v1beta/projects/123456
/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:search"
-d '{
"query": "Find me a chic and stylish hotel with at least 4 stars that is in San Francisco.",
"naturalLanguageQueryUnderstandingSpec": {
"filterExtractionCondition": "ENABLED",
"geoSearchQueryDetectionFieldNames": ["location"]}
}'
{
"results": [
{
"id": "b2617d862",
"document": {
"name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/b2617d862",
...
}
},
{
"id": "a51841841",
"document": {
"name": "projects/123456/locations/us/collections/default_collection/dataStores/my-data-store/branches/0/documents/a51841841",
...
}
}
],
"naturalLanguageQueryUnderstandingInfo": {
"extractedFilters": "(star_rating: >= 4 AND GEO_DISTANCE("location", "San Francisco", 10000))",
"rewrittenQuery": "chic and stylish",
"extractedFilterStructured": {
"expression": {
"andExpr": {
"expressions": [
{
"numberConstraint": {
"fieldName": "star_rating",
"value": 4,
"comparison": "GREATER_THAN_EQUALS",
}
},
{
"geolocationConstraint": {
"fieldName": "location",
"address": "San Francisco",
"radius_in_meters": 10000,
}
},
]
}