近几天,GitHub上有一个开源项目火了,才开源十几天,star数就飙到了8.9K。进去仔细一看,这原来是AI大佬吴恩达的一个开源项目,笔者前几天就注意到了,但一直苦于没时间来写文章,有兴趣的掘友可以点击下面的链接自己去GitHub上看一下,学一学。
好了,言归正传,吴恩达教授,作为人工智能领域的领军人物,不仅在深度学习和机器学习方面有着深厚的造诣,还致力于将这些技术应用于实际场景,特别是客户服务领域。本文将探讨吴恩达在Prompt Engineering方面的研究成果及其在AI客服中的应用。
Prompt Engineering的基本概念
Prompt Engineering是指通过精心设计的提示(prompt)来引导大型语言模型(如GPT-3.5)生成特定的输出。这些提示可以是简单的文本指令,也可以是复杂的多步骤任务。通过合理的设计,我们可以使模型更加准确地理解我们的需求,从而生成高质量的回复。
准备工作
- 项目初始化:使用
npm init -y来快速初始化一个新的package.json,这个是每个Node.js项目的配置文件。 - 安装OpenAI:使用
npm install openai来安装OpenAI,安装以后就可以用它来与OpenAI的API来进行交互 - 管理API密钥:使用
npm install dotenv,这个会安装dotenv,我们应该把API密钥放在这里,防止上传GitHub时漏key从而被别人盗了。
切记一定一定要安装dotenv,笔者之前注册302.AI白嫖的1PTC就是因为忘记另存,然后提交到GitHub上被吸干了。
环境准备
初始化项目
在main.mjs文件中,我们首先引入所需的库,并配置环境变量。
import dotenv from 'dotenv';
import OpenAI from 'openai';
dotenv.config();
const {
OPENAI_API_KEY,
OPENAI_API_BASE_URL
} = process.env;
const client = new OpenAI({
apiKey: OPENAI_API_KEY,
baseURL: OPENAI_API_BASE_URL
});
通过这种方式,我们可以确保API密钥和其他敏感信息不会硬编码在代码中,而是安全地存储在环境变量中。这样不仅提高了代码的安全性,还便于在不同环境中进行配置。
封装API调用
为了方便调用OpenAI的API,我们封装了一个异步函数get_completion,用于获取文本补全。
const get_completion = async (prompt, model = 'gpt-3.5-turbo') => {
const messages = [
{ role: 'user', content: prompt }
];
const response = await client.chat.completions.create({
model,
messages,
temperature: 0,
});
return response.choices[0].message.content;
};
在这里,我们需要注意用将temperature参数设为0可确保模型给出最确定性的回答,适用于需要准确答案的情景
设计Prompt
接下来,我们需要设计合适的Prompt来指导模型生成符合要求的回复。吴恩达教授强调了几个关键点:
- 角色设定:明确告诉模型它扮演的角色,例如客服AI助理。
- 任务描述:清晰地描述任务,包括输入和输出的格式。
- 情感分析:根据评论的情感(正面或负面)生成不同的回复。
- 具体细节:确保模型能够使用评论中的具体细节。
接下来让我们一起看一个具体的例子,我们将从一条评论中提取多个信息,并生成相应的回复。
const lamp_review = `
需要一盏漂亮的灯放在我的卧室,这盏灯有额外的存储空间,而且价格也不太高。
很快就收到了。我们灯的灯串在运输过程中断了,公司很乐意给我们寄来一根新的。
几天之内就到了。组装起来很容易。
我缺少一个零件,所以我联系了他们的支持人员,他们很快就给我找到了缺失的零件!
在我看来,Lumina 是一家关心客户和产品的好公司!!
`;
const prompt = `
从评论文本中识别以下项目:
- 情绪(正面或负面)
- 评论者是否表达愤怒?(真或假)
- 评论者购买的商品
- 制造商品的公司
评论以三个反引号分隔。
将您的回复格式化为 JSON 对象,其中
“情绪”、“愤怒”、“商品”和“品牌”作为键。
如果信息不存在,请使用“未知”
作为值。
让您的回复尽可能简短。
将愤怒值格式化为布尔值。
评论文本: '''${lamp_review}'''
`;
const main = async () => {
const response = await get_completion(prompt);
console.log(response);
};
main();
代码运行
运行上述代码,我们将得到一个JSON对象,包含从评论中提取的信息。如下图所示:
小结
本文通过深入探讨吴恩达教授的Prompt Engineering课程,并结合一个AI客服的案例展示了如何利用OpenAI API构建高效的AI客服系统,如果你觉得本文对你理解Prompt Engineering有些许帮助的话,麻烦点个免费的关注和赞吧