工作流组件深度使用实践
概述
这是一篇深度使用工作流组件的教学文档,会详细介绍一个复杂应用(包含多个工作流组件)的搭建和调试过程。通过这篇文档,你可以找到如下这些问题的答案:
1、如何搭建一个通过API接口查询信息的组件?
2、如何从用户query中抽取信息并将这些信息应用到工作流组件,如何提高信息抽取的准确性?
3、如何让你的组件有上下文理解能力?
4、如何让应用按照固定的格式输出内容?
5、如何提升百度搜索组件的效果?
6、应用无法准确地调用目标组件或知识库,怎么调优效果?
应用介绍
我们需要搭建出一个销售助手的应用,为销售人员提供解决方案查询、客户信息查询、行业动态查询、业务知识问答服务。每个能力的实现方式如下:
1、解决方案查询和客户信息查询:需要通过工作流搭建相应的组件,在组件中通过API接口查询相应信息。
2、行业动态查询:依托官方的百度搜索组件查询行业动态。
3、业务知识问答:依托知识库实现业务知识问答。
搭建和调试过程
1、应用创建
具体的应用创建过程详见应用创建章节。
2、解决方案查询和客户信息查询组件搭建
解决方案查询和客户信息查询组件这两个工作流组件的搭建过程比较类似,下面以解决方案查询为例进行讲解。
解决方案查询需要调用API接口获取解决方案信息,这个API接口的输入信息包括行业和关键词,输出为通过该行业及关键词查询到的解决方案信息列表,包括方案名称、方案介绍和方案详细信息链接。
我们可以先搭建一个最简单的工作流,包含开始、API和结束节点,如下:
API节点按照解决方案查询的API接口文档进行配置,具体配置过程详见API节点。
该API接口输入的行业和关键词信息需要从销售人员输入的query里面抽取出来,我们可以在开始节点配置这些需要抽取的信息,具体如下:,
在开始节点配置完成上述参数后,当应用的思考模型调用该组件时,会从销售人员的query里面自动抽取行业名称和关键词。
那么问题来了,如果思考模型自动抽取参数的效果不好怎么办?
我们可以在工作流里面增加大模型节点来抽取信息,这样我们就可以灵活地对信息抽取效果进行调优,具体如下:
信息抽取的prompt参考如下:
你是一位解决方案专家,请从用户表述和历史对话中识别用户关注的行业,必须一字不差的匹配到如下唯一的一个行业,包括:大制造、运输物流、能源电力、金融、泛科技、生命科学、泛互、媒体、产业创新、教育、农业、居民服务、批发零售、住宿餐饮、房地产、商务服务、医疗、交通、汽车、智慧城市、城市、政务创新、应急、公检法、文旅、养老、综合、水务、生态环境、运营商
如果无法匹配到行业,则输出『无』
示例:
用户:我的客户是银行,比较关注数字人,有啥推荐的方案
输出:金融
示例:
用户:针对中国移动有啥能推的解决方案
输出:运营商
示例:
用户:数字人的解决方案
输出:无
以下是真实场景:直接输出结果,不要解释说明!
用户:{{query}}
对话历史:{{history}}
输出:
上述prompt有个关键点,引入了对话历史这个参数,让这个组件具备了上下文理解的能力,大模型可以根据对话历史,抽取到这个销售人员关注的行业信息。
这样就解决了API接口的输入信息问题,那么下一个问题来了,按照目前的配置,API接口输出的内容会直接给到应用的问答模型进行润色后最终输出给销售人员,但是问答模型的最终输出内容会出现格式不稳定或者漏信息的问题,那如何让应用按照固定的格式输出内容呢?
解决这个问题的方法分为两方面,首先是将API接口输出的内容转换为我们预期的格式,然后让应用直接输出该内容,不再通过问答模型。首先如何将API接口输出的内容转换为我们预期的格式呢?这里有两种方式,一种是通过大模型节点进行格式转换,一种是通过代码节点进行格式转换,前者不需要写代码,门槛更低,但格式转换的稳定性没有后者高。两种方式具体如下:
下面是大模型节点的方式进行格式转换,工作流配置如下:
格式转换的大模型节点的prompt参考如下:
#角色任务
你是一位智能销售助理,你必须严格按照要求的格式回答问题。
你需要输出全部相关的方案信息!
仅基于你获取到的方案信息进行回答,不要给出其他的方案!
#输出内容格式要求
你需要基于参考信息,严格按照以下格式要求回答问题。注意不要输出其他字段信息。注意仅回复与问题相关的方案信息。如果你获取到的字段信息为空,则显示无。
参考信息:{{content}}
注意要严格按照以下格式回复,不要漏掉任何信息!回复格式:
方案名称:
详细URL:
方案介绍:
下面是代码节点的方式进行格式转换,工作流配置如下:
代码节点的代码参考如下:
在格式转换之后,需要将该内容跳过应用的问答模型直接输出给销售人员,需要进行如下配置:
按照上述完成应用回复配置后,该组件的输出结果将跳过应用的问答模型,直接输出给销售人员。
3、行业动态查询组件搭建
行业动态查询需要调用官方的百度搜索组件获取最新的行业动态信息,我们可以直接在应用里面添加百度搜索官方组件,具体如下:
如果百度搜索组件输出的结果不满足预期怎么办?
百度搜索组件输出的效果主要依赖输入给百度搜索的搜索query,如果效果不好,解决办法是将搜索组件编排到工作流,在搜索组件前面增加一个搜索query改写的大模型节点,具体如下:
query改写的prompt参考如下:这个改写的核心目的一方面是上下文理解改写,一方面是搜索主体总结。
你是一位语言学家,你善于根据上下文,理解用户当前的搜索主体。请你基于对话历史和用户当前query,改写精炼出用户当前真实的搜索主体。
以用户当前意图为准,不要改变用户当前的意思。
仅输出用户当前的搜索主体,
不要直接回答该问题。
不要输出多余的内容。
当对话历史与用户当前query无关联时,请直接输出当前query的搜索主体。
示例:
对话历史:
用户:上周你去哪了
Assistant:我上周去上海玩了
用户当前query:那边天气怎么样
输出:上海上周的天气
示例:
对话历史:
用户:有啥好吃的地方推荐吗
Assistant:北京这边还真的有几家挺好的
用户当前query:推荐一下呗
输出:北京美食
示例:
对话历史:
用户:民生银行合作多少年了?
Assistant:8年了
用户当前query:中国移动有什么新动态
输出:中国移动新动态
以下是真实场景:注意当对话历史与用户当前query无关联时,请直接输出当前query的搜索主体。
对话历史:
{{context}}
用户当前query:{{query}}
输出:
注意:百度搜索组件有两个版本,如下,上面的百度搜索组件输出原始的搜索结果(相关信息的数组数据,一般需要在后面搭配一个大模型节点进行总结),下面的百度搜索总结组件输出大模型基于原始搜索结果的总结内容,除了输出内容的差异,包含百度搜索组件的工作流组件不支持跳过应用问答模型直接输出,而包含百度搜索总结组件的工作流组件支持跳过应用问答模型直接输出。
4、业务知识库创建
知识库创建详见创建知识库章节。
5、应用调试
在组件和知识库均配置完成后,进行应用调试,最容易出现的问题就是应用的思考模型无法准确地调取相应的组件或知识库进行回答,这种情况如何调优呢?
最有效的手段就是优化组件描述和知识库描述,描述话术的结构可以为概括描述+正向枚举示例+负向枚举实例,举例如下:
行业动态查询组件的描述如下:
需要在百度搜索中查询的公开信息,包括行业动态、客户动态、公司合作动态、新闻、政策等,注意不包括招投标信息。
以下为需要调取该组件的query示例:
金融行业有什么新动态?
以下为不要调取该组件的query示例:
最近有什么银行在招大模型的标?
注意:当一个API接口可以满足多个职能时,比如一个API接口可以查询方案名称、查询方案联系人、查询方案案例,可以将这一个接口配置到三个组件,这样可以提高组件调用的准确率。