使用 Coze 构建一个旅行规划工作流
hgoop 2024-08-21 14:01:02 阅读 92
Coze(扣子)是字节跳动推出的一站式 AI Bot 开发平台。这个平台内置超过 60 种不同的插件,覆盖新闻阅读、旅行规划、生产力工具等多个领域,用户可根据需求为机器人快速添加功能,也支持创建自定义插件。Coze还支持工作流、知识库等。例如,可创建能播报最新时事新闻的 AI 新闻播音员,或开发能处理复杂对话的聊天机器人。
Coze 平台为用户提供了一套上层业务构建入口,降低了大模型复杂的使用门槛。其具有无限拓展的能力集、丰富的数据源、持久化的记忆能力等优势。通过知识库功能,可管理和存储数据,支持 bot 与用户自己的数据进行交互,用户能上传本地文件、在线网页内容及 API JSON 数据至知识库,以便 bot 使用这些内容回答问题。
在实际体验中,使用 Coze 生成 bot 较为便捷。例如,在注册、登陆账号后,可通过首页的插件能力创建 bot;其涵盖旅游、出行和娱乐等场景的插件可直接点击使用,还具备可无限扩展的能力集,能全面实现个性化定义 AI 机器人技术能力。不过,该平台可能也存在一些“幻觉”问题,其分析和对话能力还有提升和优化的空间。
总的来说,Coze 平台的推出降低了用户创建 chatbot 的门槛,使得人们能够参与到 AI 生态的建设中。同时,它也为 AI 应用的开发和推广提供了新的途径和可能性。
Coze 平台工作流设计灵活,允许用户通过拖拉拽方式快速搭建工作流,可集成大型语言模型、自定义代码和判断逻辑等。
本文带领大家手把手创建一个Coze工作流,让大家亲身感受一下Coze平台功能的强大以及容易上手的特点。
我们先简单看看Coze工作流到底是什么,它是如何工作的,然后介绍一下使用Coze工作流可以做什么事情。
Coze工作流是一种强大的工具,能够通过将大语言模型、Python代码或Javascript代码、知识库、选择器、变量、数据库、插件等诸多模块以工作流程的方式整合在一起,完成非常复杂的任务。
Coze工作流的核心在于其能够将不同模块和工具无缝连接,形成一个高效的工作流程,从而极大地提高了处理复杂任务的效率和准确性。这种工作流模式不仅适用于当前网站、手机App、电脑软件等应用程序的全部功能实现,而且由于其核心依托于AI,使得这些应用程序更加智能和方便。
从功能上来看,工作流更像是一个完成相对格式化且标准化的任务的指定模块,而多代理模式则更像一个可以完成复杂任务的团队。这意味着,通过精心设计和优化工作流,可以使得复杂的工作安排更加细致,从而更容易控制和管理。例如,在Coze中,通过点击创建工作流的按钮,可以自由添加不同类型的节点,如插件、大语言模型、代码、知识库等,通过这些节点的连接和配置,可以构建出具有特定功能的工作流。
我们要制作的是一个旅行规划的工作流,这个工作流可以为我们提供酒店,机票(火车票)的选择建议,并为我们提供目的地的景点介绍。先看一下工作流完成的样子。
下面我们一步一步的创建一个旅行行程规划的工作流。
首先我们需要注册Coze平台的用户,登录后才能使用Coze创建工作流的功能。我们可以通过直接访问Coze.cn来进入Coze平台。如果你本地安装有飞书,也可以直接在飞书中选择工作台中的扣子图标登录平台。
下面操作假设你已经可以正常登录扣子平台。
在个人空间选择工作流标签页,点击创建工作流,会弹出如下界面。
在工作流名称中填写“travel_planning”,工作流描述中填入这个工作流的描述“根据用户的旅游目的地推荐景点、酒店以及给出实时机票、高铁票信息”。
设置完这些信息后,点击确定按钮,创建一个全新的工作流。
在工作流的设计区域可以看到这个样内容。
设计区域已经为我们自动添加了开始和结束节点,左侧是可以增加的节点类型。从左侧列表,我们可以看到工作流节点可以添加插件,大模型等节点来强化工作流的功能,如果需要代码处理流程中的数据,可以增加代码节点。
本次开发的这个工作流为了降低开发难度,我们会选择很多已经存在的插件简化开发,在具体的数据处理上会写一些简单处理代码。
这个工作流的搭建思路就是,根据用户输入的目的地来获取当地酒店信息,这个功能使用扣子官方提供的携程搜索酒店的插件获取酒店推荐。接下来是根据出发地和目的地所在城市获取飞机和高铁车票信息,这其中也使用官方提供的携程飞机和高铁插件。由于我们获得的酒店,飞机和高铁车票等数据是数组形式不符合人们平时查看信息的习惯,我们还会使用代码节点来对数据进行格式化的操作。最后我们将把这些格式化的信息喂给大模型,我们在这个工作流中使用的是豆包大模型,通过给豆包指定提示词,让大模型根据我们的要求输出最终的结果信息。结果信息通过结束节点按照指定的格式显示出来。
下面我们一一添加和处理节点。
首先在开始节点上,输入我们的三个参数,“dep_city”,“arr_city”,“dep_time”,其含义就是出发城市,到达城市,以及出发时间。其中前两参数在流程开始时必须填写,因为用户很可能在规划行程时,还不能确定出发时间。填写完的开始节点是这样的。
下面我们来增加处理目的地酒店的节点。点击左侧插件节点上的加号,在添加插件的对话框中搜索携程旅行,选择search_hotel进行添加。我们将开始节点和search_hotel节点链接起来。
如果不清楚如何使用插件,可以查看示例。此处我们直接给出填写后的界面样子。
接下来增加search_flight_ticket节点。这个节点也是在插件中搜索携程旅行,选择其下面的search_flight_ticket工具。这个工具顾名思义,是查询机票信息的。所以我们需要出发和到达的城市信息,以及出发时间。将这个节点与前面的search_hotel节点连接起来。在这个节点中填写如下的信息。
现在添加search_train_ticket节点,用以搜索火车票信息。添加插件的方法参考上面的过程。将这个节点与前面的节点连接起来。这个节点中填写内容如下。注意,输入参数中start_city对应我们开始节点中的dep_city,end_city对应开始节点中的arr_city.
我们已经通过前面三个节点获取了目的地的酒店,飞机票和高铁火车票的数据。现在我们来处理这个获取到的数据,因为这些数据都是数组的形式,我们需要把这些数据按照通常习惯整理成便于人们理解的格式。这个时候就需要写一些代码了,但是不要担心,这些代码逻辑都很简单。
先增加代码节点,在左侧选择代码节点进行添加操作。
在输入参数部分,设置三个输入参数,分别是flight_data,train_data,hotel_data。他们的参数值都设置成引用的格式,数据分别来自于search_flight_ticket,search_train_ticket,search_hotel的data。接下来将下面代码填入代码区域。
<code>async def main(args: Args):
ret = {}
params = args.params
flight_data = params["fligth_data"]
train_data = params["train_data"]
hotel_data = params["hotel_data"]
try:
hangban_info = []
if len(flight_data) > 0:
i = 0
for flight in flight_data[0:3]:
temp = "航班: {} \n日期:{} \n出发机场:{} \n出发时间:{} \n到达机场:{} \n到达时间{} \n售价{} \n[购票链接]({})"
res = temp.format(
flight["flight_no"],flight["flight_date"],flight["dep_airport"],flight["dep_time"],flight["arr_airport"],flight["arr_time"],flight["price"],flight["h5_url"]
)
hangban_info.append(res)
if i >2:break
i += 1
train_info=[]
if len(train_data) > 0:
j = 0
for train in train_data:
temp = "车次: {} \n全程用时:{} \n出发车站:{} \n出发时间:{} \n到达车站:{} \n到达时间{} \n售价{} \n[购票链接]({})"
res = temp.format(
train["train_no"],train["all_time"],train["start_station"],train["start_time"],train["end_station"],train["end_time"],train["tickets"][0]["ticket_price"],train["h5_url"]
)
train_info.append(res)
if j >2:break
j += 1
hotel_info = []
if len(hotel_data) > 0:
k =0
for hotel in hotel_data:
temp = "酒店:{} \n[预定链接]({}) "
res = temp.format(
hotel["hotel_name"],hotel["h5_url"]
)
hotel_info.append(res)
if k> 2:break
k += 1
ret = {
"hangban_info":"\n".join(hangban_info),
"train_info":"\n".join(train_info),
"hotel_info":"\n".join(hotel_info)
}
except Exception as e:
print(e)
finally:
return ret
输出是三个变量,分别对应hangban_info,train_info,hotel_info,都是string类型。这些变量就是上面三个输入参数经过代码处理后的字符串对象。
填写完的代码节点如下图。
我们现在来到了最后的处理节点:通过大模型来为我们规划整个旅行安排和目的城市的景点介绍。这个节点会让我们感受到大模型提供的辅助带给我们许多的便利。
先增加大模型节点。模型选项我们选择豆包-Function call模型。将这个节点与前面代码节点连接起来。设置4个输入参数:arr_city,flight,train,hotel,他们都是引用类型,除了第一个参数来自于开始节点-arr_city,其他三个都是代码节点的输出。
大模型的提示词使用如下信息:
你是一个旅游专家,我要去{ {arr_city}}旅游,这是我查到的航班信息:{ {flight}},火车信息:{ {train}},酒店信息:{ {hotel}}。请结合这些信息帮我写一份详细的旅游规划。开头应该表明这是为我量身制定的旅游规划,请查收等等话术,而不是分享给我。
- 最少2000字。
- 景点介绍需要丰富和吸引人
- 要有逻辑性,飞机和火车不是每天都乘坐,去了玩几天回来才会再坐
- 最好将火车、航班或酒店的实时购票链接包含在文章中而非结尾。
- 文字是小红书风格,排版规整优美。
我们把大模型节点与最后的结束节点连接,输出变量设置成views,引用大模型1-output,回答内容填写{ {views}}
现在我们已经完成了工作流的搭建过程。
我们尝试运行一下这个旅行规划工作流。点击页面右上角的“试运行”按钮,在弹出界面中出发城市输入框中填写“北京”,到达城市填写“杭州”,点击运行后,工作流就开始启动。等待片刻,如果运行成功,我们可以在结束节点旁边看到最后的输出内容,见下图。
如果运行失败也不用害怕难以定位问题,扣子提供了每个节点的运行结果和运行时间信息,参考下图。
你也赶快来尝试一下扣子提供的丰富功能吧,你会惊叹于它带给你的惊喜!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。