组件工作流:使用记忆变量节点构建个人化导购小助手
整体概述
本文将通过意图识别节点、记忆变量节点、代码节点、知识库节点、大模型节点编排工作流,实现在工作流中写入读取用户个人信息的功能点,以实现针对用户信息进行个性化对话的功能点,并将其添加至应用。
这次实践将以服装购买小助手为例,通过工作流的灵活编排,创建一个针对用户信息和用户购买偏好给出个性化导购建议的小助手。
效果示例
本文构建的示例工作流概览如下图所示:
在该工作流中,涉及三个主要节点的使用:
- 使用意图识别节点对于用户原始Query进行意图分类。用户意图包括:a)已知意向商品,询问商品尺码建议;b)无意向商品,已知个人购买偏好,寻求商品推荐。
- 使用记忆变量节点记录Agent中用户的个人信息,并在组件工作流中读取;同时通过记忆变量节点写入用户Query中提到的用户偏好,以进行个性化的商品查询。
- 使用知识库节点,对商品结构化数据进行切片,并根据Query命中和查询。
下图展示了将组件工作流添加到应用后,应用的任务处理能力。当用户输入内容后,应用会调用组件工作流处理用户的输入内容,并向用户返回结果。
构建过程
步骤一:构建工作流
- 登陆百度智能云千帆appbuilder平台。
- 点击免费试用,打开主页。
- 在页面左侧导航栏进入组件广场,并单击创建组件。本文示例配置如下:
- 组件名称:服装导购助手
- 英文名称:clothesrecommend
- 组件描述:组件能力包括根据用户个人信息提供商品尺码建议,根据用户个人偏好进行服装商品推荐等
- 预置画布:空画布, 用户可以根据场景需求选择预置画布模版
- 在组件的编辑页面,单击页面下方+节点的图标,依次添加节点,并进行连接。
- 连接各节点后,依次为节点配置输入输出参数。
本文示例配置如下: 按照下图所示顺序,依次添加开始节点、意图识别节点、记忆变量节点、代码节点、知识库节点、大模型节点、结束节点。
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
开始 | 组件运行的起点。定义此组件所需的输入参数。在本次配置中,采用默认参数。 | 默认参数如下:rawQuery ,String类型chatHistory ,String类型FileUrls ,Array |
用户在构建组件时,根据实际场景,添加对应的自定义参数。 | |
意图识别 | 在本次配置中,使用意图识别节点对于用户的意图进行分类,并且传入后续不同的节点分支。通过配置意图名称、意图描述、意图例句辅助大模型进行意图识别。通过高级配置选择相应的大模型进行意图识别。可选择模型类型,多样性和对话历史。通过参数抽取配置提取用户Query中提到的用户个性化数据,传入后续不同的节点分支。 | 输入:query :引用-系统参数-rawQuery,String类型意图配置: 意图1 意图名称:意图1 意图描述:用户已有意向商品,需要推荐合适的尺码 意图例句: 我想买1号商品,请为我推荐合适的尺码 请根据我的身高体重,推荐3号商品的合适尺码 参数抽取: clothes ,String类型意图2 意图名称:意图2 意图描述: 用户无意向商品,需要根据用户偏好推荐意向商品。 意图例句: 我喜欢休闲风格的服装。请给我推荐商品。 我想要购买黑色、白色、灰色的衣服。 请为我推荐一些卫衣商品。 参数抽取: preference_1 ,String类preference_2 ,String类型preference_3 ,String类型高级配置: 大模型选择:ERNIE-4.0-8k 多样性:0.1;本次识别不需要多样性答复 对话历史:关闭 输出: 固定参数如下: thought ,String类型classification ,String类型classificationID ,Integer类型自定义参数(用户自定义抽取参数,自定义类型)如下: clothes ,String类型preference_1 ,String类型preference_2 ,String类型preference_3 ,String类型 |
1. 意图例句:意图例句可以给大模型提供可能的意图表达参考。通过few-shot learning的方式使大模型快速适应任务并进行推理。 2. 大模型/多样性参数:使用方法参见大模型节点说明 千帆Appbuilder工作流创建组件说明。 3. 对话历史:默认关闭。打开后,可以引用应用与用户的对话历史作为意图识别的输入信息。在本次最佳实践中不涉及历史对话,因此关闭。 |
|
结束 | 组件的最终节点,输出组件运行后的最终结果。可选择回复模式,设置回复模版。在本次配置中,由于没有特定需求,故不配置回复模版,仅配置回复参数。 | 输出: 名称 answer , 在变量值区域选择 引用-大模型-answer,String类型名称 answer_1 , 在变量值区域选择 引用-大模型_1-answer,String类型名称 answer_2 , 在变量值区域选择 引用-大模型_2-answer,String类型 |
分支一适用于用户已有意向商品,需要推荐合适的尺码。节点配置如下表
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
记忆变量节点 | 在本次配置中,记忆变量节点用于读取Agent配置中的用户个人信息:用户的姓名,体重,身高。读取配置包括输出参数和读取变量。输出参数为该节点输出的参数名称,可以与变量名重名。读取变量中填写的变量名需要与Agent中的记忆变量名相匹配,若不满足则会运行报错。 | 模式:记忆变量读取 读取配置: 名称 name ,变量name名称weight,变量weight 名称 height ,变量height输出: name ,String类型weight ,String类型height ,String类型 |
||
代码节点/代码_1 | 在本次配置中,该代码节点用于执行合并参数转换query的任务,将记忆节点输入的参数 name,weight,height合并成可以供知识库节点查询的query。 | 输入: 名称 clothes , 在变量值区域选择 引用-意图识别-clothes,String类型名称 weight , 在变量值区域选择 引用-记忆变量-weight,String类型名称 height , 在变量值区域选择 引用-意图识别-height,String类型 输出: 类型 status , String类型 query ,String类型 |
1.代码节点测试 在节点IDE中编写代码节点,编写结束后可点击IDE左下角运行进行测试 2.将结果解析至输出参数 测试完成后,可将测试结果解析至右侧配置项输出参 |
|
知识库节点/知识库_1 | 在本次配置中,知识库节点支持对服装库的结构化数据进行切分,并且根据代码节点输出的query进行查询和召回。 具体步骤如下: 1.上传服装的结构化数据,包括服装编号、服装款式、服装类别、服装尺码等,选择知识库配置参数,构建【服装表格数据1】知识库。完成商户服装信息的上传。 2.创建完成后,进入知识库页面,点击修改配置数据 ,可修改索引设置。索引字段是进行切片检索的关键参照字段,可以通过索引字段配置来提高检索准确率。 3.可以对于知识库召回文件准确度进行测试。如下图所示,命中切片符合预期,召回准确。则调试完成,可以投入使用。 |
输入: 名称query,在变量值区域选择引用-代码_1/query,String类型 知识库参数: 检索策略: 混合检索 召回数量: 6 匹配分: 0.4 输出: Output_list,类型Array |
1.检索策略: 本次配置中文本数量较少,结构简单,选择最常用检索方式:混合检索。用户可以自定义检索方式,提高最终生成的答案的准确性和可用性。 2.召回数量: 本次配置根据文档切片数量,设定召回数量为6。 3.匹配分: 本配置中通过命中测试,观察到匹配分为0.4左右,召回的结果更全面。 用户可以自行定义匹配分,用来控制被检索召回的片段数量。 |
|
大模型节点/大模型_1 | 在本次配置中,调用大语言模型,根据知识库查询到的符合用户个人身高体重的商品尺码,给出商品尺码建议。 | 模型选择 选择模型,ERINE-4.0-8k模型 多样性:0.5 输入: 名称 content1 ,在变量值区域选择 引用-知识库_1/content,String类型名称 name ,在变量值区域选择 引用-记忆变量/name,String类型名称 rawQuery ,在变量值区域选择 引用-代码_1/query,String类型提示词:在本次示例中,依据提出建议的目的,撰写提示词 [目的]: 根据{{rawQuery}}给出回答,回答时,请根据{{name}}对于用户进行问候。示例:seren小姐,欢迎光临; 根据{{content1}}中提到的适合用户的服装尺码,给出针对用户身高体重的服装推荐。 [格式]:请输出为段落。 [细节级别]:请提供[详细]的回答。 [风格/语气]:使用[非正式,幽默]的语气。 输出:名称 answer ,类型String |
1.模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-8k模型回复更全面,语气更拟人,因此选择ERINE-4.0-8k模型。 2.多样性: 在本次示例中,为使得生成回答内容具有多样性,控制内容差异性为0.5。数值越高则模型每次输出内容的差异性越大,默认值为0,可调节范围0-1。 |
分支二适用于用户无意向商品,需要根据用户偏好推荐商品。节点配置如下表
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
记忆变量节点/记忆变量_1 | 在本次配置中,记忆变量节点用于写入用户query 中提到的购买偏好。写入配置包括写入变量名称和写入值,写入变量名称需要与 Agent 中的记忆变量名称需要相同才能匹配。 |
模式: 记忆变量写入 写入配置: 名称 style ,在变量值区域选择 引用-意图识别/preference_1,String类型名称 color ,在变量值区域选择 引用-意图识别/preference_2,String类型名称 type ,在变量值区域选择 引用-意图识别/preference_3,String类型输出: isSuceess ,Boolean类型style ,String类型color ,String类型type ,String类型 |
||
记忆变量节点/记忆变量_3 | 在本次配置中,记忆变量节点用于读取Agent配置中的用户个人信息:用户的姓名。 读取配置包括输出参数和读取变量。输出参数为该节点输出的参数名称,可以与变量名重名。读取变量中填写的变量名需要与Agent中的记忆变量名相匹配,若不满足则会运行报错。 |
模式:记忆变量读取 读取配置: 名称 name ,变量name输出: name ,String类型 |
||
代码节点 | 在本次配置中,该代码节点用于执行参数类型转换的任务,将记忆节点输入的参数 style,color,type合并成可以供知识库节点查询的query。 | 输入: 名称 style , 在变量值区域选择 引用-记忆变量-style,String类型名称 color , 在变量值区域选择 引用-记忆变量-color,String类型名称 type ,在变量值区域选择 引用-记忆变量-type,String类型输出: status , String类型query ,String类型 |
1.代码节点测试 在节点IDE中编写代码节点,编写结束后可点击IDE左下角运行进行测试 2.将结果解析至输出参数 测试完成后,可将测试结果解析至右侧配置项输出参 |
|
知识库节点 | 在本次配置中,知识库节点支持对服装库的结构化数据进行切分,并且根据代码节点输出的query进行查询和召回。 具体步骤如下: 1.上传服装的结构化数据,包括服装编号、服装款式、服装类别、服装尺码等,选择知识库配置参数,构建【服装表格数据1】知识库。完成商户服装信息的上传。 2.创建完成后,进入知识库页面,点击修改配置数据 ,可修改索引设置。索引字段是进行切片检索的关键参照字段,可以通过索引字段配置来提高检索准确率。 3.可以对于知识库召回文件准确度进行测试。如下图所示,命中切片符合预期,召回准确。则调试完成,可以投入使用。 |
输入:名称query ,在变量值区域选择引用--代码/Query,String类型知识库参数:服装表格数据1 检索策略:混合检索 召回数量:6 匹配分:0.40 输出: Output_list ,类型Array |
1.检索策略: 本次配置中文本数量较少,结构简单,选择最常用检索方式:混合检索。用户可以自定义检索方式,提高最终生成的答案的准确性和可用性。 2.召回数量: 本次配置根据文档切片数量,设定召回数量为6。 3.匹配分: 本配置中通过命中测试,观察到匹配分为0.4左右,召回的结果更全面。 用户可以自行定义匹配分,用来控制被检索召回的片段数量。 |
|
大模型节点 | 在本次配置中,调用大语言模型,根据知识库节点查询结果,给用户提出个性化的商品建议。 | 模型选择 选择模型,ERINE-4.0-8k模型 多样性:0.5 输入: 名称 name ,在变量值区域选择 引用-记忆变量_3/name,String类型名称 content , 在变量值区域选择 引用-知识库/content,String类型名称 rawQuery ,在变量值区域选择 引用-代码/query,String类型提示词: 在本次示例中,依据提出建议的目的,撰写提示词 [目的]: 根据{{rawQuery}}给出回答,回答时,请根据{{name}}对于用户进行问候。示例:seren小姐,欢迎光临;根据{{content}}中提到的符合用户偏好的商品,给出商品推荐,请推荐所有{{content}}中提到的商品。 [格式]:请输出为段落。 [细节级别]:请提供[详细]的回答。 [风格/语气]:使用[非正式,幽默]的语气。 输出: 名称 answer ,类型String |
1.模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-8k模型回复更全面,语气更拟人,因此选择ERINE-4.0-8k模型。 2.多样性: 在本次示例中,为使得生成回答内容具有多样性,控制内容差异性为0.5。数值越高则模型每次输出内容的差异性越大,默认值为0,可调节范围0-1。 |
分支三适用于用户为其他意图的兜底对话,节点配置如下表。
节点名称 | 功能 | 参数配置 | 配置示例 | 配置说明 |
---|---|---|---|---|
记忆变量节点/记忆变量_2 | 在本次配置中,记忆变量节点用于读取Agent配置中的用户个人信息:用户的姓名.读取配置包括输出参数和读取变量。输出参数为该节点输出的参数名称,可以与变量名重名。读取变量中填写的变量名需要与Agent中的记忆变量名相匹配,若不满足则会运行报错。 | 模式:记忆变量读取 读取配置: 名称 name ,变量name输出: name ,String类型 |
||
大模型节点/大模型_2 | 在本次配置中,调用大语言模型,在没有查询到符合用户意图的情况下,与用户进行兜底对话。 | 模型选择 选择模型,ERINE-4.0-8k模型 多样性:0.5 输入: 名称 name ,在变量值区域选择 引用-记忆变量_2/name,String类型名称 rawQuery ,在变量值区域选择 引用-系统参数/rawQuery,String类型提示词: 在本次示例中,依据提出建议的目的,撰写提示词 [目的]: 根据{{rawQuery}}给出回答,回答时,请根据{{name}}对于用户进行问候。示例:seren小姐,欢迎光临;表达没有满足用户意图的商品,欢迎用户下次光临。 [格式]:请输出为段落。 [细节级别]:请提供[详细]的回答。 [风格/语气]:使用[非正式,幽默]的语气。 输出:名称 answer ,类型String |
1.模型选择: 在本次示例中,经过多轮测试,在执行意图分类的任务时,ERINE-4.0-8k模型回复更全面,语气更拟人,因此选择ERINE-4.0-8k模型。 2.多样性: 在本次示例中,为使得生成回答内容具有多样性,控制内容差异性为0.5。数值越高则模型每次输出内容的差异性越大,默认值为0,可调节范围0-1。 |
步骤二:调试并发布组件
工作流调试
工作流配置完成后,可以调试工作流是否运行成功。
在组件的画布编辑页面,单击页面下方调试的图标,可在右侧进入组件调试面板。
组件调试面板配置参数:
-
系统参数:
-
rawquery:用户输入的原始内容。在本次配置中,示例为:
- 测试数据1:我想要买一条裤子,请帮我推荐一下~
- 测试数据2:我想要买5号商品,请根据我的身高体重推荐一下尺码。
-
- 关联应用:选择引用工作流涉及的变量的Agent
- chathistory:用户与应用的对话历史。本次配置中为空。用户在进行配置时,可以点击输入框右上角模版进行配置,也可以自行输入。
- fileUrls:用户可以上传文件。
- 配置完成后可选择“运行后将以上内容保存为测试数据”,输入测试数据名称存储本次测试数据。
- 本次配置测试结果如下:测试数据1结果(左图);测试数据2结果(右图)
发布组件
工作流调试成功后,可以点击页面右上角“发布组件”命名组件版本并将组件发布至个人空间。用户可以在个人空间-组件里找到历史创建组件。
组件发布后,用户可以将组件添加至应用或选择上架组件到组件广场。
步骤三:在应用中添加工作流并进行调试
撰写角色指令
角色指令是大模型回答问题时遵循的人设,可以根据需要进行修改和调试。以下是这个场景下一份角色指令的样例。
#角色设定
作为用户的服装推荐小助手,你的目标是根据用户个人偏好和信息,帮助用户进行服装尺码推荐和服装款式推荐。
#组件能力
你拥有专业的商品数据库,并能够根据用户的需求进行服装导购。
#任务要求
1.以亲切、幽默的方式与用户交流,提供服装导购建议。
2.根据用户的个人情况和需求,推荐适合他们的服装尺码和服装款式,并解释推荐的理由。
3.确保回答符合用户意图,可调用组件对用户意图进行分类
温馨提示:可以运用AI指令优化一键优化指令哦!
添加组件
添加记忆变量
应用调试
在“预览与调试”界面,可以查询相关问题并进行调试。
当我们提问“我想要购买6号商品,请推荐尺码”时,应用调用组件,准确结合用户的个人信息返回了尺码推荐:
当我们提问“我喜欢黑色的上衣,有适合的商品吗”时,应用调用组件,准确结合用户的个人偏好返回了商品推荐: