面向客户的对话式 AI 助手并非凭空而来,而是嵌入在定义明确的业务流程中。正因如此,这些系统才需要可靠且一致地引导用户完成预定工作流程的每个步骤。
然而,现有的利用工具调用或函数调用概念与系统(例如 API 或数据库)交互的代理框架往往无法实现这一目标。它们缺乏企业级应用程序所需的稳健性、可控性以及对复杂流程的内置支持。
在本文中,我们将探讨其原因,并介绍一种替代方法:流程调用。这种方法可以创建可靠、流程感知且易于调试的对话式代理。我们还将分享代码示例,并指导您如何开始使用 Rasa 平台。
为什么选择流程调用而不是工具调用?
在当前范式中,AI 代理配备了工具,使其能够解决特定任务。这些工具通常执行原子操作,例如调用 API 读取或写入数据、更新或从数据库获取数据或类似操作。这种方法的局限性在于它通常缺乏状态,这使得 AI 代理变得不可预测,有时甚至不可靠,原因如下:
- 丢失对话上下文:代理无法记住之前的对话或决策,导致响应冗余或不一致。
- 业务流程执行不力:如果没有状态跟踪,代理可能会跳过必需的步骤或以错误的顺序执行步骤。
- 重复任务执行不一致:相同的任务可能会产生不同的结果,从而违背用户的期望并降低信任度。
另一方面,企业拥有完善的流程,AI 助手应该遵循这些流程,而不是即兴发挥或自行创建。为客户服务部署的对话式 AI 代理必须了解用户的需求,将他们与正确的公司流程连接起来,清晰地解释它如何提供帮助,并引导他们完成每个步骤以实现目标——所有这些都需要保持流畅自然的对话流程。
这就是流程调用的作用所在。通过流程调用,LLM 可以调用有状态的流程并与之协作。用户向助手提出问题,LLM 会预测将触发哪个特定的、已定义的业务流程。该流程与 LLM 协同工作,推动对话向前发展。
让我们深入探讨如何在实践中使用流程调用方法构建可靠的 AI 助手。我们将开发一个能够处理简单流程的银行 AI 代理,包括转账、开设储蓄账户、回复常见问题 (FAQ) 以及处理非主题请求。
如何使用Rasa构建对话式AI代理?
Rasa 平台是一个对话式 AI 框架,提供构建 AI 助手的端到端解决方案。Rasa 平台的核心是 CALM(基于语言模型的对话式 AI),它是 Rasa 的 AI 驱动型对话编排引擎。CALM 旨在将业务逻辑与自适应对话管理相结合。CALM 的核心功能包括对话理解、对话管理器和上下文响应复述器。
使用 Rasa,您可以构建企业级、流畅的文本和语音 AI 助手。让我们设置环境,开始构建您的 AI 银行助手。
设置环境
首先,您需要在此处获取免费的开发者版密钥。一封确认邮件将发送到您提供的电子邮件地址,您需要从该邮件中复制您的令牌。
有两种方法可以开始使用 Rasa:
- 使用 GitHub Codespaces
- 使用 Python 进行本地安装
在本教程中,我们将使用 GitHub Codespaces,因为它允许您直接在浏览器中构建代理,无需本地安装。此选项非常适合初学者和任何 Rasa 新手。
您需要:
- 一个 GitHub 帐户
- 一个 Rasa 开发者版密钥 – 点击此处获取。
创建您的第一个对话式AI代理
要使用 Rasa 创建您的第一个 AI 代理,请执行以下步骤:
- 前往 Rasa Codespaces GitHub,然后点击“Create codespace on main”。这将在您的浏览器中打开一个新的 Codespace。
- Codespace 准备就绪后,打开 .env 文件并添加一个新的环境变量:
RASA_PRO_LICENSE="your-rasa-pro-license-key"
- 然后,在终端中运行以下命令:
使用以下命令加载环境变量:
source .env
要激活虚拟环境:
source .venv/bin/activate
使用 Rasa 提供的教程模板创建您的第一个代理。在整个安装过程中,请按 Enter 键或对每个问题回答“是”。
在终端中执行以下命令:
rasa init --template tutorial
一个包含 Rasa 检查器的新标签页将会打开。尝试向您的代理询问几个问题,例如:
- 您好,您好吗?
- 您可以做什么?
您也可以尝试以下命令:
- “Help me transfer money.”
转账是事务流的一个例子,其中代理遵循预定义的操作序列,例如询问缺失信息、调用 API、更新数据库中的记录等。
构建流程
还记得我们一开始讨论过如何构建可靠、确定性的业务逻辑执行吗?您可以使用流程在 Rasa 中创建这样的流程。我们将为代理添加开设储蓄账户的功能,以演示流程调用在实践中的工作原理。
流程允许您构建一个预定义的步骤序列,必须遵循这些步骤才能实现特定结果。当然,在银行开设真正的储蓄账户会涉及更多步骤,例如验证用户身份、检查账户资格等等。所有这些都可以在 Rasa 中使用自定义操作(本质上是 Python 函数)来实现。
我们将构建一个简化版本,在用户开设新的储蓄账户之前,我们会要求用户提供一些额外信息:
- The name
- The currency
- The term length
一旦定义了这些步骤,AI 代理就会始终遵循这些步骤并按照规定执行业务逻辑,同时提升 LLM 的能力,使其能够更好地理解对话。
添加储蓄账户流程
现在,我们将通过编辑数据目录中的 flows.yml 文件将此流程添加到我们的助手中:
open_savings_account: description: Collect details to open a savings account. steps: - collect: account_name description: The name the user wants to give their savings account. - collect: currency description: The currency for the savings account. - collect: duration description: The amount of time (e.g., months or years) for the savings account. - action: utter_confirm_savings_account_opened
如您所见,流程以 YAML 格式编写。如果您想了解流程的语法,可以阅读 Rasa Docs 上的官方文档。
接下来,更新 domain.yml 文件以定义必要的 slots 和 responses。将 domain.yml 视为您的对话式 AI 助手的整个世界:每当您添加新的插槽或响应时,都需要将它们添加到此处,以便您的助手了解它们。
将新插槽添加到 slots 部分:
account_name: type: text mappings: - type: from_llm currency: type: text mappings: - type: from_llm duration: type: text mappings: - type: from_llm
在回复部分添加新的回复:
utter_ask_account_name: - text: "What would you like to call your new account?" utter_ask_currency: - text: "Which currency would you like to use?" utter_ask_duration: - text: "How many months or years would you like to save for?" utter_confirm_savings_account_opened: - text: "Your savings account '{account_name}' has been successfully opened."
最后,运行以下命令来训练你的助手并打开 Rasa Inspector:
rasa train rasa inspect
您现在可以通过与代理商聊天并说类似的话来测试新的储蓄账户流程:
I want to open a savings account
助手将按照您定义的流程逐步收集所需的详细信息。
使用流程的优势
使用流程的优势包括:
- 将复杂的流程分解为可重复使用的部分
- 将流程链接在一起以构建更高级的交互
- 可扩展性——您可以扩展助手的功能,同时保持流程的井然有序
- 控制力——您可以精确定义助手在特定场景下的行为方式
流程使管理结构化对话变得更加容易,尤其是在您需要一致且可靠地执行业务逻辑时。
处理信息型问题
现在您已经了解如何添加流程,您可以扩展代理的功能以处理任意数量的任务,每个任务都根据您的指示精确执行。无论您有 10 个还是 100 个流程,Rasa 都会利用 LLM 的强大功能来触发正确的流程。
但是,如果用户询问的是信息型问题而不是事务型问题,该怎么办?
您肯定不想为每个问题(例如“转账需要多长时间?”)创建专用的流程。或“国际转账的佣金是多少?”
为了处理此类问题,Rasa 包含一个名为“企业搜索”的组件。您可以通过多种方式在 Rasa 中使用企业搜索,并让用户与您的文档进行互动:
- 将文档直接添加到您的项目目录并使用 FAISS 向量存储
- 使用受支持的外部向量数据库之一,例如 Qdrant 或 Milvus
- 连接您选择的任何其他向量数据库
在本教程中,我们将使用第一个选项:FAISS 向量存储。以下是让您的 AI 代理理解信息查询的步骤:
默认情况下,企业搜索使用 OpenAI 作为默认的 LLM 提供程序,因此您需要将您的 OPENAI_API_KEY
添加到 .env 文件中。
准备 .txt 格式的数据并将其添加到 docs/faq.txt,以便您的 AI 代理可以根据提供的数据回答任何问题,而无需进行明确的编程。
接下来,在您的 config.yml 中,取消注释 EnterpriseSearchPolicy
:
- name: EnterpriseSearchPolicy
编辑 data
文件夹中的 patterns.yml
文件以包含以下搜索模式:
pattern_search: description: Flow for handling knowledge-based questions name: pattern search steps: - action: action_trigger_search
重新训练并重新运行您的代理。现在您可以测试事务性查询和信息性查询了。
处理超出范围的问题
我们最后要介绍的是,当用户提出的问题无法通过流程或企业搜索回答时该怎么办。
Rasa 中有一个默认模式 pattern_chitchat
,旨在处理这种情况。所有超出范围的查询都会被路由到那里,您有以下几种选择:
- 使用预定义消息进行回复,例如“我不确定如何回答这个问题”。
- 使用 LLM 和自定义提示来生成更多样化、更自然的回复。
pattern_chitchat: description: Handles off-topic or general small talk name: pattern chitchat steps: - action: action_handle_chitchat
然后,您可以将 action_handle_chitchat
定义为静态响应,也可以使用它连接到 LLM 进行动态回复。
这可确保您的助手始终能够优雅地响应,即使问题超出其核心业务逻辑或知识库。
小结
在本文中,我们探讨了对话式 AI 框架 Rasa,以及如何使用它来构建一个可靠且可扩展的 AI 代理,该代理严格遵循明确定义的业务流程。我们演示了如何实现流程调用方法,以确保可预测性、控制力以及与实际业务需求的一致性。
您学习了如何:
- 在 GitHub Codespaces 中设置环境并启动 Rasa
- 创建交易流程,例如转账和开立储蓄账户
- 使用企业搜索处理信息查询
- 使用回退模式处理超出范围和常规问题
现在,您拥有了构建 AI 助手所需的所有工具,这些助手可以在明确定义的业务逻辑内自信地运行。立即尝试一下,获取您的开发者版许可证密钥,并创建您的第一个助手。
评论留言