深度解析:吴恩达教授开源项目中的Prompt Engineering

1,454 阅读4分钟

近几天,GitHub上有一个开源项目火了,才开源十几天,star数就飙到了8.9K。进去仔细一看,这原来是AI大佬吴恩达的一个开源项目,笔者前几天就注意到了,但一直苦于没时间来写文章,有兴趣的掘友可以点击下面的链接自己去GitHub上看一下,学一学。

github.com/andrewyng/a…

image.png

好了,言归正传,吴恩达教授,作为人工智能领域的领军人物,不仅在深度学习和机器学习方面有着深厚的造诣,还致力于将这些技术应用于实际场景,特别是客户服务领域。本文将探讨吴恩达在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上被吸干了。

image.png image.png

环境准备

初始化项目

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对象,包含从评论中提取的信息。如下图所示:

image.png

小结

本文通过深入探讨吴恩达教授的Prompt Engineering课程,并结合一个AI客服的案例展示了如何利用OpenAI API构建高效的AI客服系统,如果你觉得本文对你理解Prompt Engineering有些许帮助的话,麻烦点个免费的关注和赞吧

c224676594aae6804009e3fe521b122.jpg