数据周围的上下文可让 AI 应用深入了解数据资产,从而提高 LLM 生成的回答的准确性和相关性。
lookupContext 方法通过单个 API 请求检索预格式化的一组数据资产元数据(针对交互式代理工作流进行了优化),从而弥合上下文差距。您可以使用这种紧凑的 LLM 就绪型上下文来指导代理评估和使用数据资产。
您可以对存储在 Knowledge Catalog 中的任何数据资产(例如 BigQuery 表、数据集或任何其他条目)使用 lookupContext 方法。
智能体如何获取数据上下文?
- 智能体检索可能与上下文检索相关的数据资产,例如使用 Knowledge Catalog 语义搜索。
- 该代理使用
lookupContext方法进行单个 API 调用或 MCP 工具请求,以检索特定资产的上下文。 该方法会返回包含预格式化文本块的响应。根据您在请求中指定的
format参数,文档可以采用 YAML、XML 或 JSON 格式。响应包含以下上下文元素:
上下文元素 说明 技术元数据 资源架构和物理配置,例如 BigQuery 分区和聚簇策略。 运营元数据 联接和其他关系,基于历史查询日志和数据洞见。如需了解详情,请参阅查看数据关系。 商家说明 相关业务术语、概览、目录注释、在源系统中捕获并在 Knowledge Catalog 中自动生成的说明,以及指南。
注意:您可以使用数据资产的“指南”方面来捕获对客服人员发现、检查或使用数据资产有用的其他背景信息。数据分析 分布统计信息、不同值数量、Null 比率和样本值。 数据质量 根据预定义的规则自动检查数据质量并输出结果。 相关数据资产的背景信息 相关数据资产的背景信息,例如术语表中的术语或其他相关资产,如经常联接的表。为相关资源返回的上下文包含的元素范围与主要资源或资源相同。 代理会使用此响应来指导相关素材资源的选取或使用。
准备工作
在使用 lookupContext 方法之前,请确保您拥有必要的角色并启用所需的 API。
所需的角色
如需获得调用 lookupContext 方法所需的权限,请让您的管理员为您授予 Google Cloud 项目 iam.gserviceaccount.com的以下 IAM 角色:
-
对目录资源(包括条目、条目组和术语库)的读取权限:Dataplex Catalog Viewer (
roles/dataplex.catalogViewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
启用 API
如需使用 lookupContext 方法,请在项目中启用以下 API:
- Knowledge Catalog API
启用 API 所需的角色
如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。
检索数据资产的上下文
如需检索数据资产的上下文,请使用 Dataplex API 直接访问 lookupContext 方法,或使用 Knowledge Catalog 远程 Model Context Protocol (MCP) 服务器或 MCP Toolbox For Databases。
lookupContext 方法会根据您的权限过滤资源。响应仅包含您的身份拥有必要 Identity and Access Management (IAM) 权限才能访问的资源的数据。如果您对所请求的资源没有任何权限,该方法将返回一个空响应。
REST
如需检索数据资产的情境,请发送以下请求:
curl --request POST \
'https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:lookupContext' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"resources": RESOURCES
"options": OPTIONS
}' \
--compressed
替换以下内容:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- LOCATION:资源所在的区域(例如
us-central1) - RESOURCES:最多 10 个要检索上下文的条目名称,格式为
projects/{project}/locations/{location}/entryGroups/{entryGroup}/entries/{entry}。对于多个资源,API 会在所请求的资源之间建立关系(例如频繁的架构联接),并在上下文中返回关系信息。 - OPTIONS:用于定义上下文的选项:
format是上下文文件的格式。例如yaml。context_budget是回答的字符数上限。如果您将all_schema_fields参数设置为true,则无论context_budget值如何,API 都会返回所有架构字段。
以下示例请求用于检索 BigQuery 表的上下文:
curl --request POST \
'https://dataplex.googleapis.com/v1/projects/test-project/locations/us:lookupContext?key=[YOUR_API_KEY]' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"resources":
["projects/test-project/locations/us/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table"],
"options":
{
"format":"yaml",
"context_budget":"4000"
}
}' \
--compressed
响应是一个预先设置格式的文本块,类似于以下内容:
{
"context": "resource: \"projects/test-project/locations/us/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/test-project/datasets/sales_data/tables/orders\"\ntechnical_metadata:\n schema:\n - name: order_id\n type: STRING\n description: \"Primary key for the order.\"\n - name: customer_id\n type: STRING\n - name: total_amount\n type: NUMERIC\n partitioning:\n type: TIMESTAMP\n field: order_date\nbusiness_descriptions:\n overview: \"Historical record of all customer transactions.\"\n related_terms:\n - \"Revenue\"\n - \"Sales Transactions\"\n guidelines: \"Always filter by 'order_date' to optimize query costs due to partitioning.\"\ndata_profile:\n columns:\n - name: total_amount\n null_ratio: 0.001\n distinct_values: 52340\n sample_values: [45.99, 120.00, 15.50]\ndata_quality:\n summary:\n - rule: \"positive_amounts\"\n status: PASSED\n description: \"Ensures total_amount is greater than zero.\"\noperational_metadata:\n frequent_joins:\n - table: \"projects/test-project/locations/us/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/test-project/datasets/sales_data/tables/customers\"\n join_key: \"customer_id\"\n"
}
Python
Python
试用此示例之前,请按照《Knowledge Catalog 快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Knowledge Catalog Python API 参考文档。
如需向 Knowledge Catalog 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例展示了如何检索 BigQuery 表的上下文:
from google.cloud import dataplex_v1
# Initialize the client
client = dataplex_v1.CatalogServiceClient()
# Define the request with a seed resource
request = dataplex_v1.LookupContextRequest(
name="projects/test-project/locations/us",
resources=["projects/test-project/locations/us/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table"],
options={"format": "yaml", "budget": "4000"}
)
# Retrieve the LLM-ready context
response = client.lookup_context(request=request)
context_yaml = response.context
print(f"Retrieved Context: \n{context_yaml}")
对于上下文查找,有哪些最佳实践?
如需在使用 lookupContext 方法时优化结果,请考虑采用以下最佳实践:
- 使用
context_budget参数请求所选长度的输出上下文。lookupContext方法会尝试在参数规定的限制范围内,尽可能将最相关的上下文纳入输出中。 - 您可以在
resources列表中列出最多 10 项数据资产。例如,在resources列表中包含多个表可让 API 不仅提供这些表的上下文,还提供它们之间可能的联接路径,从而为如何一起使用这些表提供必要的指导。 - 使用与 LLM 或代理的解析逻辑最契合的
format选项(例如yaml或json),以避免进行代价高昂的转换。
后续步骤
- 了解如何构建代理来发现数据。
- 了解如何构建代理来丰富元数据。
- 了解 Knowledge Catalog 的搜索语法。
- 详细了解如何查看数据关系。