数据代理概览

借助数据代理,您可以使用对话式语言与数据库中的数据进行互动。您可以为数据库中的一组表定义上下文,从而创建数据代理,这样数据代理就可以将自然语言问题转换为针对目标使用情形的准确查询。

上下文是特定于数据库的信息,可让 LLM 生成高准确度的查询。上下文包括有助于代理了解数据库架构和应用业务逻辑的模板和方面(片段)。

支持以下数据库:

  • AlloyDB for PostgreSQL
  • Cloud SQL for MySQL
  • Cloud SQL for PostgreSQL
  • Spanner

何时使用数据代理

您可以使用数据智能体构建对话式数据应用,这些应用非常适合以下使用场景:

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

数据智能体的工作原理

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

您可以在包含模板和分面的 JSON 对象的文件中定义代理上下文。您可以在 Gemini CLI 的帮助下创建这些上下文文件。然后,将上下文文件上传到您在 Google Cloud控制台中创建的数据代理。此过程可让智能体了解数据库的特定架构和应用的业务逻辑。

代理上下文文件类似于以下内容:

{
  "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"
      }
    }
  ],
  "fragments": [
    {
      "fragment": "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_fragment": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

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

Conversational Analytics API 中的 QueryData 端点是一种代理工具,可与您的应用进行程序化集成,从而能够根据自然语言问题生成 SQL 查询。在对话式应用中,QueryData 端点必须在管理对话历史记录和上下文的框架中使用。

代理上下文

代理上下文由一组精心挑选的 JSON 格式的模板和方面组成,可引导代理将自然语言问题转换为针对特定数据库的查询。定义上下文可确保针对常见查询模式生成高准确度的 SQL。

确保代理上下文准确且全面地涵盖预期应用查询,以最大限度地提高准确性。

查询模板

查询模板是一组精选的代表性自然语言问题,其中包含相应的 SQL 查询。它们还包含说明,以便为自然语言到 SQL 生成提供声明性依据。

查询模板对象类似于以下内容:

{
  "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"
      }
    }
  ]
},
...

查询模板 JSON 对象的主要组成部分如下所示:

  • nl_query:数据智能体处理的自然语言查询示例。
  • sql:自然语言查询对应的 SQL 查询。
  • intent:自然语言查询的目标或用途。如果未设置,此值默认为自然语言查询。
  • manifest:一种泛化的自动生成 intent 形式。
  • parameterized_intent:一种自动生成的模板化 intent,实体值已替换为参数。
  • parameterized_sql:与参数化 intent 对应的 SQL 查询的模板化自动生成形式。

查询分面

查询方面是一组精选的代表性自然语言条件,其中包含相应的 SQL 谓词。分面用于管理过滤条件和条件,使查询模板能够执行分面搜索。

查询分面(片段)对象类似于以下内容:

{
...
"fragments": [
    {
      "fragment": "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_fragment": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

fragment JSON 对象的主要组成部分如下所示:

  • fragment:SQL 谓词。
  • intent:SQL 谓词的说明。
  • manifest:一种泛化的自动生成 intent 形式。
  • parameterized_intent:一种自动生成的模板化 intent,实体值已替换为参数。
  • parameterized_fragment:与参数化 intent 对应的 fragment 的模板化自动生成形式。

限制

数据代理具有以下限制:

  • 数据库的代理上下文仅支持模板和方面。
  • 数据库的代理上下文仅由 Conversational Analytics API 中的 QueryData 端点使用。

后续步骤