上下文集概览

借助 QueryData,您可以使用对话式语言与数据库中的数据互动,并构建数据代理。QueryData 使用上下文集(包含数据库特有信息的代码集合)为您的数据库编写查询。借助此上下文,QueryData 可以将自然语言问题转换为准确的查询,以满足您的目标使用情形。

何时使用 QueryData

QueryData 非常适合用于以下应用:

  • 客户服务自动化:处理大量咨询,例如“我的订单在哪里?”或“我的当前余额是多少?”。
  • 电子商务购物助理:帮助用户通过自然语言查询(例如“显示价格低于 100 美元的跑鞋”)浏览大型产品目录。
  • 现场作业工具:让移动员工能够实时查询库存水平、零件供应情况或服务工单详细信息。

QueryData 的运作方式

为了构建有效的智能体应用,QueryData 必须了解您的数据组织和业务逻辑。您以上下文集的形式提供此信息。

您可以在包含每种上下文类型的 JSON 对象的文件中定义上下文。您可以在 Gemini CLI 的帮助下创建这些上下文文件。然后,您将上下文的描述文件上传到在 Google Cloud控制台中创建的上下文集中。此过程可让 QueryData 了解数据库的特定架构和应用的业务逻辑。

上下文的描述文件类似于以下内容:

{
  "templates": [
    {
      "nl_query": "Count Prague loan accounts",
      "sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" ='Prague'",
      "intent": "How many accounts associated with loans are located in the Prague region?",
      "manifest": "How many accounts associated with loans are located in a given city?",
      "parameterized": {
        "parameterized_intent": "How many accounts associated with loans are located in $1",
        "parameterized_sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
      }
    }
  ],
  "facets": [
    {
      "sql_snippet": "T.\"A11\" BETWEEN 6000 AND 10000",
      "intent": "Average salary between 6000 and 10000",
      "manifest": "Average salary between a given number and a given number",
      "parameterized": {
         "parameterized_intent": "Average salary between $1 and $2",
         "parameterized_sql_snippet": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ],
  "value_searches": [
    {
      "query": "SELECT $value as value, 'accounts.account_type' as columns, 'Account Type' as concept_type, 0 as distance, '{}'::text as context FROM \"accounts\" T WHERE T.\"account_type\" = $value",
      "concept_type": "Account Type",
      "description": "Exact match for account types"
    }
   ]
}

当最终用户提出自然语言问题时,QueryData 会优先将问题与经过开发者审核的模板和分面进行匹配,以整理上下文。QueryData 识别出匹配项后,会使用所选的查询模板和分面来合成数据库查询。然后,上下文设置逻辑针对数据库执行该查询,以返回准确的结果。

建议您在上下文中定义值搜索。值搜索功能可让代理将值短语映射到数据库列中存储的特定值。这可让 LLM 以您的实际数据为依据,帮助其解决歧义,例如某个术语是指District还是City

如果代理未能找到匹配的模板,则会使用值搜索功能将自然语言短语映射到数据库列中存储的特定值。这样,LLM 就可以根据您的实际数据进行推理,从而帮助其解决歧义问题,例如某个术语是指 DistrictName 还是 City

对话式分析 API 中的 QueryData 端点是一种智能体工具,可与您的应用进行程序化集成,从而能够根据自然语言问题生成 SQL 查询。在对话式应用中,QueryData 端点必须在管理对话历史记录和上下文的框架内使用。如需在保持严格的行级安全性的同时强制执行实体解析,您可以使用参数化安全视图 (PSV)。如需了解详情,请参阅使用参数化安全视图保护应用数据安全并控制对应用数据的访问权限

后续步骤