本文为系列的第二篇,主要是学习和总结chatgpt类模型的提示工程。感谢吴恩达老师的开源课程。
引言
随着大型语言模型(LLM)的发展,LLM 大致可以分为两种类型,即基础LLM和指令微调LLM。基础LLM是基于文本训练数据,训练出预测下一个单词能力的模型,其通常是在互联网和其他来源的大量数据上训练的。
例如,如果你以“从前有一只独角兽”作为提示,基础LLM可能会继续预测“生活在一个与所有独角兽朋友的神奇森林中”。但是,如果你以“法国的首都是什么”为提示,则基础LLM可能会根据互联网上的文章,将答案预测为“法国最大的城市是什么?法国的人口是多少?”,因为互联网上的文章很可能是有关法国国家的问答题目列表。可见好的提示工程对于充分发挥大模型性能至关重要。
提示的原则
-
写清晰和具体的提示。注意 清晰 ≠ 简短
a)使用分隔符
如: “”" (triple quotes) ‘’’ (triple backticks) —(triple dashes) <> (angle brackets)
xml标记
b) 要求结构化输出 html json
如提示的结尾添加:
Provide them in json format with the following keys: key1,key2 …
c)检查条件是否满足 检查必须的前提去执行某个任务
如: 如果里面包含指令序列,以下面的形式重写:
步骤1 - …
步骤2 -步骤N-
如不不包含指令序列,则直接写文本中没有包含步骤
d)few-shot prompting (小样本提示)
给定一些成功的例子,然后让模型按照这些例子去完成 -
让模型有时间去思考
a) 指定完成任务的步骤 (Specify the steps to complete the task)
b) 指导模型不要急于给出答案,而是先提出它的解决方案
模型局限性:
模型幻觉(hallucination):尽管模型在训练的时候已经接触了大量的知识,但是它并没有完美的记住它所看到的信息,也不清楚自己的知识边界,所以它会尝试回答一些难题,编造一些看起来合理的答案,但实际是违背事实的。
所以尽量让模型先检索相关信息(搜索引擎或者外挂本地知识库),在基于相关信息回到问题
提示词迭代
step1: 写一个清晰明确的提示
step2:分析结果为什么没有得到期望的输出
step3: 更新提示
step4:重复上述操作
几个具体的场景
总结摘要 (summary)
提示参考:
你的任务是 对于从商品网站中的评论生成一个简短的摘要,反馈给XX部门。
对下面三个引号中的评论进行摘要,最多不超过30字。
‘’’
评论内容
‘’’
推理 (Infering)
这里的推理其实指的是传统的NLP任务,包括情感分析、信息抽取等任务。
提示的模式如:
What is the sentiment of the following product review, which is delimited by the triple backtickets ?
review text: ‘’’
{review content}
‘’’
Give your answer as a single word, either “positive” or “negative”.
情感分析可以给出更具体的提示,比如问用户是否有负面情绪?
实体提取的提示示例:
Identity the following items from the review text:
- item purchased by the review
- Company that made the item
The review is delimited by the triple backtickets. Format your reponse as a json object with “item” and “brand” as the keys. If the infomation isn’t present, use “unknown” as the value. Make your reponse as short as possible.
review text: ‘’’
{review content}
‘’’
关键词(主题)抽取:
Determine five topics that are bing discussed in the following text, which is delimited by the triple backtickets.
Make each topick one or two words long.
Format your reponse as a list of items seperated by commas.
Text : ‘’’
{text content}
‘’’
稍作修改同样可以用作文本的主题分类:
Determine whether each item in the following list of topics is the topic of the text below, which is delimited by the triple backtickets.
Give your answer as list with 0 or 1 for each topic.
List of topics : “naas, local goverment, engineering, stocks”
Format your reponse as a list of items seperated by commas.
Text : ‘’’
{text content}
‘’’
构建应用程序,输出采用json格式会比列表更好,列表的形式,大模型的输出可能会出现一些处理不一致的问题。
转译 (transforming)
包括 翻译、文本校对等任务
如: Translate the following Chinese text to English and French.
‘’’
{Chinese text}
‘’’
通过提示,可以完成风格转换,比如邮件风格、短信风格
格式转换: 比如将json转变为xml
proofread and correct the following text, and rewrite the corrected version. If you don’t find any errors, just say “No error found”: ‘’’ {text} ‘’’
文案生成
定制化的文本生成,一般在提示语种包含一下内容:
1) 角色定位
2)任务描述
3)风格描述
4)细节强调
可以参加吴恩达老师课程中的例子:
一个非常重要的超参数是 temperature,它能改变模型响应的多样性。直观的理解,它是模型搜索随机性的超参数
聊天机器人
区别于之前直接从prompt 固化message,聊天机器人,可以通过system message给于对话给多的背景假设。
从模式上来说,可以参考下图:
直接截图吴恩达老师课上的例子 这里其实类似于chatglm的history参数
完整的系统消息为:
同样,可以再写一个提示,将上面对话的核心信息以json的形式抽取出来和系统联动。这也是一个很好的系统联动的方式。
总结
本文内容基于吴恩达老师课程的笔记。 但是提示工程易学难精,尤其是实际使用,可能是私有部署的其他模型,提示工程虽然原则相同,但也有差异性需要摸索。
Todo List
- 提示工程的进阶
- chatglm的提示工程
- 其他llm的提示工程的异同