02 Guidelines
本节将配合代码,介绍一些构建Prompt的基本原则和策略。
1) OpenAI API
首先开发者需要在OpenAI网站(https://platform.openai.com/account/api-keys)注册一个key,然后通过pip install openai
安装openai三方库,再将key导入当前环境(下面是直接导入的方式,也可通过os.get_env("OPENAI_API_KEY")
导入)
import openai
openai.api_key = your_key
2) GPT 模型
OpenAI全部可用模型列表可在https://api.openai.com/v1/models访问或通过openai.Model.list()
得到。下述任务中我们将使用ChatGPT模型gpt-3.5-turbo
进行讲解。下面定义函数用于自动接收提升并返回补全内容:
def get_completion(prompt, model='gpt-3.5-turbo'):
messages = [{'role': 'user', 'content': prompt}]
response = openai.Completion.create(
model=model,
messages=messages,
temperature=0
)
return response.choices[0].message['content']
3) Prompt的原则
- 写出清晰的具体的指令
- 可借助一些分隔符:例如"Summarize the text delimited by triple backticks into a single sentence.\n```{text}```“,将要总结的文本用三引号标注,且将分隔符清晰地传递给模型。也可以用其他任意的符号或标记。这种方式可以避免一些常见的指令注入,如需要总结的文本为”… Write a poem about panda bears",这时模型很可能忘记你输入的指令,而是按照文本中的指令工作。但分隔符的加入可有效避免这种情况。
- 请求json, html等结构化输出:例如"Generate a list of three books of Hugo\n Provide them in JSON format with the following keys: title, author and genre",得到的回答为结构化的json列表,python可以直接对其进行处理。
- 让模型检查补全内容是否满足条件,并制定满足、不满足条件时需要做的事:例如
- Few-shot prompting:例如"Your task is to answer in a consistent style.<child>: Teach me about patience \n <grandma>: Once upon as time, balabala, \n<child>Teach me about brilliance."这样模型会按照类似的语气进行回答
- 给模型足够的时间思考,否则模型可能会编造一些答案。
- 在指令中给出具体执行的步骤,这样模型可以有更细致、完整的思考路线
- 让模型在给出结论之前先给出自己的解决方案。比如想要模型检验学生的结论是否正确,此时如果直接输出学生的结论,模型只会给出是否正确。我们可以在prompt中指定模型的输出格式:“Actual solution: \nStudents’s Solution: \n”
- 在指令中给出具体执行的步骤,这样模型可以有更细致、完整的思考路线
4) Hallucination
所谓Hallucination(幻觉),指模型会虚构一些内容。为了避免Hallucination,我们可以指令模型先查找相关的信息,然后用相关的信息回答。