吴恩达机器学习AI系列视频火爆全网。 写了太久的main.mjs模块文件,这次进行写模版文,并且把prompt 提示词用在实际生活当中的应用。不仅可以安全地管理环境变量,还可以高效地调用外部API,完成特定的任务。
前置知识
1、使用dotenv
管理环境变量
dotenv
是一个用于Node.js的简单模块,它允许你在.env
文件中存储环境变量,并将其加载到process.env
对象中。这样做的好处是,你可以在不同的环境中使用相同的代码,而无需硬编码敏感信息。
步骤如下:
-
初始化项目:
pnpm init -y
-
安装依赖:
npm i dotenv openai
-
创建
.env
文件: 在项目根目录下创建一个.env
文件,用于存储环境变量。例如:OPENAI_API_KEY=your_openai_api_key OPENAI_API_URL=https://api.openai.com/v1
-
加载环境变量: 在项目入口文件中引入并配置
dotenv
模块:import dotenv from 'dotenv'; dotenv.config();
-
访问环境变量: 使用
process.env
对象访问环境变量:console.log(process.env.OPENAI_API_KEY);
注意事项:
.env
文件不应提交到版本控制系统中。确保在.gitignore
文件中添加.env
:
2、Node.js中的进程概念
在Node.js中,进程是分配资源的最小单位,而线程是执行的最小单位。每个Node.js应用程序运行在一个进程中,该进程由操作系统管理。
进程特点:
- 资源分配:进程是操作系统分配资源(如内存和CPU时间)的最小单位。
- 内存隔离:每个进程都有自己独立的内存空间,进程之间不能直接共享内存。
- 唯一标识:每个进程都有一个唯一的进程ID(PID)。
线程特点:
- 执行单元:线程是操作系统调度和执行的最小单位。
- 内存共享:同一进程内的所有线程共享相同的内存空间。
V8引擎: Node.js使用V8 JavaScript引擎来执行JavaScript代码。V8引擎负责管理内存和CPU资源,确保JavaScript代码高效运行。
示例代码解析
以下是一个使用OpenAI API的示例代码,我们将详细解析其中的关键知识点。
// 引入必要的模块
import dotenv from 'dotenv';
import OpenAI from 'openai';
// 加载环境变量
dotenv.config();
// 打印所有环境变量
console.log(process.env);
// 创建OpenAI客户端实例
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: process.env.OPENAI_API_URL
});
// 定义一个异步函数,用于获取API响应
const getCompletion = async (prompt, model = "gpt-3.5-turbo") => {
// 构建消息数组
const messages = [{
role: 'user',
content: prompt
}];
// 调用OpenAI API
const res = await client.chat.completions.create({
model: model,
messages: messages,
temperature: 0.7 // 控制生成内容的随机性
});
// 返回生成的内容
return res.choices[0].message.content;
};
// 主函数,用于执行主要逻辑
const main = async () => {
// 产品评论内容
const prod_review = `
我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。
它柔软、超级可爱,脸看起来很友好。
不过,相对于我付的价格来说,它有点小。
我想,同样的价格,也许还有其他更大的选择。
它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。
`;
// 构建提示
const prompt = `
请你分析以下产品评论的情感,来自电子商务平台的用户评论。
评论内容是:${prod_review},需要进行摘要和总结,最大30个字。
`;
// 获取API响应
const response = await getCompletion(prompt);
// 输出结果
console.log(response);
};
// 执行主函数
main();
代码解析:
-
环境变量加载:
import dotenv from 'dotenv'; dotenv.config(); console.log(process.env);
这部分代码加载了
.env
文件中的环境变量,并打印所有环境变量。 -
创建OpenAI客户端:
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, baseURL: process.env.OPENAI_API_URL });
使用环境变量中的API密钥和URL创建OpenAI客户端实例。
-
异步函数
getCompletion
:const getCompletion = async (prompt, model = "gpt-3.5-turbo") => { const messages = [{ role: 'user', content: prompt }]; const res = await client.chat.completions.create({ model: model, messages: messages, temperature: 0.7 }); return res.choices[0].message.content; };
这个函数用于发送请求到OpenAI API,并返回生成的文本内容。
temperature
参数控制生成内容的随机性。 -
主函数
main
:const main = async () => { const prod_review = `...`; const prompt = `...`; const response = await getCompletion(prompt); console.log(response); };
主函数中定义了产品评论内容和提示,调用
getCompletion
函数获取API响应,并输出结果。 promt工程当然是换promt提示词内容了,下面把promt换成:
const promt1 = `
你的任务是生成来自电子商务平台的用户评论摘要,以便向运输部门提供反馈。
摘要需要进行摘要和总结,最大30个字,并且重点关注任何提及运输和价格交付的方面。
评论内容是:${prod_review}
`;
const response = await getCompletion(promt1,'gpt-4o');
console.log(response);
皮皮的GPT,不过分析的还好呀。大家也可以试一下,随便理解一下代码。