首先我们得明确一个点,llm的本质根据前面每一个字预测下一个字,也就是自回归模型。
举个例子,把“我爱”发给llm,llm会根据前前两个字预测第三个字可能是“你”,“吃”,“玩”,然后拼接成“我爱你”、“我爱吃”“我爱玩”。预测下一个字的范围很大,“你”,“吃”,“玩”等等可能的词很多,范围很大,每个词指向的方向都不一样,“你”是表白、恋爱方向,“吃”是美食方向,“玩”是娱乐方向
而提示词,就是在这些话前面拼接上一段话,则是将这个范围缩小,方向更加明确。
最基本的提示词是告诉llm它的身份,比如“你是一个吃遍天下美食的吃货”,然后将提示词和内容,组合到一起,就变成了“你是一个吃遍天下的吃货,你爱__”可选项范围就收窄了很多,方向“美食”更明确,原来的“你”,“吃”,“玩”,只剩下了“吃”。
所以我们给的提示词并不是让模型成为某一个人,或者具有某一种特质,而是把这个“方向”告诉他,但我们的写法依然是“你是一个……”
多轮对话也是如此,他将之前每次跟模型的对话都记录下来,与现在最新的问题拼接在一起,给到LLM,让他明确下一个字的方向,然后自回归生成回答。
RAG也是如此,看似你将答案给到llm,他理解了答案,然后回复你。但实际上它依然是根据方向来自回归生成回复,而答案本身就是回复你的问题的最佳方向。
举个例子:提问llm“什么是苹果”,RAG召回了“苹果公司的信息”,一起给到模型,苹果公司的信息,将你提问的苹果,更加明确“一家公司的信息,具体的时间,地点等等”的方向,而模型就往这个方向生成回复。
这就解释了,为什么当我们把一个问题的答案(未作为模型训练数据)放在上下文,然后让llm生成回复的时候的准确率仅为17%左右。因为他一直在根据方向生成回复,而不是理解内容。
更加解释了为什么RAG可以有效减少幻觉,因为把方向更加明确了。
这个方向是模型训练过程中训练出来的,这就是模型权重计算后的结果。
个人见解,如有问题或错误,请指正。