数据存储区代理是一种特殊类型的 Dialogflow 代理,可以根据您的网站内容和上传的数据提供 LLM 生成的代理响应。
如需创建此代理,请在创建代理时提供数据存储区。
数据存储区代理具有称为“数据存储区处理程序”的特殊状态处理程序。使用这些数据存储区处理程序,您的数据存储区代理可以与最终用户就内容展开对话。
限制
存在以下限制:
- 此功能目前在 Google Analytics(分析)中仅支持部分语言。请参阅语言参考文档中的数据存储区列。
- 仅支持以下区域:
global
、us
多区域和eu
多区域。 - 系统唯一支持的结构化数据存储区类型是 FAQ。
- 不支持同时具有分块和非分块数据存储区的应用。
访问权限控制
如果您是项目所有者,则拥有创建数据存储区代理所需的所有权限。如果您不是项目所有者,则必须拥有以下角色:
- Dialogflow 管理员
- Discovery Engine Admin
如需了解详情,请参阅 Dialogflow 访问权限控制指南。
创建数据存储区代理
如需创建数据存储区代理,请执行以下操作:
- 如果您尚未按照 Dialogflow setup中的说明操作,请先完成这些操作。
前往 Vertex AI Conversation 控制台:
从控制台下拉菜单中选择您的项目。
如果您尚未激活该 API,请阅读并同意服务条款,然后点击继续并激活该 API。
点击 Create a New App 或 New App。
选择聊天。
在代理配置部分中提供您的公司名称。
展开“时区和语言设置”部分。
选择时区。
选择默认语言。
在您的代理名称部分中提供代理名称。
在代理的位置部分中,选择一个单区域或多区域。
点击继续。
通过执行以下任一操作,将数据存储区连接到您的代理:
点击创建。
您的代理现已创建完毕,并且系统会自动将您重定向到可用的数据存储区页面,您可以在该页面根据需要添加更多数据存储区。
如果您为网站创建了新的数据存储区,则必须验证您的网域。
如需使用 Dialogflow CX 打开代理,请点击左侧面板中的预览。在 Dialogflow CX 控制台中,您可以修改或添加数据存储区处理程序、部署代理,以及(可选)添加可处理数据存储区未涵盖的场景的流。
测试代理
您可以使用 Dialogflow CX 模拟器测试代理。
改进代理的生成式响应
如果您在测试期间发现某些响应不符合您的预期,请尝试以下操作。
您可以通过添加特定问题的 FAQ 条目来覆盖答案。
您可以在 Dialogflow 控制台中进一步自定义您的代理。 如需导航到控制台,请在控制台提供的代理列表中点击代理的名称。然后,打开 Dialogflow 代理设置页面并导航到机器学习标签页,然后转到生成式 AI 子标签页。可用的自定义选项如下:
依据信心
对于由关联的数据存储区的内容生成的每个响应,我们都会评估一个置信度,该置信度用于衡量响应中的所有信息是否都有数据存储区中的信息支持。您可以通过选择您可以接受的最低置信度来自定义允许的回应类型。如果返回结果的置信度完全低于该级别,则系统不会显示该响应。
有 5 个置信度可供选择:极低、低、中、高和非常高。
数据存储区提示
您可以选择添加有关代理的更多信息,这些信息可以提高数据存储区内容生成的回答的质量,并使其更接近您的品牌:
- 代理名称 - 代理应该用自己的名称命名。如果您不设置它,将使用默认值 AI Assistant。
- 代理身份 - 代理角色是什么。如果您不设置它,将使用默认值 AI Assistant。
- 公司名称应设置为贵公司的名称。这项设置应该已在代理创建流程中进行设置,但可以根据需要调整。建议正确设置此字段(尤其是不要将其留空),以免影响生成的答案的质量。
- Company description(公司说明)是对公司业务或提供的服务的简短说明。
- 代理范围 - 要使用的代理的位置。如果您不设置此政策,系统将使用公司网站上的默认值。
部分或全部填写完此部分后,您可以在右侧您的提示下查看根据这些设置生成的一小段文字,这些段落将用于生成答案。
禁止的词组
您可以选择定义不允许使用的特定词组。如果生成的响应(或者重要的是,进入用于生成响应的提示中的内容,例如上次用户输入)包含任何一字不差的禁用短语,则不会显示该响应。
数据存储区模型选择和摘要提示
处理用户查询时,代理会搜索数据存储区以查找合适的来源。然后,代理会将用户查询和找到的信息来源发送给 LLM,然后 LLM 会执行摘要。
您可以选择用于摘要的模型,并且可以选择提供您自己的提示。
选择生成模型
您可以选择数据存储区代理针对摘要生成请求使用的生成模型。如果未选择任何项,将使用 text-bison@001。 下表列出了可用的选项:
模型标识符 | 语言支持 |
---|---|
text-bison@001 | 提供所有支持的语言。 |
text-bison@002 | 提供所有支持的语言。 |
微调 text-bison@001(对话) | 目前仅支持英语文本。 |
微调 text-bison@001(信息类) | 目前仅支持英语文本。 |
gemini-1.0-pro-001 | 提供所有支持的语言。 |
自定义摘要提示
您可以自行为摘要 LLM 调用提供提示。 提示是可能包含预定义占位符的文本模板。系统会在运行时将占位符替换为适当的值,并将最终文本发送给 LLM。
占位符如下所示:
$original-query
:用户的查询文本。$rewritten-query
:Dialogflow 使用重写模块将原始用户查询重写为更准确的格式。$sources
:Dialogflow 会使用 Enterprise Search 根据用户的查询搜索来源。找到的源代码以特定格式呈现:[1] title of first source content of first source [2] title of second source content of first source
$conversation
:对话历史记录按以下格式呈现:Human: user's first query AI: answer to user's first query Human: user's second query AI: answer to user's second query
当 LLM 无法提供答案时,自定义提示应指示 LLM 返回“NOT_ENOUGH_INFORMATION”。 在这种情况下,代理将调用“无匹配事件”。
例如:
Given the conversation between a Human and a AI assistant and a list of sources,
write a final answer for the AI assistant.
Follow these guidelines:
+ Answer the Human's query and make sure you mention all relevant details from
the sources, using exactly the same words as the sources if possible.
+ The answer must be based only on the sources and not introduce any additional
information.
+ All numbers, like price, date, time or phone numbers must appear exactly as
they are in the sources.
+ Give as comprehensive answer as possible given the sources. Include all
important details, and any caveats and conditions that apply.
+ The answer MUST be in English.
+ Don't try to make up an answer: If the answer cannot be found in the sources,
you admit that you don't know and you answer NOT_ENOUGH_INFORMATION.
You will be given a few examples before you begin.
Example 1:
Sources:
[1] <product or service> Info Page
Yes, <company> offers <product or service> in various options or variations.
Human: Do you sell <product or service>?
AI: Yes, <company> sells <product or service>. [1] Is there anything else I can
help you with?
Example 2:
Sources:
[1] Andrea - Wikipedia
Andrea is a given name which is common worldwide for both males and females.
Human: How is the weather?
AI: NOT_ENOUGH_INFORMATION
Begin! Let's work this out step by step to be sure we have the right answer.
Sources:
$sources
$conversation
Human: $original-query
AI:
部署代理
您可以通过多种方式部署代理:
最简单的方法是使用 Dialogflow CX 集成,它可以为您的代理提供界面。 每个集成都提供了部署说明。
Dialogflow Messenger 集成对于数据存储区代理来说是一个特别好的选择。 它具有针对生成式功能的内置选项。
您可以创建自己的界面并使用 Dialogflow CX API 进行互动。您的界面实现控制着部署。
跟踪代理的性能
您可以监控您的代理对话记录,并且可以使用分析工具来获取代理统计信息。
特殊 intent
除了处理与您提供的内容相关的问题,数据存储区代理还可以处理以下类型的问题:
- 代理识别:可以处理“你是谁?”或“你是人类吗?”等问题。
- 上报给人工客服:可以处理“我想咨询人工客服”或“我想咨询人工客服”等问题。
混合代理
如果您已有 Dialogflow CX 代理,则可以将此代理升级为混合代理,该代理将精确对话控件(流、参数、意图、条件、转换等)与数据存储区处理程序生成功能的强大功能相结合。
在此次升级过程中,您可能希望针对代理的某些对话场景删除或暂时停用意图路由(同时测试数据存储区处理程序),因为数据存储区处理程序可以更轻松地处理这些场景。
建议针对数据存储区处理程序采用以下场景:
- 可通过贵组织的文件或网站回答的问题。
- 不需要数据库查询的常见问题解答。
对于数据存储区处理程序,不建议出现以下情况:
- 未对所需问题做出回答的内容。
- 需要查询数据库或服务器请求的问题。
- 需要隐去数据的场景。
- 需要确定代理响应的场景。
Dialogflow 按以下优先顺序评估最终用户输入:
- 范围内的路由的 intent 匹配
- 数据存储区内容常见问题解答
- 非结构化数据存储区内容
输入评估顺序
Dialogflow 按以下顺序评估混合代理的最终用户输入:
- 表单填充时的参数输入。
- 范围内的路由的 intent 匹配。
- 包含 FAQ 数据存储区内容的数据存储区处理程序。
- 包含非结构化数据存储区内容的数据存储区处理程序。
为现有代理添加或修改数据存储区处理程序
数据存储区处理程序是一种特殊类型的 Dialogflow 状态处理程序。这意味着您可以将它们应用于流或页面,并且使用相同的范围规则对其进行评估。
如需添加或修改数据存储区处理程序,请执行以下操作:
- 转到 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择代理。
- 选择与数据存储区处理程序关联的数据流。这通常是默认启动流程。
- 选择与数据存储区处理程序关联的页面。 这通常是初始页。
- 点击页面数据中的添加状态处理程序,然后选择数据存储区。
- 如果您需要创建数据存储区,系统会将您转到 Vertex AI Search and Conversation 界面。请参阅数据存储区信息以帮助您进行选择。
- 如果您已有数据存储区,请点击修改数据存储区。
- 根据需要进行更新,并在完成后保存。 请参阅下文,了解特定于数据存储区的设置。
代理响应
在代理响应部分,您可以提供引用生成式答案的自定义响应。使用代理说部分中的 $request.knowledge.questions[0]
来提供生成式答案。
数据存储区响应选项
您可以更新链接数上限字段,以指明生成式答案应提供的补充链接的数量上限。
处理对话离题
最终用户可能会在对话期间询问澄清性问题。 例如,在收集信用卡信息的过程中,他们可能希望阐明什么是 CVV。在这种情况下,您的代理应该回答问题并返回收集必要的信用卡信息。为此,您可以创建一个数据存储区处理程序,其中包含可以回答该问题的数据存储区,将该处理程序应用于处理信用卡信息收集流程的流程初始页,并为此处理程序设置返回到“当前页面”的过渡目标。
处理不必要的意图匹配
如果您的代理应该使用数据存储区处理程序,却匹配意图,您可以尝试以下解决方法:
- 删除或修改模糊的训练短语,以确保所有训练短语精确地处理所需的意图,并且不会与数据存储区内容冲突。
- 使用反例以避免意图匹配。
数据存储区过滤
在某些情况下,您可能只想使用特定数据存储区进行查询,具体取决于会话参数值。例如,您可以为商品类别创建唯一的数据存储区。要针对商品类别完成数据存储区过滤,请执行以下操作:
- 将会话参数设置为商品类别。
- 创建条件路由,用于检查会话参数的值并转换到具有所需数据存储区处理程序的特定页面。
- 数据存储区处理程序应转换回调用页面,以便对话可以继续。
个性化
要使生成式回答更贴合最终用户的需求,您可以向 Dialogflow 提供用户相关信息。
此信息以 JSON 格式提供。 没有预期的架构,因此您可以随意定义对象属性。 该 JSON 会按原样发送到大语言模型,因此描述性属性名称和值可以获得最佳结果。
例如:
{
"subscription plan": "Business Premium Plus",
"devices owned": [
{"model": "Google Pixel 7"},
{"model": "Google Pixel Tablet"}
]
}
使用 Dialogflow API 进行个性化设置
您可以在发送检测意图请求时向 Dialogflow 提供此数据。此信息必须在每个检测意图请求中提供,因为它不会保留在会话中。
请在 Sessions.detectIntent
方法的 queryParams.endUserMetadata
字段中提供此信息。
选择会话引用的协议和版本:
协议 | V3 | V3beta1 |
---|---|---|
REST | 会话资源 | 会话资源 |
RPC | 会话接口 | 会话接口 |
C++ | SessionsClient | 不可用 |
C# | SessionsClient | 不可用 |
Go | SessionsClient | 不可用 |
Java | SessionsClient | SessionsClient |
Node.js | SessionsClient | SessionsClient |
PHP | 不可用 | 不可用 |
Python | SessionsClient | SessionsClient |
Ruby | 不可用 | 不可用 |
使用 Dialogflow Messenger 进行个性化设置
您可以将此数据提供给 Dialogflow Messenger 集成。请参阅 setContext 方法。
搜索配置
为了更好地控制代理行为并改善答案质量,我们提供增强和过滤搜索配置,可让您提升、掩埋和过滤文档。
借助提升控件,您可以通过对特定文档应用提升值(大于零表示排名较高,小于零表示排名较低)来更改搜索结果排名。
借助过滤器控件,您可以根据指定的过滤条件保留或移除搜索结果。
此信息以 JSON 格式提供给 Dialogflow 请求。 JSON 的格式取决于搜索控件类型。
增强控制
以下搜索配置介绍了增强控制:
"searchConfig": {
"boostSpecs": [
{
"dataStores": [ "DATASTORE_ID" ],
"spec": [
{
"conditionBoostSpecs": {
"condition": "CONDITION",
"boost": "1.0"
}
}
]
}
]
}
过滤器控件
以下搜索配置描述了过滤器控件:
"searchConfig": {
"filterSpecs": [
{
"dataStores": [ "DATASTORE_ID" ],
"filter": "CONDITION"
}
]
}
使用 Dialogflow API 设置搜索配置
您可以在发送检测意图请求时向 Dialogflow 提供此数据。此信息必须在每个检测意图请求中提供,因为它不会保留在会话中。
请在 Sessions.detectIntent
方法的 queryParams.searchConfig
字段中提供此信息。
选择会话引用的协议和版本:
协议 | V3 | V3beta1 |
---|---|---|
REST | 会话资源 | 会话资源 |
RPC | 会话接口 | 会话接口 |
C++ | SessionsClient | 不可用 |
C# | SessionsClient | 不可用 |
Go | SessionsClient | 不可用 |
Java | SessionsClient | SessionsClient |
Node.js | SessionsClient | SessionsClient |
PHP | 不可用 | 不可用 |
Python | SessionsClient | SessionsClient |
Ruby | 不可用 | 不可用 |
使用 Dialogflow Messenger 设置搜索配置
您可以将此数据提供给 Dialogflow Messenger 集成。
如需应用搜索控件,在将以下代码段嵌入网站时,需要将其添加到 DF Messenger 代码中:
<script>
document.addEventListener('df-messenger-loaded', () => {
const dfMessenger = document.querySelector('df-messenger');
const searchConfig = { ... }
dfMessenger.setQueryParameters(searchConfig);
});
</script>
请参阅 setQueryParameters 方法。