ChatGPT Prompt Engineering
1. 很多人的研究都是在WebUI界面如何与ChatGPT对话实现特定的、一次性的任务,但实际上如何使用API calls来快速构建软件应用程序才是真正的应用。
2. 常见的LLM分为两种,一种是BASE LLM(最终的训练成果是实现文字接龙,给出前面,后面就能自动填充回答,Predict next word,based on text training data),另一种是Instruction tuned LLM(follow instructions, fine-tuned on instructions and good attempt at following those instructions,RLHF: Reinforcement learning with Human Feedback)
3. 有时间可以进一步去查询OpenAI相关人员的博客和推特,包括:Andrew Mayne、Joe Palermo、Boris Power、Ted Sanders和Lillian Weng还有Deeplearning.AI的Geoff ladwig、eddy shyu、tommy nelson。
pip install openai
import openai
import os
openai.api_key = "sk-xxxx" #直接赋值,或者如下从文件里读取
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.getenv('OPENAI_API_KEY')
model="gpt-3.5-turbo"
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0,
)
return response.choices[0].message["content"]
4. 第一条规则:编写明确和具体的指令。
Tatic1: Use delimiters
triple quotes: “””,
triple backticks:“`,
triple dashes:—,
angle brackets: <>,
XML tags:<tag></tag>
avoid prompt injections,在使用各种分隔符以后,在分隔符内部就不要再给其他指示,否则会产生prompt的嵌套,模型无法识别出嵌套里面的prompts。
Tatic2: Ask for structured output: HTML, JSON
Generate a list of three made-up book titles along\
with their authors and genres.Provide them in JSON format with the following keys:
book_id, title, author, genre.
Tatic3: Check whether conditions are satisfied, check assumptions required to do the task.
与其直接输入然后等不确定的输出,可以先让模型确认假设条件是否满足,再输出想要的结果,避免直接输出了错误的,没有意义的结果。
Tatic4: Few-shot prompting, give sucessful examples of completing tasks.
直接给出成功的范例,让模型进行识别和参考。给出可以参考的语言风格或者写作风格内容。
5. 第二条规则:给模型足够的时间来思考。
如果你给模型一个对于它来说再短时间内或用少数字无法完成的任务,它可能会猜测并很可能是错误的,尝试引导它一步步完成复杂的问题。
Tatic1: Specify the steps to complete a task: step1 step2 … stepN