工作流组件:如何用知识库节点和API节点搭建个人减脂小助手
整体概述
本文将通过大模型节点、分支器节点、代码节点、API节点和知识库节点编排工作流,实现理解用户上传的图片,意图识别,知识库检索和调用第三方API的功能点,并将其添加至应用。
这次实践将以用户减脂期饮食建议助手为例,通过工作流的灵活编排,创建一个可以通过用户上传食物照片查询食物热量、并根据用户个人信息提供饮食建议的应用。
效果示例
本文构建的示例工作流概览如下图所示:
在该工作流中,使用大模型节点配合分支器节点,对用户原始提问进行意图识别,不同的意图进入不同的后续流程。用户意图包括“分析特定食物”,“寻求整体饮食建议”两种类型。 如果用户需要分析上传图片中的特定食物,会将数据流转至代码节点和API节点,分析食物信息。如果用户需要寻求饮食建议,会将数据流转至知识库节点,结合个人健康档案给出整体饮食建议。
下图展示了将示例工作流添加到应用后,应用的任务处理能力。当用户输入内容后,应用会调用示例工作流处理用户的输入内容,并向用户返回结果。
构建过程
步骤一:构建工作流
- 登陆百度智能云千帆appbuilder平台。
- 点击免费试用,打开主页。
-
在页面左侧导航栏进入组件广场,并单击创建组件。 本文示例配置如下:
组件名称:减脂食物推荐 英文名称:foodrecommend 组件描述:组件能力包括根据用户个人信息提供减脂食物建议,根据用户上传的图片识别食物热量等 预置画布:空画布,用户可以根据场景需求选择预置画布模版
-
在组件的编辑页面,单击页面下方+节点的图标,依次添加节点,并进行连接。 本文示例配置如下:
按照下图所示顺序,依次添加开始节点、大模型节点、分支器节点、代码节点、API节点、知识库节点、结束节点。
5.连接各节点后,依次为节点配置输入输出参数。
步骤二:配置工作流
本文示例配置参数如下表所示。
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
开始 | 组件运行的起点。定义此组件所需的输入参数。在本次配置中,采用默认参数。 | 默认参数如下:rawQuery ,String类型chatHistory ,String类型FileUrls ,Array |
用户在构建组件时,根据实际场景,添加对应的自定义参数。 | |
大模型 | 意图识别。在本次配置中,调用大语言模型,根据输入参数判断用户意图,将用户输入的query 转换成输出参数传入分支器节点。 |
模型选择: 选择模型,ERINE-4.0-Turbo-8k模型 多样性:0.1 输入: 名称: rawQuery ,在变量值区域选择引用-开始-系统参数-rawQuery,String类型提示词: 请你根据用户给出的{{rawQuery}}判断用户的意图,输出1或者2或者3。 如果用户询问的是基于个人信息的饮食建议,请输出数字2;如果用户询问的是基于上传的图片进行食物分析和相关饮食建议,请输出数字1;如果用户询问的意图不是以上两种,请输出数字3。 请注意,最终输出提取原始输出中的数字,输出为纯数字,有且仅有一个数字。 输出: 名称 result ,类型Number |
模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-8k模型回复准确,响应速度适中,因此选择ERINE-4.0-8k模型。 多样性: 在本次示例中,为控制生成的一致性,多样性值设置为0.1。 多样性数值越高则模型每次输出内容的差异性越大,可调节范围0-1。 |
|
分支器_1 | 在本次配置中,从该节点开始,工作流将分为三个分支,示例配置如下: 分支一:判断条件Number=1,并连接至API节点。该分支用于识别上传图片的食物信息,提供饮食建议。 分支二:判断条件Number=2,连接至知识库节点。该分支用于根据用户个人档案提供饮食建议。 分支三:判断条件不为1或者2,直接输出给应用进行兜底闲聊 |
输入: 引用变量:引用-大模型-result,Number类型 条件关系:等于 比较变量:Number,常量1,2 |
分支器条件: 在本次配置中,为单条件判断,因此配置判断输出参数值。 除此以外,用户可以添加多个条件,多个条件之间的关系可以选择“且”或者“或”。 |
分支一用于识别上传图片的食物信息,提供饮食建议。节点配置如下表
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
代码_1 | 参数类型转换。在本次配置中,该代码节点用于执行参数类型转换的任务,将开始节点输入的参数 FileUrls ,Array |
输入:名称image , 在变量值区域选择引用-开始-系统参数-fileUrls,Array代码: 输出: transformed_fileUrls , String类型 |
代码节点测试: 在节点IDE中编写代码节点,编写结束后可点击IDE左下角运行进行测试 将结果解析至输出参数 测试完成后,可将测试结果解析至右侧配置项输出参数 |
|
API | 菜品和卡路里识别。在本次配置中,本节点用于调用第三方API,对于输入菜品图片参数transformed_fileUrls 进行菜品和卡路里识别。具体步骤如下: 1. 登录百度AI开放平台,获取菜品识别模型的API_Key,Secret_Key,Access Token。参考网址:https://ai.baidu.com/ai-doc/IMAGERECOGNITION/tk3bcxbb0 2.编辑API节点进行鉴权与调试。 调试成功后,可解析Response结果至输出参数。 API使用功能详细说明参见:千帆Appbuilder工作流创建组件说明 |
基本信息: 接口地址:https://aip.baidubce.com/rest/2.0/image-classify/v2/dish 请求方式:POST 鉴权方式:API Key 调试状态:通过 输入参数 名称url, 在变量值区域选择引用-参数类型转换-transformed_file_url,String类型 输出参数: result, Array |
1.可在API调试面板进行调试,调试通过后可进行组件调试。 2.调试成功后,可解析Response结果同步至输出参数。 |
|
代码_2 | 提取识别最精准菜品。在本次配置中,该代码节点用于提取API节点输出结果中probability 值最大的数组,作为大模型_1节点的输入。 |
输入:名称result , 在变量值区域选择引用-菜品和卡路里识别-系统参数-fileUrls,Array代码: |
同代码_1 | |
大模型 | 回答模型1。在本次配置中,调用大语言模型,根据API节点输入的菜品名称和卡路里参数,给出食物的相关介绍,并提出减脂建议。 | 模型选择: 选择模型,ERINE-4.0-Turbo-8k模型 多样性:0.7 输入: 名称: rawQuery ,在变量值区域选择引用-开始-系统参数-rawQuery,String类型名称 calorie ,在变量值区域选择 引用-提取最精准菜品-calorie,String类型名称name,在变量值区域选择 引用-提取最精准菜品-name,String类型 提示词: 根据{{rawQuery}}给出回答,回答时,请根据{{name}},{{calorie}}中提到的食物类别和卡路里数字,给出食物的其他相关介绍。比如:营养价值,是否有利于减脂。 [目的]:我希望你[根据用户{{rawQuery}}和食物种类{{name}},食物卡路里数{{calorie}},判断该食物适不适合减脂,并给出用户减脂和饮食建议。 [背景信息]:通过{{name}},{{calorie}},可以获取用户上传的食物信息。 [格式]:请输出为段落。 [细节级别]:请提供[详细]的回答。 [风格/语气]:使用[非正式,幽默]的语气。 输出: 名称 result ,类型Number |
模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-8k模型回复准确,响应速度适中,因此选择ERINE-4.0-8k模型。 多样性: 在本次示例中,为使得生成的回答具有多样性,多样性值设置为0.7。 多样性数值越高则模型每次输出内容的差异性越大,默认值为0,可调节范围0-1。 |
|
结束 | 组件的最终节点,输出组件运行后的最终结果。 | 输出:outputfinal ,在变量值区域选择引用-回答模型1-output,String类型outputfinal2 ,在变量值区域选择引用-回答模型2-output,String类型 |
分支二用于根据用户个人档案提供饮食建议。节点配置如下表。
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
知识库 | 个人健康档案。在本次配置中,知识库节点支持根据输入的query ,在【个人健康档案】的知识库中检索相关片段并召回,返回切片列表。具体步骤如下: 1.上传用户的健康信息,包括个人身高体重,每日推荐摄入卡路里数辆,喜欢的食物列表等,选择知识库配置参数,构建【个人健康档案】知识库。完成用户个人信息的上传。 2.创建完成后,进入知识库页面,点击右上角 命中测试 ,可以对于知识库召回文件准确度进行测试。如下图所示,命中切片符合预期,召回准确。则调试完成,可以投入使用。 |
输入: 名称 query , 在变量值区域选择引用-系统参数-rawQuery,String类型知识库参数: 检索策略:混合检索 召回数量:2 输出: Output_list , Array |
1.检索策略: 本次配置中文本数量较少,结构简单,选择最常用检索方式:混合检索。用户可以自定义检索方式,提高最终生成的答案的准确性和可用性。 2.召回数量: 本次配置根据文档切片数量,设定召回数量为2。 3.匹配分: 本配置中通过命中测试,观察到匹配分为0.2左右,召回的结果更全面。 用户可以自行定义匹配分,用来控制被检索召回的片段数量。 |
|
大模型_2 | 回答模型。在本次配置中,调用大语言模型,根据知识库节点输出的参数OutputList ,给用户提出个性化的减脂建议。 |
模型选择: 选择模型,ERINE-4.0-Turbo-8k模型 多样性:0.7 输入: 名称 query ,在变量值区域选择 引用-系统参数-rawQuery,String类型名称 info ,在变量值区域选择 引用-个人健康档案-OutputList/content,String类型提示词: [目的]:我希望你[根据用户{{query}},给出用户减脂和饮食建议]。 [背景信息]:通过用户个人信息{{info}},获取用户的身高体重,每日卡路里摄入,喜爱的食物列表。 [格式]:请输出为段落。 [细节级别]:请提供[详细]的回答。 [风格/语气]:使用[非正式,幽默]的语气。* 输出: 名称 result ,类型Number |
1.模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-Turbo-8k模型回复更全面,语气更拟人,因此选择ERINE-4.0-Turbo-8k模型。 2.多样性: 在本次示例中,为使得生成回答内容具有多样性,控制内容差异性为0.7。 数值越高则模型每次输出内容的差异性越大,默认值为0,可调节范围0-1。 |
|
结束 | 组件的最终节点,输出组件运行后的最终结果。 | 输出:outputfinal ,在变量值区域选择引用-回答模型1-output,String类型outputfinal2 ,在变量值区域选择引用-回答模型2-output,String类型 |
步骤三:调试并发布组件
工作流调试
工作流配置完成后,需要对工作流进行调试,调试成功后可以发布。
在组件的画布编辑页面,单击页面下方调试的图标,可在右侧进入组件调试面板。
组件调试面板配置参数:
rawquery
:用户输入的原始内容。在本次配置中,示例为:测试数据1.请给我今日的饮食建议;测试数据2.请判断这个食物适不适合减脂。用户可以输入任何想要测试的query。
chathistory
:用户与应用的对话历史。本次配置中为空。用户在进行配置时,可以点击输入框右上角模版进行配置,也可以自行输入。
fileUrls
:用户可以上传文件。在本次配置中,测试数据1为空,测试数据2如下:
配置完成后可选择“运行后将以上内容保存为测试数据”,输入测试数据名称存储本次测试数据。 本次配置测试结果如下:测试数据1结果(左图);测试数据2结果(右图)
待插入图片
发布组件
工作流调试成功后,可以点击页面右上角“发布组件”命名组件版本并将组件发布至个人空间。用户可以在个人空间-组件里找到历史创建组件。
组件发布后,用户可以将组件添加至应用或选择上架组件到组件广场。
步骤四:在应用中添加工作流并进行调试
撰写角色指令
角色指令是大模型回答问题时遵循的人设,可以根据需要进行修改和调试。
以下是这个场景下一份角色指令的样例。
#角色设定
作为用户的减脂饮食小助手,你的目标是帮助用户实现健康减脂。
#组件能力
你拥有专业的减脂知识,并能够根据用户的需求推荐合适的减脂食物。
#任务要求
1.以亲切、幽默的方式与用户交流,提供减脂饮食建议。
2.根据用户的个人情况和需求,推荐适合他们的减脂食物,并解释推荐的理由。
3.确保推荐的食物组合既营养又美味,帮助用户享受健康的减脂过程。
#示例提问与回应
提问:我想减脂,但不想完全放弃美食,你能帮我吗?
回应:当然可以!减脂并不意味着要与美食说再见。我会为你推荐一些美味又健康的减脂食物,让你在享受美食的同时也能轻松减脂。
温馨提示:可以运用AI指令优化一键优化指令哦!
应用调试
在“预览与调试”界面,可以查询相关问题并进行调试。
当我们提问“根据我的个人信息,给出一些今日的饮食建议”时,应用调用组件,准确结合用户的个人健康档案返回了信息:
当我们上传菜品图片(以炒饭为例)并提问“根据我上传的图片,分析我上传的食物适合减脂期食用吗”时,应用调用组件,准确结合食物识别API节点返回了信息: