前言
Amazon Bedrock Flows 新增支持了多轮对话功能这一新特性。(参考链接:aws.amazon.com)
以往,用户需要在单次提示词中输入处理所需的全部信息,而借助多轮对话形式,AI 能够轻松实现适时追问缺失信息的功能。此次,我们就利用这一多轮对话功能来实现交互式流程。
1. 概述
Amazon Bedrock Flows 是什么?
Amazon Bedrock Flows 是 AWS 提供的基于 GUI 的生成式 AI 框架。借助它,我们可以轻松构建专属的 AI 代理及聊天机器人。
多轮对话功能是什么?
此次新增支持的多轮对话功能,能够实现对话式流程,即向用户追问缺失的信息。
例如,以旅行计划的建议与预订流程为例,单次对话与多轮对话存在如下区别:

在以往的单次对话中,若要从输入文本中提取必要信息并进行处理,输入文本必须包含所有必要信息。倘若输入中缺少必要信息,流程会直接进入后续处理环节。因此,可能会导致无法处理,或者 AI 自行推测生成必要信息,从而出现非预期的行为。
而使用多轮对话功能后,若存在信息缺失,流程不会进入下一步,而是会向用户进行追问。如此一来,借助多轮对话功能,能够轻松实现更自然的对话流程。
在 Amazon Bedrock Flows 中创建多轮对话流程
接下来,为大家介绍在 Amazon Bedrock Flows 中使用多轮对话功能的方法。本次将以示例形式,创建一个基于预算、PC 用途、台式机或笔记本电脑等条件推荐 PC 的流程。
流程概述
首先,本次创建的流程整体结构如下:

用户输入由代理节点接收。提示词节点虽也能以文本形式接收用户输入,但由于多轮对话功能是代理独有的功能,因此此处使用代理。
随后,代理提取预算、PC 用途、台式机或笔记本电脑这三类信息,并将其传递给后续的 AWS Lambda 函数以进行 PC 推荐。
Lambda 函数的推荐逻辑较为简单,仅返回与提取的信息组合相对应的 PC 名称。
创建支持多轮对话的代理
首先,创建用于接收用户输入并提取 PC 推荐所需信息的代理。本次传递给代理的指令如下:
请分析用户输入,并提取以下 3 个参数。
# 需提取的信息
1. 价格区间(price_range)
- 若用户预算低于 15 万日元,返回 "lower_than_150000yen"
- 若用户预算高于或等于 15 万日元,返回 "higher_than_150000yen"
2. 用途(use_case)
- 若需要游戏用 PC,返回 "game"
- 若用于工作、文档制作、邮件等商务用途,返回 "business"
3. PC 类型(pc_type)
- 若需要台式机,返回 "desktop"
- 若需要笔记本电脑,返回 "laptop"
# 输出格式
提取所需信息后,请以以下 JSON 格式返回结果。
{
"price_range": "lower_than_150000yen",
"use_case": "game",
"pc_type": "laptop"
}
接下来,进行多轮对话的设置:在 “其他设置” 中将 “用户输入” 设为 “启用”。这样即可实现多轮对话功能。
(此处对应 “代理的多轮对话功能设置” 相关内容)
创建 PC 推荐 Lambda 函数
接下来,创建用于接收代理输出的 JSON 并返回推荐 PC 的 Lambda 函数。本次在函数中简单定义了一份 PC 列表。
运行
# PC 推荐映射表
PC_RECOMMENDATION_MAP = {
"lower_than_150000yen.game.desktop": "ASUS ROG Strix G15",
"lower_than_150000yen.game.laptop": "Dell G15 Ryzen Edition",
"lower_than_150000yen.business.desktop": "HP Pavilion Desktop TP01",
"lower_than_150000yen.business.laptop": "Lenovo ThinkPad E14",
"higher_than_150000yen.game.desktop": "Alienware Aurora R15",
"higher_than_150000yen.game.laptop": "Razer Blade 15 Advanced",
"higher_than_150000yen.business.desktop": "Apple Mac Studio",
"higher_than_150000yen.business.laptop": "Apple MacBook Pro 16-inch",
}
def lambda_handler(event, context):
# 获取输入参数
input_str = event.get("node", {}).get("inputs", [])[0].get("value", "")
# 从代理输出的文本中提取 JSON 并解析
match = re.search(r'\{.*?\}', input_str, re.DOTALL)
json_str = match.group(0) if match else None
pc_params = json.loads(json_str)
# 推荐 PC
recommend_key = f"{pc_params['price_range']}.{pc_params['use_case']}.{pc_params['pc_type']}"
recommended_pc = PC_RECOMMENDATION_MAP.get(recommend_key, "no_recommended_pc")
if recommended_pc == "no_recommended_pc":
response = "暂无推荐的 PC。"
else:
response = f"推荐您选择 {recommended_pc}。"
return response
尝试进行多轮对话
下面,我们来与创建好的流程进行对话测试。
面对模糊问题时,是否会追问具体内容?
测试面对用户的模糊问题时,系统是否会追问具体内容。
首先,来看多轮对话功能关闭时的结果,以及此时代理传递给后续环节的输出。
此处,我们输入模糊的价格表述:“想要一台价格亲民的 PC”。

感谢您的提问。您是在寻找商务用的亲民价格 PC 吧。为了给您更合适的推荐,我想再详细询问几个问题。
请问您考虑选择台式机还是笔记本电脑呢?两者各有特点,若能告知您的偏好,我将为您提供更精准的建议。
从这一结果来看,即便多轮对话功能处于关闭状态,代理似乎也试图进行追问,但追问的内容并未传递给用户,而是直接发送至后续处理环节,进而导致了错误。
另一方面,多轮对话功能开启时的结果如下:

从结果可以看出,代理并未进入下一步处理,而是针对用户的模糊提问追问了具体信息。
此外,Lambda 中定义的推荐 PC 如下表所示,符合预期的 “Lenovo ThinkPad E14” 被成功推荐。
价格区间 | 用途 | PC 类型 | 推荐 PC |
---|---|---|---|
7000元以下 | 游戏 | 台式机 | ASUS ROG Strix G15 |
7000元以下 | 游戏 | 笔记本电脑 | Dell G15 Ryzen Edition |
7000元以下 | 商务 | 台式机 | HP Pavilion Desktop TP01 |
7000元以下 | 商务 | 笔记本电脑 | Lenovo ThinkPad E14 |
7000元以下 | 游戏 | 台式机 | Alienware Aurora R15 |
7000元以下 | 游戏 | 笔记本电脑 | Razer Blade 15 Advanced |
7000元以下 | 商务 | 台式机 | Apple Mac Studio |
7000元以下 | 商务 | 笔记本电脑 | Apple MacBook Pro 16-inch |
能否基于多次交互而非单次交流给出回答?
接下来,我们测试当对话发生多次往复时,系统是否能基于此前的全部对话内容给出回答。
以下测试中,我们将 PC 相关信息分多次提供给系统。

往复对话的回答结果
从结果可见,尽管信息被拆分成了 3 次对话传递,但系统依然包含了首个用户消息中 “预算控制在9000 元以内” 这一信息,并成功推荐了符合预期的 PC。
总结
通过 Amazon Bedrock Flows 的多轮对话功能,我们发现:即便用户输入模糊,或对话发生多次往复,系统也能准确提取所需信息。借助该功能,我们可以轻松构建自然对话形式的 AI 服务,建议大家务必尝试一下。
发表回复