基于记忆变量打造的MBTI性格测试助手
整体概述
本次实践构建的是一款MBTI性格测试助手,助手可以通过向用户问出测试问题,用户回答完所有问题后助手总结归纳判断用户的MBTI画像。【记忆变量】记录了MBTI中各个性格维度的值与对话的轮次,点击此处体验。
概念阐述:
记忆变量:通过添加记忆变量可以让智能体记住用户的关键信息,生成更符合用户特征的回答;也可以记录轮次、回合等变量实现多轮次的复杂交互。(记忆变量详细内容参考https://cloud.baidu.com/doc/AppBuilder/s/memory)。
工作流组件:组件是用于扩展智能体应用能力边界的配置项,工作流是创建组件的编排工具。当组件功能涉及多个复杂步骤,同时需要准确且按规定格式的输出时,工作流编排可以让组件实现复杂且稳定的业务流程。(工作流组件详细内容参考https://cloud.baidu.com/doc/AppBuilder/s/klv0f0ckc)。
本次实践主要用到了记忆模块的记忆变量,对性格倾向评分和对话轮次进行计数;同时使用工作流组件,实现按照答题轮次依次顺序传输给用户性格测试题。
应用能力
mbti测试助手的主要能力如下:
- 题量选择:用户可以选择4题、8题、32题三种题量测试。题量越多最终测试结果越准确。
- MBTI问题生成与提问:内置mbti测试题题库。与用户对话时,可以按照顺序稳定生成问题,引导用户回答性格测试题。
- 轮次识别:用户每次回答完一个问题为一个对话轮次,应用自动记录对话轮次。
- 性格倾向判断与计分:基于用户的每轮回答结果判断用户的性格倾向,并记录每种性格的得分情况。(积分规则说明:模型对每次回答选项判断性格倾向性,若用户回答偏“E”,则变量“E”+1)
- mbti分析:完成所有问题后,根据用户的所有性格得分推测用户的mbti,并进行一定分析。(积分规则说明:问答环节结束后,模型读取所有性格变量。分别对比I与E、S与N、F与T、J与P四组值中哪个更大,取较大的性格倾向组合为用户的性格标签)
构建思路
1.构建一个记忆变量turn用来记录对话轮次
2.构建一个记忆变量end_turn用来记录用户选择的题量
3.构建一组记忆变量用来记录性格倾向
4.构建一个组件用来稳定传输mbti题库
流程梳理
1.用户选择MBTI测试题量,记录为end_turn。
1.用户输入query后,进行用户意图识别。若是开始则执行步骤3、4;若是回答问题则进入步骤2
2.结合模型生成的问题和用户的回答判断用户的性格倾向,且对应变量值+1;对话轮次值+1
3.对turn值进行判断,若≤end_turn执行步骤4;>end_turn执行步骤5
4.将turn值作为入参传入组件,生成下一轮的问题向用户提问
5.终止提问,根据当前记忆变量的值分析用户的MBTI
整体设计思路如下:
应用配置
1.提示词编写
模块 | 内容 | 说明 |
---|---|---|
人设 | 你是一个MBTI性格测试助手。 | 智能体所扮演的角色,它决定了智能体的主要功能和目标用户群体。角色设定还可以增强智能体回答的整体风格,同时也能更好地模拟人类的交流方式,提供更有情境化的交流体验。 |
任务路由 | 用户存在两种输入,根据不同的输入执行不同的组件调用顺序。 | 在复杂任务中,或涉及到状态路由的任务中,如果使用单智能体而非工作流的方式,需要提前说明在每次执行任务时需要智能体需要根据意图路由到对应任务。 |
任务 | 1. 用户输入选择题量,调用记忆变量组件设置[turn]为0,将{endturn}设置为用户选择的题量。 2. 用户输入其他,首先判断{query}内容类型,可选的有"外向”、“内向”、“实感”、“思考”、“直觉”、“情感”、“判断”、“随性”。根据类型结果,调用记忆变量组件对相应的变量+1,同时[turn]+1;随后根据当前记忆变量内容中[turn]对应的记忆变量值调用"MBTI题库"组件。 |
1. 具体任务,格式为:路由条件+具体任务内容。 2. 在引用记忆变量或用户query时,使用[0]格式可以提高引用的准确率。 |
约束 | 1. 请不要连续调用同一个功能 2. 调用mbti题库组件时,先确认当前[turn]的参数值,调用不需要对turn参数进行改写或重复更新 3. 当[turn]>[endturn]时终止提问,并根据记忆变量分析用户的mbti(判断规则:对比E和I、S和N、T和F、J和P四组数据,取较大的值) |
对于模型行为的约束,它决定了智能体不能做哪些行为,或与整个任务循环相关度不高的规则。可以通过在此添加约束减少调试过程中出现的幻觉问题。 |
Tips:1.在提示词编写中,越靠前的内容权重越高,越优先执行;2.保持Prompt的简洁,以保证每条任务都能够执行。
2.定义变量
在应用配置页的记忆模块添加记忆变量。此处记忆变量的作用有两个:1.记录每轮对话用户的性格倾向,让模型判断后,对应变量值+1;2.记录对话轮次,每完成一轮对话该值+1。
变量参数信息如下:
名称 | 描述 | 默认值 | 用户数据记忆时长 |
---|---|---|---|
E | 外倾、交往、社交、分享 | 0 | 单次会话 |
I | 内倾 | 0 | 单次会话 |
T | 思考、逻辑、分析 | 0 | 单次会话 |
F | 情感、人际关系、情感价值 | 0 | 单次会话 |
S | 感觉、实际、现实、具体 | 0 | 单次会话 |
N | 直觉、抽象、理论、可能性 | 0 | 单次会话 |
J | 判断、计划、调理、规划 | 0 | 单次会话 |
P | 随性、灵活、开放、变化 | 0 | 单次会话 |
turn | 记录对话轮次 | 0 | 单次会话 |
end turn | 用户输入的结束轮次 | 0 | 单次会话 |
3.创建组件
在个人空间-组件中创建组件。此处组件的作用有1个:根据当前对话的轮次,生成对应轮次的mbti问题。输入参数为记忆变量中{{turn}}的值,输出为对应编号的问题。功能的实现使用了代码组件的能力,用来识别入参和输出问题。
3.1添加组件:
在应用配置页点击添加组件,在【我的组件】中找到mbti题库(现已上架至组件广场),点击【添加】。
点击编辑组件描述,编辑组件描述让智能体理解该组件的调用规则。
4.模型配置:
思考模型
1.在复杂任务场景推荐选择和ERNIE-4.0-Turbo-8K或ERNIE-4.0-8K,思考准确率和稳定性更高
2.最大思考次数:推荐为2,因为单轮对话中至多调用两次扩展能力,第一次是根据回答调用记忆变量并改写变量,第二次是调用组件生成新的问题。(调低可能会产生思考轮数不足,无法执行多次任务规划;调高后可能会出现任务重复执行的现象)
问答模型
1.因在任务末尾有一个MBTI分析的复杂任务,推荐选择ERNIE-4.0-Turbo-8K或ERNIE-4.0-8K。
2.核心数据已经通过变量存储,因此不需要设置过高的参考对话轮数,避免出现幻觉问题。
5.回复设置
因为部分回复内容是调用mbti题库生成的问题,因此不需要再用问答模型进行总结,用组件输出内容作为回复即可。
点击模型配置左侧的【应用回复设置】,打开直接回复的开关,选择mbti题库作为回复的节点。在【按模板配置格式回复】中输入“@”,选择组件输出的参数。
可以在组件编辑页查看组件的输出参数。
6.智能体对话设置
开场白:说明Agent的能力和简单的交互规则,引导用户开始对话。
推荐问:引导用户在对话开始时按照规则进行提问。
7.测试并发布
完成所有配置后,你可以在右侧测试栏测试智能体效果。效果满意,可以点击发布至应用广场。