最近好多人在推荐这个课程,学习记录一下~
原视频
【中文完整版全9集】ChatGPT提示工程师|AI大神吴恩达教你写提示词|prompt engineering_哔哩哔哩_bilibili
完整笔记
prompt-engineering-for-developers/content at main · datawhalechina/prompt-engineering-for-developers · GitHub
一、 简介
LLM 大致分为两种类型:
- 基础LLM:基于文本训练数据,训练出预测下一个单词能力的模型
如果你以“从前有一只独角兽”作为提示,可能会继续预测“生活在一个与所有独角兽朋友的神奇森林中”。
如果你以“法国的首都是什么”为提示,则基础LLM可能会根据互联网上的文章,将答案预测为“法国最大的城市是什么?法国的人口是多少?”
- 指令微调LLM:通常是从已经训练好的基本 LLMs 开始,然后,使用输入是指令、输出是其应该返回的结果的数据集来对其进行微调,要求它遵循这些指令。
如果你问它,“法国的首都是什么?”,它更有可能输出“法国的首都是巴黎”。指令调整的 LLMs 的训练,该模型已经在大量文本数据上进行了训练。
二、 编写 Prompt 的原则
1. 原则一:编写清晰、具体的指令
- 使用分隔符区分不同部分,可以是:```,"",<>,<tag>,<\tag>等
text = f"""
你应该提供尽可能清晰、具体的指示,以表达你希望模型执行的任务。\
这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
不要将写清晰的提示与写简短的提示混淆。\
在许多情况下,更长的提示可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。
"""
# 需要总结的文本内容
prompt = f"""
把用三个反引号括起来的文本总结成一句话。
```{text}```
"""
# 指令内容,使用 ``` 来分隔指令和待总结的内容
response = get_completion(prompt)
print(response)
- 要求结构化输出:例如 Json、HTML 等
- 要求模型检查是否满足条件:如果任务做出的假设不一定满足,我们可以告诉模型先检查这些假设,如果不满足,指示并停止执行。你还可以考虑潜在的边缘情况以及模型应该如何处理它们,以避免意外的错误或结果。
课程中的案例分别是制作茶的步骤以及一段没有明确步骤的文本。要求模型判断其是否包含步骤,包含则按照给定格式重新编写指令,不包含则回答未提供步骤。
- 提供少量示例:即在要求模型执行实际任务之前,提供给它少量成功执行任务的示例。
例如给出一些某人的发言,让gpt模仿说话
2. 原则二:给模型时间去思考
- 指定完成任务所需的步骤:告诉它具体要干什么,还可以结合前面指定输出格式
案例中给出一个比较长的故事,以及具体要求:
- 用一句话概括三个反引号限定的文本
- 将摘要翻译成法语
- 在法语摘要中列出每个名称
- 输出包含以下键的 JSON 对象:法语摘要和名称数,并用换行符分隔答案
-
指导模型在下结论之前找出一个自己的解法:有时候,在明确指导模型在做决策之前要思考解决方案时,我们会得到更好的结果。
3. 局限性
- 虚假知识:模型偶尔会生成一些看似真实实则编造的知识,一本正经的胡说八道
三、 迭代优化
不要期待在第一次就能获得完美答案,应该根据gpt给出的答案多次追问,直到获得符合要求的答案。
四、 文本概括
gpt擅长对一段长文本进行概括,另外还可以给它如下要求:
-
限制输出文本长度:例如不超过30词
-
关注角度:例如对于商品评论文本,物流会更关心运输时效,商家更加关心价格与商品质量,平台更关心整体服务体验。
-
关键信息提取:如果只想要提取某一角度的信息,并过滤掉其他所有信息,则可以要求进行“文本提取(Extract)”而非“文本概括(Summarize)”
五、 推断
- 推断情感:正面、负面;开心、伤心、愤怒
- 提取信息:标签、公司名、配置信息、商品名
- 推断主题:给定一段长文本,这段文本是关于什么的?是否包含指定的话题内容?
六、 文本转换
- 多语言翻译
- 风格、语气调整:正式、非正式;对上司、同事、朋友的不同语气
- 格式转换:例如TXT、JSON、HTML、XML、Markdown、表格的互转等
-
拼写及语法纠正:例如要求模型校对文本,如果正确则输出“未发现错误”,如果错误则输出纠正后的文本,并基于Redlines输出纠错过程
七、 扩展
跟4相反,给定一些主题或短文本,要求gpt扩写或生成文本。
- 定制回复:结合前面的情感推断,可以自动回复客户对商品的评价
- 温度系数:其实就是随机性。如果希望构建一个可靠和可预测的系统,温度应该设置为0。如果希望更具创意、更广泛地输出不同的结果,那么可能需要使用更高的温度(例如0.7)