构建对话式应用
对话式应用的特点
- 交互性
使用自然语言,文本,声音来直接和应用互动,使用成本和学习成本低
- 智能化
能够通过对话式应用的载体较为全面的发挥出大语言模型的功能,例如逻辑、记忆、理解、生成
- 跨设备支持
对于不同种类的设备都能有很好的支持,例如手机、手表、网站、音响等,都能够落地展现出不同场景的支持能力
对话式应用的开发流程
评估一个对话式应用的标准,一是要降低用户使用学习的门槛,二是要能够准确识别用户的输入和上下文语境,以此来生成高质量的结果
一般来说开发的过程有如下五个模块
- 基座模型选型
- 参数设计
- 系统提示词设计
- 示例设计
- 检索增强数据库设计
基座模型的选型
我们使用飞桨大模型社区来进行应用构建,以我自己的项目为例
这里有五个基础的预制模型,可以查阅他们的区别和优势根据自己的需求选择使用,这里我选择LLaMA-13B
参数的调整
除此之外有两个模型参数,一个是Temperature
我们需要根据自己的需求,温度越高,输出其他词的可能性也越高
第二个参数是TOP_P,他的意思就是采样和选择
这里我们就需要通过大量的实验来确定相应的参数选择了
除此之外还有一个策略叫做Top_K,他的意思是选取概率最大的前K个词作为候选,这种策略的好处就是计算量小,而且一定程度上可以保证回答的质量,但是也有一定的概率导致文本过于聚焦,缺乏多样性
系统提示词设计
提示词设计就对应了界面中的
这里就涉及到了提示词工程的概念,这里的工程就指的是系统化、结构化、迭代化
提示词是用于提示和引导模型的输出更加准确,更有针对性的设计
因此我们就需要学习一定的框架和流程,以确保提示词设计的正确性和合理性
提示词分类
提示词可以分为用户提示词和系统提示词
那我们作为对话式应用的开发,就写的是系统提示词了
提示词框架
框架用的是全局思考,整体的篇章结构
这里给出一些尽可能全面的框架
这些框架的一个共同点就是分层,分点,分模块的进行描述
这里我用这个框架来描述我的旅行规划师的基本框架,这只是一个简单示例,具体还需要更精细化的调整
1 | # 角色:旅行规划师 |
提示词技巧
技巧是用于优化的,定向修改的,要指导用户自己适时快速和灵活的打造合适的提示词,而不依赖系统内置的提示词
写出清晰的指令
- 说清楚——在你的输入中包含详尽的信息,以获取更为准确的答案
- 演到位——要求模型采用角色
- 排好版——使用分隔符清楚的指令输入不同部分,让大模型区分什么是你的任务指令,什么是待处理信息,什么是举例输出
提供参考资料
可以提高大模型的时效性和针对性
示例设计
我们可以将一些类似的问题+答案作为prompt的一部分进行输入
但是对于环节众多的任务或者是高级推理的任务,通过碎片化的学习很难取得很好的效果
这时候我们就需要引导大模型将复杂任务拆解为多个子任务,也称之为思维链
这里重在模拟思考和推导的过程
随着基座模型的增强,大模型也能够产生思维的效果
除此之外,我们可以使用LtM的提示法,每次只问其中的一小部分问题,在多轮互动中来输出准确结果