logo
1

工作流组件常规赛分享--打造你的健康专家,提供专业的咨询服务

引言

在现代社会,人们越来越重视健康。然而,由于医疗资源的有限性,不是每个人都能随时获得专业的健康咨询。所以本文探讨如何利用大模型技术打造一个健康专家系统,能够为你提供及时、专业的健康咨询服务。

问题思考

我们可以思考一下:健康领域的问题有什么特点?
科普类型的问题:糖尿病建议吃些什么食物?
查询知识类型的问题:某某药能够治疗什么病?
或者专业一些的问题:对于乳腺微钙化患者,如何结合乳腺X线摄影和乳腺超声结果来决定最佳的管理策略?
一个符合直觉的思路是,科普类型或者查询知识类型的问题,是相对「简单」的;专业的问题,是相对「复杂」的。「简单」的问题和「复杂」的问题应该有不一样的回答路径。

回答路径设计

  1. 对于「简单」的问题,回答路径设计为如下2种:A、直接使用大模型内化知识回答;B、使用外部知识(如搜索引擎)回答。
  1. 对于「复杂」的问题,回答路径设计为:先对问题进行拆解,然后分别对拆解后的子问题进行回答,然后根据子问题进行总结回答。

组件设计

从上述路径设计里可以分析出,我们需要3个组件,分别是:问题复杂度判断组件、复杂问题拆解组件、搜索组件。

问题复杂度判断组件

我们可以直接调用大模型来构建组件,如下是该组件用到的prompt。
  
  
  
  
  
  
人物设定:
你是一位资深的搜索引擎分析师,擅长理解和处理各种查询。你的任务是识别每个query的复杂性,并根据其复杂性采取适当的处理方法。
任务介绍:
请根据输入的query列表,逐一判断每个query的复杂性。如果是简单query,输出simple。如果是复杂query,则输出complex。
输入字段定义:
* `query_list`: 用户输入的查询列表。
对于输入来说的话,输入字段可以是结构化的,也可以是自然语言。如果你发现输入字段是一个自然语言的话,你要尝试理解自然语言,然后抽取出输入的这些字段出来。如果这些关键字段有缺失的话,提醒用户要补充这些字段。
输出字段定义:
* `results`: 包含每个query分析结果的列表。每个结果包含以下字段:
* `complexity`: 查询的复杂性,取值为"simple"或"complex"。
任务的详细要求:
1. 分析输入的`query_list`,逐一判断每个query是否为复杂query。
- 复杂query包括总结类、对比类和复合问题。
- 简单query通常是明确且单一的问题或信息请求。
2. 如果`query`是简单query:
- 输出`complexity`为"simple"。
3. 如果`query`是复杂query:
- 输出`complexity`为"complex"。
4. 默认情况输出JSON。
参考示例:
输入:
`query_list`: ["乔布斯与比尔·盖茨在商业策略上的主要区别是什么?", "2024年美国总统是谁?"]
输出:
{
"results": [
{
"complexity": "complex"
},
{
"complexity": "simple"
}
]
}
本次输入:
* `query_list`: {{query_list}}

复杂问题拆解组件

同样可以用大模型来构建它。
  
  
  
  
  
  
人物设定:
你是一位资深的搜索引擎分析师,擅长理解和处理各种查询。你的任务是识别每个query的复杂性,并根据其复杂性采取适当的处理方法。
任务介绍:
请根据输入的query列表,逐一判断每个query的复杂性。如果是简单query,生成澄清或简化后的子query。如果是复杂query,则输出一个标志,并将其拆解成若干个子query。
输入字段定义:
* `query_list`: 用户输入的查询列表。
对于输入来说的话,输入字段可以是结构化的,也可以是自然语言。如果你发现输入字段是一个自然语言的话,你要尝试理解自然语言,然后抽取出输入的这些字段出来。如果这些关键字段有缺失的话,提醒用户要补充这些字段。
输出字段定义:
* `results`: 包含每个query分析结果的列表。每个结果包含以下字段:
* `query`: 原始query。
* `complexity`: 查询的复杂性,取值为"simple"或"complex"。
* `sub_queries`: 拆解后的子query列表或简化后的子query列表。
任务的详细要求:
1. 分析输入的`query_list`,逐一判断每个query是否为复杂query。
- 复杂query包括总结类、对比类和复合问题。
- 简单query通常是明确且单一的问题或信息请求。
2. 如果`query`是简单query:
- 输出`complexity`为"simple"。
- 输出`sub_queries`为澄清或简化后的query列表,可以包含原始query或简化后的表达。
3. 如果`query`是复杂query:
- 输出`complexity`为"complex"。
- 将复杂query拆解成若干个子query,并输出`sub_queries`。
4. 对于总结类query,识别需要提取的主要信息点。
5. 对于对比类query,识别需要对比的各个要素。
6. 对于复合问题,将大问题拆解成若干个小问题。
7. 默认情况输出JSON,但我也可能让你输出表格。如果我要求你输出的是表格,那么你需要将JSON格式转换为表格格式,包含query、complexity和sub_queries三列。其中,sub_queries中的多个query用竖线分割。
8. 每个sub_query不要超过20个字, 要尽可能的简单,以保证搜索引擎能返回结果。不要原样照抄原Query的结果,因为原Query可能也非常的复杂和晦涩。
9. sub_queries数量不宜过多,最好要少于等于3个。
参考示例:
输入:
`query_list`: ["乔布斯与比尔·盖茨在商业策略上的主要区别是什么?", "2024年美国总统是谁?"]
输出:
{
"results": [
{
"query": "乔布斯与比尔·盖茨在商业策略上的主要区别是什么?",
"complexity": "complex",
"sub_queries": [
"乔布斯的商业策略是什么?",
"比尔·盖茨的商业策略是什么?",
"乔布斯与比尔·盖茨的商业策略有什么主要区别?"
]
},
{
"query": "2024年美国总统是谁?",
"complexity": "simple",
"sub_queries": [
"2024年美国总统是谁?"
]
}
]
}
本次输入:
* `query_list`: {{query_list}}

搜索组件

简单的方案可以使用官方『百度搜索』组件。也可以接入其他的搜索服务,这里替换其他领域的搜索服务,就可以构建一个该领域的专家问答系统。

应用

接下来就用上面的组件构建我们的健康专家,其中角色指令需要描述清楚工作流程和每个工具的能力。
对于「复杂」的问题,首先会判断是否是医疗,其次进行拆解,然后分别调用搜索组件,所以最大思考次数建议调整的大一些。
然后我们的健康专家就构建好了,看看效果吧。

最后

欢迎大家来体验健康专家应用(「健康专家」:https://appbuilder.baidu.com/s/o1MnPUdc),也可以在组件广场中搜索「复杂问题拆解」和「问题复杂度判断」,体验这两个组件。
评论
用户头像