构建一个基于OpenAI API的销售数据分析助手

281 阅读4分钟

一、环境配置

为了开始这个项目,我们需要先配置好开发环境。以下是一些基本的步骤:

  1. 安装Node.js:

    • 首先,确保你的计算机上已经安装了最新版的Node.js。如果还没有安装,请访问Node.js官方网站下载并安装适合你操作系统的版本。
  2. 创建项目文件夹:

    • 打开终端或命令行工具,创建一个新的文件夹来存放项目文件。
    • 使用 npm init -y 命令初始化项目
  3. 安装必要的依赖:

    • 我们需要安装 openai 和 dotenv 这两个NPM包。使用以下命令安装:

       npm install openai dotenv
      
  4. 设置环境变量:

    • 创建一个 .env 文件来存储敏感信息,如API密钥等添加以下内容到 .env 文件

    使用 dotenv 包来管理环境变量,这有助于保护敏感信息(如 API 密钥),并使得配置更加容易和安全。

     OPENAI_KEY=your_openai_api_key
     BASE_URL=https:
    
  5. 编写代码:

    • 创建一个JavaScript文件,例如 mian.mjs,并在其中编写代码。

    要注意的是,这里为什么选择用.mjs呢?

    原生支持:.mjs 文件明确表示这是一个使用 ES 模块语法的文件。 Node.js 自动识别 .mjs 文件为 ES 模块,无需额外配置,这简化了项目设置和维护。

    模块解析:Node.js 会自动将 .mjs 文件作为 ES 模块处理,这有助于避免模块解析的混淆,确保代码按照预期的方式加载和运行。

    再额外插播一下es模块较传统的CommonJS 的优势

    • 静态分析:ES 模块在导入时就确定了依赖关系,这使得编译器可以在运行之前分析整个模块图,从而提高加载速度。
    • 树摇:在构建过程中,可以移除未使用的模块,减少最终包的大小。
    • 顶级 await:允许在模块的顶层使用 await 关键字,而无需将其包裹在一个异步函数内。
    • 标准内置:ES 模块是 ECMAScript 规范的一部分,所有现代浏览器都原生支持。

二、代码实现

  1. 引入依赖:

    • 使用ES6模块导入方式引入 dotenv 和 openai 包。

      import dotenv from 'dotenv';
      import OpenAI from 'openai';
      
  2. 配置环境变量:

    • 加载 .env 文件中的环境变量。

      dotenv.config({
          path: '.env'
      });
      
  3. 创建OpenAI客户端:

    • 使用 dotenv 获取到的API密钥和基础URL来创建客户端实例。

      const client = new OpenAI({
          apiKey: process.env.OPENAI_KEY,
          baseURL: process.env.BASE_URL
      });
      
  4. 定义销售数据:

    • 将销售数据定义为一个字符串。

      const saleData = `
      销售数据:
      日期,产品,销量,单价,总收入
      2023-01-01,iPhone 13,100,6000,600000
      2023-01-01,iPhone 14,50,8000,400000
      2023-01-02,iPhone 13,80,6000,480000
      2023-01-02,iPhone 14,60,8000,480000
      2023-01-03,iPhone 13,120,5800,696000
      2023-01-03,iPhone 14,80,7800,624000
      `;
      
  5. 创建报告生成函数:

    • 定义一个异步函数 genSaleReport 来处理数据和生成报告。

    通过使用 async/await 语法,使得异步操作变得更加简洁和易于理解。这对于处理 API 调用等异步任务非常重要

    • 构造字符串 prompt,其中包含了对 AI 的指令和具体的销售数据以及需要回答的问题。这里我们使用模板字符串(反引号 `)来拼接多行文本,使代码更加清晰易读。

    • 使用 client.chat.completions.create() 方法来调用 OpenAI 的 API。注意这里的 client 对象应该是在函数外部已经初始化好的 openai 模块实例

      • model:  指定要使用的模型。在这个例子中,我们选择了 gpt-3.5-turbo 模型。
      • temperature:  温度参数控制模型的随机性。设置为 0.0 表示生成的文本非常确定性,而较高的值(如 1.0)会导致生成的文本更加随机和创造性的变化。
      • messages:  一个包含角色和内容的对象数组。在这里,我们只提供了一个用户角色的消息,即我们的提示字符串。
       
        const genSaleReport = async (data, query) => {
            const prompt = `
            You are an AI assistant that generates sales reports based on the given data.
            Here is the sales data:
            \n${data}\n\n
        
           Please generate a report to answer the following question:
            ${query}
            `;
            let response = await client.chat.completions.create({
                model: 'gpt-3.5-turbo',
                temperature: 0.0,
                messages: [{
                    role: 'user',
                    content: prompt
                }]
            });
        
            return response.choices[0].message.content;//从 API 响应中提取生成的报告,并返回
        };
    
  6. 测试函数:

    • 调用 genSaleReport 函数,并传入不同的查询问题来测试。
     console.log(await genSaleReport(saleData, '根据上述销售数据,计算iPhone 13和iPhone 14的总销量各是多少?'));
     console.log(await genSaleReport(saleData, '根据上述销售数据,哪个产品的总收入更高,高多少?'));
    

可以得到以下答案:

image.png

三、总结

以上,我们就构建了一个简单的销售数据分析助手。通过使用OpenAI的API,我们能够利用现代人工智能技术来简化数据分析,将原始的数据转换为有用的报告。

技术要点:

  • 使用ES6模块语法来组织代码。
  • 利用环境变量管理敏感信息。
  • 通过API与AI模型交互,生成基于数据的报告。