好的提示词有一些共性的组成部分。首先必须有一个任务,你要完成什么事。第二个成分是给它的输入是什么,比如我的开头是今天天气真好,请你帮我续写一段话,今天天气真好就是输入。第三,为了得到更好的输出,还经常使用上下文,比如我要写一篇散文,大概多少字。这是一种上下文,能够帮助它更好的去生成。第四种,叫做示例,实在说不明白就举几个例子,把输入和期望的输出列举一下,就像排比句,大模型会类比输出。第五,做应用开发的时候,它并不是跟人聊天儿,而是跟程序打交道,就要求它输出特定的格式。例如输入一段快递地址,我要求它以JSON格式输出,其中包含address、mobile phone和name三个字段,它就能理解并生成JSON。
这些元素有不同的排列组合,就会形成大家总结出来的不同模版,适用于不同的任务。和原来用关键字检索的体验不同,用大模型更强调交互,更自然的交流。提示阶段,大家可以勤快多试,搜索学习别人的经验,也可以把自己的经验贡献给大家。
4、熟悉了提示工程,第二阶段尝试引入行业的专有知识库,做一些行业信息融合,有哪些建议?
首先还是顺着提示工程的思维去想,从提示的角度来看,第二阶段我做的事是什么?举个例子,我问大模型XX是谁?它可能不知道。从提示角度来说,你不知道,我就把XX的简历从电脑里翻出来,粘给大模型说这是XX的简历,你先好好学习一下。再去问,请告诉我XX是谁?它就能通过投喂的语料去回答。
从提示角度来说,用了一个提示词的技巧叫上下文(context)。这个技巧让大模型具有了一个私有知识的能力。这是第二阶段原理从提示词角度的解释方式。
但是,难道每次问点什么都要从电脑里Ctrl C + Ctrl V给它才行吗?这不现实,那就要把它程序化。把我希望它掌握的这些知识都放到向量数据库里,再额外写一个程序。每次我问一个问题,让它帮我去数据库把相关信息搜出来之后,输入到大模型里,然后大模型就会回答了。这是第二阶段的基本原理。
如果我们把它变成一个项目的话,可以理解成两个阶段。
第一个阶段是行业知识的预处理加工融合,把它放到向量数据库里;第二个阶段,查询或者提问的时候,会先到向量数据库里去做一些匹配,再把匹配出来的相关信息封装,组成一个完整的提示词,送给大模型,大模型的结果再呈现给用户。
原理很简单,但是里面有一些类似向量这种名词,可能会对非技术人员造成困扰。通俗解释一下,向量是一段实际数据的一种数学表达方式,通过embedding(可以认为它是一种编码)把任何一段数据生成一个向量,也就是多维空间里面的一根带方向的线。