您可以使用工具将 playbook 连接到外部系统。这些系统可以增强 playbook 的知识,使其能够高效地执行复杂任务。
您可以使用内置工具,也可以构建自定义工具来满足您的要求。
工具测试
创建工具后,您可以使用工具测试功能来验证其是否正常运行。查看工具时,点击工具窗格上方的测试按钮。这会在模拟器中打开输入工具。提供工具输入,然后点击查看输出,验证工具输出是否正确。
您还可以在向示例添加工具时使用工具测试功能。
内置工具
内置工具由 Google 托管。您可以在代理中激活这些工具,而无需手动配置。
支持的内置工具包括:
Code Interpreter:一款 Google 第一方工具,结合了代码生成和代码执行功能,可让您执行各种任务,包括数据分析、数据可视化、文本处理以及求解方程或优化问题。
您的智能体已经过优化,可以确定应如何以及何时调用这些工具,但您可以提供更多示例来适应您的应用场景。
示例架构:
{
"toolUse": {
"tool": "projects/PROJECT_ID/locations/LOCATION_ID/agents/AGENT_ID/tools/df-code-interpreter-tool",
"action": "generate_and_execute",
"inputParameters": [
{
"name": "generate_and_execute input",
"value": "4 + 4"
}
],
"outputParameters": [
{
"name": "generate_and_execute output",
"value": {
"output_files": [
{
"name": "",
"contents": ""
}
],
"execution_result": "8",
"execution_error": "",
"generated_code": "GENERATED_CODE"
}
}
]
}
}
OpenAPI 工具
智能体可以通过提供 OpenAPI 架构,利用 OpenAPI 工具连接到外部 API。默认情况下,代理将代表您调用 API。
您可以使用工具页面上的“测试工具”功能,测试工具是否已正确设置。当您向示例添加工具调用时,此功能也会在示例视图中提供。
或者,您也可以在客户端执行 OpenAPI 工具。
示例架构:
openapi: 3.0.0
info:
title: Simple Pets API
version: 1.0.0
servers:
- url: 'https://api.pet-service-example.com/v1'
paths:
/pets/{petId}:
get:
summary: Return a pet by ID.
operationId: getPet
parameters:
- in: path
name: petId
required: true
description: Pet id
schema:
type: integer
responses:
200:
description: OK
/pets:
get:
summary: List all pets
operationId: listPets
parameters:
- name: petName
in: query
required: false
description: Pet name
schema:
type: string
- name: label
in: query
description: Pet label
style: form
explode: true
required: false
schema:
type: array
items:
type: string
- name: X-OWNER
in: header
description: Optional pet owner provided in the HTTP header
required: false
schema:
type: string
- name: X-SESSION
in: header
description: Dialogflow session id
required: false
schema:
$ref: "@dialogflow/sessionId"
responses:
'200':
description: An array of pets
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
post:
summary: Create a new pet
operationId: createPet
requestBody:
description: Pet to add to the store
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
responses:
'201':
description: Pet created
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
components:
schemas:
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
owner:
type: string
label:
type: array
items:
type: string
您可以使用内部架构引用 @dialogflow/sessionId 作为参数架构类型。使用此参数架构类型时,当前对话的 Dialogflow CX 会话 ID 会作为参数值提供。
例如:
- name: X-SESSION
in: header
description: Dialogflow session id
required: false
schema:
$ref: "@dialogflow/sessionId"
OpenAPI 工具限制
存在以下限制:
- 支持的形参类型包括
path、query和header。不支持cookie参数类型。 - 由 OpenAPI 架构定义的参数支持以下数据类型:
string、number、integer、boolean和array。不支持object类型。 - 您无法在控制台示例编辑器中指定查询参数。
- 请求和响应正文必须为空或使用
application/json格式。
OpenAPI 工具架构生成
提供架构时,点击使用 Gemini,以使用生成式 AI 创建架构。
提供以下详细信息,以指导生成过程:
- 请求网址。
- HTTP 方法,例如 GET 或 POST。
- 示例输入。
- 示例输出。
- 描述工具的文本提示词。
生成架构后,您可以根据需要对其进行修改,并手动添加其他网址和方法。
OpenAPI 工具 API 身份验证
调用外部 API 时,您可以使用以下身份验证选项。
Dialogflow CX 服务代理身份验证
Dialogflow CX 可以使用 Dialogflow CX 服务代理生成 ID 令牌。当 Dialogflow CX 调用外部 API 时,该令牌会添加到授权 HTTP 标头中。
在向 service-agent-project-number@gcp-sa-dialogflow. 授予 roles/cloudfunctions.invoker 和 roles/run.invoker 角色后,您可以使用 ID 令牌访问 Cloud Run functions 和 Cloud Run 服务。
如果 Cloud Run functions 函数和 Cloud Run 服务位于同一资源项目中,则您无需额外的 Identity and Access Management (IAM) 权限即可调用它们。
服务账号身份验证
服务账号可以向任何支持它的 Google API 验证工具请求。
如果您还没有服务账号,请创建一个服务账号。由于服务账号是主账号,因此您可以向其授予角色,以便其访问您项目中的资源,就像您向任何其他主账号授予角色一样。您可以使用服务账号电子邮件地址生成访问令牌,并在工具请求的 Authorization 标头中发送该令牌。
如果您将该工具配置为使用服务账号,则必须具有以下权限:
roles/iam.serviceAccountUser
如需让 Dialogflow CX 生成令牌,请向 Dialogflow CX Service Agent 授予以下权限:
roles/iam.serviceAccountTokenCreator
服务账号还必须具有访问托管该工具的服务的权限。
API 密钥身份验证
- 您可以通过提供密钥名称、请求位置(标头或查询字符串)和 API 密钥来配置 API 密钥身份验证,以便 Dialogflow CX 在请求中传递 API 密钥。
- 我们建议您使用 Secret Manager 提供 API 密钥。
- 2025 年 8 月 15 日之后,导出的代理将不再包含原始值 API 密钥。
OAuth
服务器到服务器身份验证支持 OAuth 客户端凭证流:
- 如果生成式 AI 应用构建器是资源所有者,并且您不需要最终用户授权,则可以使用此流程。
- 您必须在 Dialogflow CX 中配置 OAuth 提供方的客户端 ID、客户端密钥和令牌端点。
- 我们建议您使用 Secret Manager 提供客户端密钥。2025 年 8 月 15 日之后,导出的智能体不包含原始值客户端密钥。
- Dialogflow CX 会从 OAuth 提供方交换 OAuth 访问令牌,并在请求的授权标头中传递该令牌。
不记名令牌
- 您可以配置 Bearer 身份验证,以动态传递来自客户端的不记名令牌。此令牌包含在请求的授权标头中。
- 设置工具身份验证时,您可以指定一个会话参数作为不记名令牌。例如,使用
$session.params.<parameter-name-for-token>指定令牌。 在运行时,将不记名令牌分配给会话参数:
DetectIntentRequest { ... query_params { parameters { <parameter-name-for-token>: <the-auth-token> } } ... }如果您需要配置静态令牌,而不是从会话参数中提取令牌,我们建议您使用 Secret Manager 提供令牌。2025 年 8 月 15 日之后,导出的代理将不包含原始值不记名令牌。
双向 TLS 身份验证
- 如需了解详情,请参阅双向 TLS 身份验证。
- 支持自定义客户端证书。您可以在代理设置中的安全标签页下,在代理级别设置客户端证书。
- 证书(PEM 格式)和私钥(PEM 格式)是必填字段。 设置后,此客户端证书将在双向 TLS 期间用于所有工具和网络钩子。
自定义 CA 证书
- 如需了解详情,请参阅自定义 CA 证书。
Secret Manager 身份验证
如果您使用 OAuth、API 密钥或不记名令牌,则可以使用 Secret Manager 将凭证存储为 Secret。
请按照以下步骤,使用 Secret 对工具进行身份验证:
- 如果您还没有密钥,请创建密钥。
- 为 Dialogflow Service Agent 授予新 Secret 的 Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) 角色。 - 将凭证复制到剪贴板。
- 向 Secret 添加新的 Secret 版本。将凭证粘贴为 Secret 值。
- 省略 Secret 值末尾的所有换行符。
- 复制您刚刚添加的 Secret 版本的名称。名称格式为
projects/{project_id}/secrets/{secret_id}/versions/{version_id}。 - 打开工具修改界面,然后:
- 如果您使用 OAuth,请选择 OAuth 作为身份验证类型,然后点击客户端密钥下的密钥版本,并将密钥版本名称粘贴到密钥版本输入框中。
- 如果您使用 API 密钥,请选择 API 密钥作为身份验证类型,然后点击 API 密钥下的 Secret 版本。将 Secret 版本名称粘贴到 Secret 版本输入框中。
- 如果您使用不记名令牌,请选择不记名令牌作为身份验证类型,然后点击不记名令牌下的密钥版本。将 Secret 版本名称粘贴到 Secret 版本输入框中。
- 点击保存。
OpenAPI 工具专用网络访问
OpenAPI 工具与 Service Directory 专用网络访问集成,可连接到 VPC 网络中的 API 目标。这样可以将流量保持在 Google Cloud 网络内,并强制执行 IAM 和 VPC Service Controls。
如需设置以专用网络为目标的 OpenAPI 工具,请执行以下操作:
- 按照 Service Directory 专用网络配置中的说明来配置 VPC 网络和 Service Directory 端点。
- 确保您的代理项目存在具有以下地址的 Dialogflow CX Service Agent
服务账号:
向 Dialogflow CX Service Agent 服务账号授予以下 IAM 角色:service-agent-project-number@gcp-sa-dialogflow.
- Service Directory 项目的
servicedirectory.viewer - 网络项目的
servicedirectory.pscAuthorizedService
- Service Directory 项目的
- 创建工具时,请提供 Service Directory 服务以及 OpenAPI 架构和可选身份验证信息。
OpenAPI 工具会话参数访问权限
OpenAPI 工具输入是根据用户与 LLM 的对话,并以架构为指导而得出的。在某些情况下,输入可能需要从流程期间收集的会话参数中派生,或者作为查询参数输入与用户输入一起提供。
您可以使用以下格式指定需要作为输入传递的会话参数:
parameters:
- in: query
name: petId
required: true
description: Pet id
schema:
type: integer
x-agent-input-parameter: petId # Reads from the $session.params.petId
- in: header
name: X-other
schema:
type: string
x-agent-input-parameter: $request.payload.header # Reads from the header specified in the request payload input
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
x-agent-input-parameter: petName # Reads from the $session.params.petName
description: Name of the person to greet (optional).
breed:
type: string
description: Breed of the pet.
如果没有此类会话参数,则 LLM 生成的输入会传递给工具。
OpenAPI 工具默认值
您可以使用 OpenAPI 架构指定默认值。仅当该参数或属性没有 LLM 生成的输入值或基于会话参数的输入值时,这些默认值才会应用。
您可以将默认值指定为架构的一部分,如下所示:
parameters:
- in: query
name: zipcode
required: true
description: Zip code to search for
schema:
type: integer
default: 94043
requestBody:
content:
application/json:
schema:
type: object
properties:
breed:
type: string
description: Breed of the pet.
page_size:
type: integer
description: Number of pets to return.
default: 10
如果不存在 LLM 生成的值、会话参数值或默认值,则输入将不指定。
数据存储区工具
如需详细了解如何将数据存储区工具与 playbook 搭配使用,请参阅数据存储区工具。
连接器工具
借助连接器工具,您可以配置智能体,使其使用您在 Integration Connectors 中配置的连接来执行操作。每个连接器工具都配置有一个连接以及一个或多个操作。您可以为单个连接创建多个工具,从而将不同的操作组合在一起以供智能体使用。
连接器工具支持以下连接器类型:
- AlloyDB for PostgreSQL
- Asana
- Azure AD (Entra ID)
- BigQuery
- Box
- Cloud Search
- Cloud Spanner
- Cloud SQL - MySQL
- Cloud SQL - PostgreSQL
- Cloud SQL - SQL Server
- Cloud Storage
- Cloud Translation
- Confluence
- Couchbase
- DocuSign
- Dropbox
- Dynamics 365
- Elasticsearch
- 电子邮件
- Enterprise License Manager
- Firestore
- FreshBooks
- FTP
- GitHub
- Gmail
- Google Analytics
- Google 日历
- Google 课堂
- Google Cloud Natural Language
- Google 通讯录
- Google 文档
- Google 表单
- Google 表格
- Google 幻灯片
- Greenplum
- Jira Cloud
- Jira Service Management
- Kintone
- Magento
- Mailchimp
- MariaDB
- Meta Ads
- Microsoft Teams
- 星期一
- MongoDB(版本 2)
- Neo4j
- OneDrive
- Oracle 数据库(第 2 版)
- PayPal
- PostgreSQL
- Salesforce
- Salesforce Marketing Cloud
- SAP HANA
- SAP SuccessFactors
- ServiceNow
- SharePoint
- Shopify(第 1 版)
- Slack
- Stripe
- Trello
- WordPress
- Workday
- Zendesk
您可以使用示例来演示如何调用工具和使用回答,从而帮助代理有效使用连接器工具。
创建连接
如需创建连接并将其连接到您的代理,请依次前往工具 > 创建,选择连接器工具类型和您选择的连接器类型,然后点击创建连接。这将打开 Integration Connectors 创建页面,其中预填充了多个字段。
或者,您也可以前往 Integration Connectors,然后按照说明创建连接。
连接器操作
您可以为每个连接器工具提供两种类型的操作。如需了解详情,请参阅实体、操作和动作。
实体 CRUD 操作:
每个连接都有与相应数据源的对象对应的实体(对于 BigQuery,这些实体是表;对于 Salesforce,这些实体是对象,例如
Order或Case)。您可以对每个实体执行 CRUD 操作:
- 创建:验证并创建具有指定字段值的实体。
- List:基于过滤条件搜索实体实例。
- 更新:基于过滤条件的方法,用于更改实体字段值。
- 删除:删除实体。
- Get:使用 entityId 检索单个实体。
如需详细了解实体 CRUD 操作,请参阅连接器文档。
连接器专属操作:
许多连接器都支持
ExecuteCustomQuery操作,该操作可让您对数据源执行 SQL 查询,其中每个数据源实体都可以作为表进行引用。如需了解详情,请参阅支持的连接器列表。
其他操作因连接器类型而异。例如,请参阅 BigQuery 连接器操作或 Salesforce 连接器操作。
为 CRUD 操作配置输入/输出字段
通过为连接器工具操作选择特定的输入或输出字段,您可以限制智能体执行这些操作的复杂性。
例如,如果您只需要创建包含部分字段的实体,则在操作中配置这组字段可以简化代理的操作。
指定一组输出字段可减小工具响应大小,从而缓解词元限制。这样,代理就可以通过仅公开相关字段来处理输出。
身份验证
如果您使用的连接允许替换身份验证方式,请将该工具配置为传递来自指定会话参数的凭证。
在会话参数中填充这些凭据。然后,该工具会在调用操作时自动将这些凭据传递给数据源进行身份验证。
函数工具
如果您的客户端代码可以调用某些功能,但 OpenAPI 工具无法访问,您可以使用函数工具。客户端始终执行函数工具,而不是智能体
具体过程如下:
- 您的客户端代码会发送检测 intent 请求。
- 智能体检测到需要使用函数工具,并且检测 intent 响应包含工具名称以及输入参数。此会话会暂停,直到收到另一个包含工具结果的 intent 检测请求。
- 您的客户端代码调用该工具。
- 您的客户端代码会发送另一个检测 intent 请求,该请求将工具结果作为输出参数提供。
以下示例演示了函数工具的输入和输出架构:
{
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, for example, San Francisco, CA"
}
},
"required": [
"location"
]
}
{
"type": "object",
"properties": {
"temperature": {
"type": "number",
"description": "The temperature"
}
}
}
以下示例展示了使用 REST 的初始 intent 检测请求和响应:
HTTP method and URL:
POST https://REGION_ID-dialogflow.googleapis.com/v3/projects/PROJECT_ID/locations/LOCATION_ID/agents/AGENT_ID/sessions/SESSION_ID:detectIntent
{
"queryInput": {
"text": {
"text": "what is the weather in Mountain View"
},
"languageCode": "en"
}
}
{
"queryResult": {
"text": "what is the weather in Mountain View",
"languageCode": "en",
"responseMessages": [
{
"source": "VIRTUAL_AGENT",
"toolCall": {
"tool": "<tool-resource-name>",
"action": "get-weather-tool",
"inputParameters": {
"location": "Mountain View"
}
}
}
]
}
}
以下示例展示了提供工具结果的第二个 intent 检测请求:
{
"queryInput": {
"toolCallResult": {
"tool": "<tool-resource-name>",
"action": "get-weather-tool",
"outputParameters": {
"temperature": 28.0
}
},
"languageCode": "en"
}
}
客户端执行
您可以在客户端执行 OpenAPI 和数据存储区工具,就像执行函数工具一样,只需在与会话交互时应用 API 替换即可。
例如:
DetectIntentRequest {
...
query_params {
playbook_state_override {
playbook_execution_mode: ALWAYS_CLIENT_EXECUTION
}
}
...
}
具体过程如下:
- 您的客户端代码会发送一个指定客户端执行的检测 intent 请求。
- 智能体检测到需要使用工具,并且检测 intent 响应包含工具名称以及输入参数。此会话会暂停,直到收到另一个包含工具结果的 intent 检测请求。
- 您的客户端代码调用该工具。
- 您的客户端代码会发送另一个检测 intent 请求,该请求将工具结果作为输出参数提供。