最近关注到的吴恩达系列让我受益匪浅,学到了里面的Prompt Engineering,讲解如何有效地构造和优化问题(prompts)以引导大型语言模型(LLMs)产生高质量、目标导向的响应。在这里梳理思路,展示出prompt的魅力。
何为prompt
大家应该都知道LLM ------大型语言模型 (Large Language Model) 。把LLM比作财富无数的宝库,蕴含着巨大的潜力和价值,它们能够理解和生成人类语言,从而在各种应用场景中发挥重要作用,比如内容创作、代码生成、语言翻译等。
而prompt就是打开宝库的钥匙,通过精心设计的提示,我们可以引导这些模型按照我们的意图输出信息或完成特定任务。正确的prompt能极大地提升模型的性能和实用性。
在人工智能(AI)领域,Prompt(提示词)是一种用来引导或激发AI模型(尤其是大型语言模型)生成特定输出或执行特定任务的文本输入。它充当了用户与AI系统之间沟通的桥梁,通过提供上下文、指令或问题的形式,帮助AI理解期望的回应内容和格式。简单来说,Prompt就像是给AI的"提示",告诉它应该做什么或者如何响应。
编程中prompt的魅力
前面我们介绍了prompt与编程的结合,现在通过代码来感受prompt的魅力。我们需要总结一段文字,可以这样完成:
- 先从本地node_modules 引入openai模块并实例化,创建main()入口主函数,搭建好基本的框架。这里的apiKey属于个人财富,所以我们要保证它的安全性。创建一个.env 文件,环境变量对象,包含着所有的环境变量,我们在里面定义好自己的apiKey,然后引入dotenv模块。
javascript
const OpenAI = require('openai')
require('dotenv').config()
const client = new OpenAI({
apiKey: 'OPENAI_API_KEY', //安全
baseURL: 'https://api.chatanywhere.tech/v1'
})
async function main() {}
- 调用OpenAI API来创建一个聊天完成(chat completion)请求。指定适合聊天的的模型版本'gpt-3.5-turbo'。
php
const chatCompletion = await client.chat.completions.create({
model: 'gpt-3.5-turbo', // 适合聊天的模型
messages: [
{
role: 'user',
content: prompt
}
]
})
console.log(chatCompletion.choices);
- 将我们想要总结的文本写出来,在prompt中简单直接地输入我们想要得到的结果。
javascript
let text = `
您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务\
这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
不要将写清晰的提示词与简短的指示词混淆。\
在许多情况下,更长的提示词可以为模型提供更多的清晰度和上下文信息,\
从而拿到更详细的相关输出。
`
let prompt = `
把下面的文本总结成一句话。
${text}
`
这是最后返回的结果,但是如果说可以做的更好呢,这里就要提到prompt设计模式了。
Prompt设计模式
Prompt设计模式是指构建高效、引导性和创造性的提示(prompts)以优化AI回应质量的方法策略。这些模式旨在帮助用户明确表达需求,同时促使AI系统产生准确、有创意且符合上下文的回答。
1. 长提示效果更好
提供较为详尽、具体或包含多个元素的指令、问题或描述。这类提示往往旨在引导AI进行更复杂、细致的生成或分析任务,相比简短的命令,它们能够提供更多上下文信息、细节说明或是创意指引,帮助AI更准确地理解和执行用户的意图。甚至可以添加要求,将需求细致化,分步化。
r
let prompt = `
把用三个反引号括起来的文本总结成一句话,20字以内,英文。
\`\`\`${text}\`\`\`
`
2. 给它一些例子,展示LLM的学习能力
向其提供大量标注好的数据样本,这些样本包含了预期输出的结果。这个过程是机器学习和深度学习的核心部分,通过这些例子,AI模型能够学习特征、规律和模式,并基于此进行预测、分类、生成等任务。
markdown
let prompt = `
您的任务是以一致的风格回答问题。
<孩子>: 教我耐心。
<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。
<孩子>: 教我韧性。
`
prompt的魅力无限,让我们一起学习,一起进步!