拥抱生成式大模型 --- 提示工程篇

本文为系列的第二篇,主要是学习和总结chatgpt类模型的提示工程。感谢吴恩达老师的开源课程。

引言

随着大型语言模型(LLM)的发展,LLM 大致可以分为两种类型,即基础LLM和指令微调LLM。基础LLM是基于文本训练数据,训练出预测下一个单词能力的模型,其通常是在互联网和其他来源的大量数据上训练的。
例如,如果你以“从前有一只独角兽”作为提示,基础LLM可能会继续预测“生活在一个与所有独角兽朋友的神奇森林中”。但是,如果你以“法国的首都是什么”为提示,则基础LLM可能会根据互联网上的文章,将答案预测为“法国最大的城市是什么?法国的人口是多少?”,因为互联网上的文章很可能是有关法国国家的问答题目列表。可见好的提示工程对于充分发挥大模型性能至关重要。

提示的原则

  1. 写清晰和具体的提示。注意 清晰 ≠ 简短
    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 (小样本提示)
    给定一些成功的例子,然后让模型按照这些例子去完成

  2. 让模型有时间去思考
    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)细节强调
可以参加吴恩达老师课程中的例子:
拥抱生成式大模型 --- 提示工程篇_第1张图片
一个非常重要的超参数是 temperature,它能改变模型响应的多样性。直观的理解,它是模型搜索随机性的超参数
拥抱生成式大模型 --- 提示工程篇_第2张图片

聊天机器人

区别于之前直接从prompt 固化message,聊天机器人,可以通过system message给于对话给多的背景假设。
从模式上来说,可以参考下图:
拥抱生成式大模型 --- 提示工程篇_第3张图片
直接截图吴恩达老师课上的例子 这里其实类似于chatglm的history参数
拥抱生成式大模型 --- 提示工程篇_第4张图片

拥抱生成式大模型 --- 提示工程篇_第5张图片

完整的系统消息为:

同样,可以再写一个提示,将上面对话的核心信息以json的形式抽取出来和系统联动。这也是一个很好的系统联动的方式。

总结

本文内容基于吴恩达老师课程的笔记。 但是提示工程易学难精,尤其是实际使用,可能是私有部署的其他模型,提示工程虽然原则相同,但也有差异性需要摸索。

Todo List

  1. 提示工程的进阶
  2. chatglm的提示工程
  3. 其他llm的提示工程的异同

你可能感兴趣的:(LLM,大模型,提示工程)