跳过正文

·63 字·1 分钟
Chuck Chan
作者
Chuck Chan
分享技术、思考与生活

1. 提示词
#

提示词也叫Prompt,是我们与大模型应用交互的唯一桥梁,简单来说就是我们给大模型的输入,例如我们在ChatGPT里的提问的问题,就是一个提示词:

用户提示词,除了用户提示词外,还有系统提示词。系统提示词可以简单地理解为一个自我介绍,例如扣子平台上的人设与回复逻辑:

提示词是贯通整个大模型应用的灵魂,所有应用层的技术,都是为了拼出一条合适的Prompt,在应用技术层无论我们做多炫酷的设计,最终都是为了传递合适的Prompt给大模型。

Prompt分类
#

Prompt的内容可以大致分为以下几类:

  • 身份设定:例如“你是一个法律领域的智能助手”
  • 背景设定:例如“你的年龄是在20岁左右的女生”
  • 参考资料:例如“请你参考xx资料”
  • 样例:例如一些门店提前准备的样例话术,下面会举例说明
  • 指令:例如“请你帮我总结一些这段文本”
  • 条件限制:例如“回答的时候不要超过200个字,尽量口语化”

在这些内容中,参考样例是比较重要的两个点,如果可以,提问的时候尽量将这两个内容加入Prompt中。

Zero-Shot、One-Shot、Few-Show
#

我们以Prompt中样例的数量给Prompt划分为三种类型:

  • Zero-Shot:没有一条样例
  • One-Shot:仅有一条样例
  • Few-Show:有多条样例

我们可以使用扣子平台来搭建一个Sony智能销售的客服,来看看不同的样例数对大模型的输出会造成什么影响。假设我们有以下一个场景:

场景:妈妈在给小孩挑游戏机做礼物,正在比较Switch和PS5 用户:感觉价格方面,Switch性价比高,PS5要贵不少吧?

来看下没有样例的回答,这个回答不能说错,但是算不上出色,其回答仅仅基于大模型在其训练的数据组装而成,并没有对问题本身做一些针对性的回答(从表面上看,用户可能是价格敏感性的)。

再来看下有样例的回答,能做出一些针对性的回答,要比没有样例的效果要好,且允许设置一些定制化的话术。

2. RAG
#

前面我们演示了在Prompt中加入样例能提升回答的效果,但是这些优秀样例是我们提前准备好的,而且用户的问答是变化的,我们不可能把所有的样例都塞到Prompt中,那能否根据用户的问题,动态地加入与之相关的样例呢?这就是RAG了。RAG的全称是Retrieval-Augmented Generation,即检索增强生成。用人话来说就是大模型在回答问题之前,先做一轮内部知识库搜索

将参考资料、样例放在 Prompt 中,就叫做 In-Context-Learning,但模型能接收的提示词有字数限制,且提示词内容多了性能会严重下降,所以需要一个知识库,需要的时候就去知识库里找一些有用的信息。构建一个RAG有以下两个步骤:

  1. 构建可检索的知识库
  2. 模型调用知识库完成用户任务

知识库构建
#

这里先不详细赘述如何切片、如何向量化,后面会详细讲如何做这些操作,这里只要理解把构建知识库就是把内部的文档转换成向量数据库。

调用模型
#

经过上述步骤构建好一个知识库后,可以通过余弦相似度来比对两个向量是否相近,于是乎整个调用流程如下:

  1. 将用户的Prompt(暂且先叫他Query吧)向量化,与知识库的向量数据库做相似度对比,得到一系列比对结果,即与当前用户Query比较相似的文档切片。
  2. 将Query+文档切片+系统Prompt组合成一个新的Prompt。
  3. 将新的新的Prompt丢给大模型,输出结果。

整个RAG的全景图如下:

RAG是全世界最流行的AI技术,也是AI领域最大的坑

RAG案例
#

在扣子平台上搭建一个企业内部办事助手为例,使用某公司内部的企业制度文档来做一个用于检索的知识库。

由上,中间的word文档是公司内部原始的规章制度文档,将其制作成知识库后,大模型的输出几乎与原始的制度文档一致,效果非常nice。

3. RAG高级技巧:双向奔赴
#

query改写技巧
#

汇总上下文的所有信息,总结用户核心诉求作为query

知识库改写技巧
#

  1. 场景的理解:完全清楚用户都会问什么,都会怎么问
  2. 对技术的理解:用户问题的分类、不同类型的问题对应的知识库、每个知识库的知识处理方式