浅谈吴恩达prompt-engineering课--如何构建和利用OpenAI,并准确设计Prompt

3,035 阅读4分钟

吴恩达教授认为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()

image.png (2)给模型思考的时间:如果你第一次得到的答案不是那么的准确甚至错误,你应该重新构思Prompt,要求大模型给出答案前,进行相关的推理。LLM有强大的学习能力,你可以指示大模型花更多的时间思考,这样得到的答案往往更加准确。

OpenAI的构建

1、在此之前,回到上一篇中提到的key的安全问题:学会这个,进大厂 ---- 传统编程与AIGC的结合 - 掘金 (juejin.cn),补充一下dotenv库的安装和使用

在终端中输入npm i dotenv

image.png 安装成功后,直接调用 require('dotenv').config();它允许开发者将环境变量从 .env 文件加载到 process.env,而.env是“key=value”形式的配置文件,完成这些后,可以直接用process.env.OPENAI_API_KEY来得到私密的key、password、username等。( process.env 是进程对象),这里不过多叙述。

2、在终端中输入npm i openai

image.png 安装好后,导入并实例化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)

总结

接下来,掘友们,尽情发挥想象,准确的说出你的需求,交给大模型,引导它生成更有趣,更富有想象力的文本。

参考方法:游戏与角色扮演、叙述未来或虚构场景、使用“想象”,“假设”等引导性词语,等等方法。

感谢大家一起学习,欢迎批评指正。