浅谈吴恩达prompt-engineering课--如何构建和利用OpenAI,并准确设计Prompt
吴恩达教授认为LLM或者大型语言模型可以帮助开发人员更快的构建软件应用程序
何为Prompt?如何准确设计Prompt
1、如果将LLM(大型语言模型)比作金矿,那么prompt就是打开金矿的钥匙,对于语言模型,prompt可以是一个问题,一个段落,一组指令,甚至是成功执行任务的示例。
2、准确的设计Prompt(两个基本原则)
(1)提供尽可能清晰的指示,表达你需要模型执行的任务,这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性,长提示的效果会更好;要求结构化的输出,比如html,json等;提前帮模型排除你并不需要的结果;你也可以提供少量的实例(few shot),这很好的展现了LLM的学习能力。下面为一段代码示例,仅关注Prompt的设计,稍后将和各位谈谈如何构建OpenAI
const OpenAI = require('openai')
require('dotenv').config();
const client = new OpenAI({
apiKey:process.env.OPENAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
async function main(){
const getChatResponse = async function(model,prompt){
const response = await client.chat.completions.create({
model:model,
n:2,
messages:[{
role:'user',//user
content:prompt
}]
})
return response.choices[0].message.content;
}
//es6 模板字符串,比'' "" 动态解析
//支持多行 特别适合详细的设置prompt
let text = `
您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务\
这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性\
不要将写清晰的提示词与写简短的提示词混淆。\
在许多情况西,更长的提示词可以为模型提供更多的清晰度和上下文信息,
从而导致更详细和相关的输出。
`
//转译
let prompt = `
把用三个反引号括起来的文本总结成一句话,20字以内。
\`\`\` ${text}\`\`\`
`
let prompt2 =`
您的任务是以一致的风格回答问题。
<孩子>: 教我耐心。
<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。
<孩子>: 教我韧性。
`
const chatCompletion = await getChatResponse('gpt-3.5-turbo',prompt)
const chatCompletion1 = await getChatResponse('gpt-3.5-turbo',prompt2)
console.log(chatCompletion)
console.log(chatCompletion1)
}
main()
(2)给模型思考的时间:如果你第一次得到的答案不是那么的准确甚至错误,你应该重新构思Prompt,要求大模型给出答案前,进行相关的推理。LLM有强大的学习能力,你可以指示大模型花更多的时间思考,这样得到的答案往往更加准确。
OpenAI的构建
在终端中输入npm i dotenv
安装成功后,直接调用
require('dotenv').config()
;它允许开发者将环境变量从 .env
文件加载到 process.env
,而.env
是“key=value”形式的配置文件,完成这些后,可以直接用process.env.OPENAI_API_KEY
来得到私密的key、password、username等。( process.env 是进程对象),这里不过多叙述。
2、在终端中输入npm i openai
安装好后,导入并实例化
openai
:
const OpenAI = require('openai')
const client = new OpenAI({
apiKey:process.env.OPENAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
接下来我们就可以封装一个得到模型回应的方法(getChatResponse()),只需修改模型(model)和提示词(Prompt)就可以进行使用了。
const getChatResponse = async function(model,prompt){
const response = await client.chat.completions.create({
model:model,//聊天的大模型
n:2,
messages:[{
role:'user',//user向大模型发送一些content
content:prompt
}]
})
return response.choices[0].message.content;
}
最后输出一些结果,n代表的是意味着请求模型生成两个不同的响应或完成建议,默认为1;
const chatCompletion = await getChatResponse('gpt-3.5-turbo',prompt)
const chatCompletion1 = await getChatResponse('gpt-3.5-turbo',prompt2)
console.log(chatCompletion)
console.log(chatCompletion1)
总结
接下来,掘友们,尽情发挥想象,准确的说出你的需求,交给大模型,引导它生成更有趣,更富有想象力的文本。
参考方法:游戏与角色扮演、叙述未来或虚构场景、使用“想象”,“假设”等引导性词语,等等方法。
感谢大家一起学习,欢迎批评指正。
转载自:https://juejin.cn/post/7371373024241565715