用 Node.js 结合 OpenAI API 实现销售数据分析报告生成

94 阅读4分钟

在数据驱动决策的时代,快速从销售数据中提取关键信息并生成分析报告,是提升业务效率的重要手段。

本文将带你从零开始,搭建一个基于 Node.js 的简单工具,通过调用 OpenAI API 自动分析销售数据并生成定制化报告。

我们会逐步完成项目初始化、依赖安装、代码编写等步骤,并详解过程中涉及的异步编程、模板字符串等核心知识点,帮助你快速掌握 AI 辅助数据分析的实现思路。

第一步:创建文件夹

新建一个用于存放项目的文件夹(例如 ai-sales-analysis),建议路径中避免空格或特殊字符,方便后续终端操作。

第二步:右键打开终端

右键点击文件夹,选择「在终端中打开」(或通过 VS Code 打开文件夹后,使用 Ctrl + ~ 调出终端)。

第三步:输入下列命令

在终端中输入以下命令,快速初始化 Node.js 项目(自动生成 package.json 文件,-y 表示使用默认配置):

    npm init -y

image.png

第四步:输入下面的命令:

输入以下命令,通过 pnpm 安装指定版本的 openai(OpenAI API 客户端)和 dotenv(环境变量管理工具):

pnpm i openai@4.71.0 dotenv@17.2.3

pnpm的性质:

pnpm 是一个快速、节省磁盘空间的现代 JavaScript 包管理工具,全称为 Performant npm(高性能 npm)。

它与 npm(Node.js 官方包管理器)、yarn 类似,主要用于安装、管理项目依赖(比如你命令中的 openaidotenv 这些包),但在性能和磁盘利用上有显著优化:

  • 采用 硬链接 + 符号链接 的方式存储依赖,避免重复安装相同版本的包,大幅节省磁盘空间。
  • 安装速度通常比 npm 和 yarn 更快,尤其在大型项目中优势明显。
  • 支持 monorepo 项目结构,对多包管理更友好。

第五步:编写后端代码

在项目文件夹中创建 main.mjs 文件,写入以下代码(功能:调用 OpenAI API 分析销售数据并生成报告):

import OpenAI from 'openai';
import { config } from 'dotenv';

config({
    path: '.env'
});

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL:'https://api.agicto.cn/v1'
});


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
`

const main = async (reference_data, query) => {
  // 制定一个身份, 找对人
  // 模板字符串
  // 多行
  // 准确的描述任务, 
  //数据, 清楚说明+格式限定
  // \n \n\n 边界效果
  const prompt = `
  You are an AI data analysis  assistant that generates sales 
  reports based on the given sales data.
  Here is the sales data:\n ${reference_data} \n\n
  Please generate a report to answer the following question:\n
  ${query}
  `
  let response = await client.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: 'user',
        content: prompt
      }
    ],
    max_tokens: 1024,
    // 创意性 
    temperature: 0.1,
  })

  console.log(response.choices[0].message.content)
}

main(
  saleData,
  '根据上述销售数据,计算iphone13和iphone14的总销售额各是多少?'
);

image.png

补充说明:

  1. 需在项目根目录创建 .env 文件,添加 OPENAI_API_KEY=你的密钥(替换为实际可用的 OpenAI API 密钥)。
  2. 运行代码前确保已全局安装 pnpm(若未安装,可先执行 npm install -g pnpm)。
  3. 执行代码:在终端输入 node main.mjs,即可看到 AI 生成的数据分析报告。

再加个异步编程,模板字符串的知识点:

const main = async (reference_data, query) => {
 
  const prompt = `
  You are an AI data analysis  assistant that generates sales 
  reports based on the given sales data.
  Here is the sales data:\n ${reference_data} \n\n
  Please generate a report to answer the following question:\n
  ${query}
  `
  let response = await client.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: 'user',
        content: prompt
      }
    ],
    max_tokens: 1024,
    // 创意性 
    temperature: 0.1,
  })

  console.log(response.choices[0].message.content)
}
  1. 箭头函数(Arrow Function) const main = async (reference_data, query) => { ... }用 => 定义的函数,这里同时使用了 async 关键字,表明这是一个异步函数,内部可以使用 await 处理异步操作。

  2. 异步编程(Async/Await) let response = await client.chat.completions.create({ ... })``await 用于等待 client.chat.completions.create 这个异步操作(调用 OpenAI API)完成,避免了回调地狱,让异步代码更易读。

  3. 模板字符串(Template String) 用反引号()包裹的字符串 const prompt = ...,支持:

    • 多行文本(无需手动加 \n 换行)
    • 变量 / 表达式嵌入(${reference_data}${query})这与你之前问的模板字符串特性完全对应,用于构造传给 AI 的提示词(Prompt)。