原文出处:How to work with large language models 原作者:OpenAI · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与 OpenAI 所有。
如何与大语言模型协作
大语言模型是怎么工作的
大语言模型(large language model,LLM)是把文本映射为文本的函数。输入一段文本,它会预测接下来应该出现什么文本。
大语言模型的奇妙之处在于:训练目标是在海量文本上把预测误差压到最小,而为了做到这一点,模型顺带学会了预测要用到的各种概念。比如它学会了:
- 怎么拼写
- 语法怎么运作
- 怎么换一种说法
- 怎么回答问题
- 怎么开展对话
- 怎么用多种语言写作
- 怎么写代码
- 等等
它的做法是"阅读"大量已有的文本,学习词语在上下文里如何与其他词共现,再用学到的东西预测:面对用户请求,下一个最可能出现的词是什么,然后再预测后面的每个词。
GPT-3 和 GPT-4 支撑着大量软件产品,包括效率工具、教育应用、游戏等。
怎么控制大语言模型
在大语言模型的所有输入里,影响力最大的毫无疑问是文本提示词(prompt)。
可以通过几种方式给大语言模型下提示,让它产出输出:
- 指令(instruction):告诉模型你要什么
- 补全(completion):起个头,让模型把你想要的东西接着写完
- 场景(scenario):给模型一个情境让它去演绎
- 示范(demonstration):做出你想要的样子给模型看,具体可以是:
- 在提示词里放几个例子
- 在微调(fine-tuning)训练数据集里放成百上千个例子
下面每种方式各举一例。
指令提示词
把指令写在提示词的开头(或结尾,或两头都写),模型会尽力遵循指令,然后停下来。指令可以写得很细,不必忌讳用一整段话明确描述你想要的输出,只要留意模型能处理的令牌(token)数量有限。
指令提示词示例:
```text Extract the name of the author from the quotation below.
"Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard." ― Ted Chiang, Exhalation ```
输出:
text
Ted Chiang
补全提示词示例
补全式提示利用的是大语言模型的这个特点:它会试着写出自己认为最可能接着出现的文本。要引导模型,可以先起一个头,用一段模式或一句话,让它拿你想看到的输出来补完。相比直接下指令,这种方式要更费心思,也需要多做试验。另外,模型未必知道在哪里停,所以你常常需要停止序列或后处理,把超出目标输出的部分截掉。
补全提示词示例:
```text "Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard." ― Ted Chiang, Exhalation
The author of this quote is ```
输出:
text
Ted Chiang
场景提示词示例
给模型设定一个要遵循的场景或要扮演的角色,对复杂问题或需要想象力的回答很有帮助。用假设式提示时,你先搭好一个情境、问题或故事,再让模型以故事里某个角色或该主题专家的身份来回应。
场景提示词示例:
```text Your role is to extract the name of the author from any given text
"Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard." ― Ted Chiang, Exhalation ```
输出:
text
Ted Chiang
示范提示词示例(少样本学习)
示范和补全式提示类似,也是拿例子给模型演示你要什么。这种做法有时叫少样本学习(few-shot learning),因为模型是从提示词里提供的几个例子中学会的。
示范提示词示例:
```text Quote: "When the reasoning mind is forced to confront the impossible again and again, it has no choice but to adapt." ― N.K. Jemisin, The Fifth Season Author: N.K. Jemisin
Quote: "Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard." ― Ted Chiang, Exhalation Author: ```
输出:
text
Ted Chiang
微调提示词示例
训练例子足够多时,你可以微调出一个定制模型。这种情况下不再需要指令,模型已经从提供的训练数据里学会了任务。不过,加入分隔序列(例如 -> 或 ###,或任何在你的输入里不常出现的字符串)仍然有帮助,它能告诉模型提示词在哪里结束、输出从哪里开始。没有分隔序列,模型有可能接着阐发输入文本,而不是开始写你要的答案。
微调提示词示例(用于在类似的提示词-补全对上完成定制训练的模型):
```text "Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard." ― Ted Chiang, Exhalation
```
输出:
text
Ted Chiang
代码能力
大语言模型擅长文本,代码也写得很好。OpenAI 的 GPT-4 就是典型的例子。
GPT-4 驱动着众多创新产品,包括:
- GitHub Copilot(在 Visual Studio 和其他 IDE 里自动补全代码)
- Replit(可以补全、解释、编辑和生成代码)
- Cursor(一款为与 AI 结对编程而设计的编辑器,帮你更快构建软件)
GPT-4 比 gpt-3.5-turbo-instruct 这样的早期模型更先进。但要想在编码任务上把 GPT-4 用好,清晰、具体的指令依然重要,所以设计好的提示词需要多花心思。
更多提示词建议
更多提示词示例可以访问 OpenAI Examples。
总体而言,输入提示词是改善模型输出最有效的杠杆。可以试试这些做法:
- 写得更具体 比如,想要输出是逗号分隔的列表,就明确要求它返回逗号分隔的列表;希望它答不上来说"我不知道",就告诉它 'Say "I don't know" if you do not know the answer.' 指令越具体,模型答得越好。
- 提供上下文:帮模型看清你请求的全局。可以是背景信息、你想得到的东西的示例或示范,或者说明任务的目的。
- 让模型以专家的身份回答。 明确要求高质量输出,或要求它"以专家的写法"输出,能促使模型给出它认为专家会写的高质量的回答。"Explain in detail"(详细解释)、"Describe step-by-step"(分步描述)这类说法通常有效。
- 让模型把解释推理的步骤写下来。 如果理解答案背后的"为什么"很重要,就提示模型把推理过程包含进来。做法很简单:在每个答案前加一行 "Let's think step by step"(让我们一步步思考)。