模版化main.mjs文件+promt提示词工程

136 阅读3分钟

吴恩达机器学习AI系列视频火爆全网。 写了太久的main.mjs模块文件,这次进行写模版文,并且把prompt 提示词用在实际生活当中的应用。不仅可以安全地管理环境变量,还可以高效地调用外部API,完成特定的任务。

前置知识

1、使用dotenv管理环境变量

dotenv是一个用于Node.js的简单模块,它允许你在.env文件中存储环境变量,并将其加载到process.env对象中。这样做的好处是,你可以在不同的环境中使用相同的代码,而无需硬编码敏感信息。

步骤如下:

  1. 初始化项目

    pnpm init -y
    
  2. 安装依赖

    npm i dotenv openai
    
  3. 创建.env文件: 在项目根目录下创建一个.env文件,用于存储环境变量。例如:

    OPENAI_API_KEY=your_openai_api_key
    OPENAI_API_URL=https://api.openai.com/v1
    
  4. 加载环境变量: 在项目入口文件中引入并配置dotenv模块:

    import dotenv from 'dotenv';
    dotenv.config();
    
  5. 访问环境变量: 使用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();

代码解析

  1. 环境变量加载

    import dotenv from 'dotenv';
    dotenv.config();
    console.log(process.env);
    

    这部分代码加载了.env文件中的环境变量,并打印所有环境变量。

  2. 创建OpenAI客户端

    const client = new OpenAI({
        apiKey: process.env.OPENAI_API_KEY,
        baseURL: process.env.OPENAI_API_URL
    });
    

    使用环境变量中的API密钥和URL创建OpenAI客户端实例。

  3. 异步函数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参数控制生成内容的随机性。

  4. 主函数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);

image.png 皮皮的GPT,不过分析的还好呀。大家也可以试一下,随便理解一下代码。