一、环境配置
为了开始这个项目,我们需要先配置好开发环境。以下是一些基本的步骤:
-
安装Node.js:
- 首先,确保你的计算机上已经安装了最新版的Node.js。如果还没有安装,请访问Node.js官方网站下载并安装适合你操作系统的版本。
-
创建项目文件夹:
- 打开终端或命令行工具,创建一个新的文件夹来存放项目文件。
- 使用
npm init -y
命令初始化项目
-
安装必要的依赖:
-
我们需要安装
openai
和dotenv
这两个NPM包。使用以下命令安装:npm install openai dotenv
-
-
设置环境变量:
-
创建一个
.env
文件来存储敏感信息,如API密钥等添加以下内容到.env
文件
使用
dotenv
包来管理环境变量,这有助于保护敏感信息(如 API 密钥),并使得配置更加容易和安全。OPENAI_KEY=your_openai_api_key BASE_URL=https:
-
-
编写代码:
- 创建一个JavaScript文件,例如
mian.mjs
,并在其中编写代码。
要注意的是,这里为什么选择用.mjs呢?
原生支持:
.mjs
文件明确表示这是一个使用 ES 模块语法的文件。 Node.js 自动识别.mjs
文件为 ES 模块,无需额外配置,这简化了项目设置和维护。模块解析:Node.js 会自动将
.mjs
文件作为 ES 模块处理,这有助于避免模块解析的混淆,确保代码按照预期的方式加载和运行。再额外插播一下es模块较传统的CommonJS 的优势
- 静态分析:ES 模块在导入时就确定了依赖关系,这使得编译器可以在运行之前分析整个模块图,从而提高加载速度。
- 树摇:在构建过程中,可以移除未使用的模块,减少最终包的大小。
- 顶级 await:允许在模块的顶层使用
await
关键字,而无需将其包裹在一个异步函数内。 - 标准内置:ES 模块是 ECMAScript 规范的一部分,所有现代浏览器都原生支持。
- 创建一个JavaScript文件,例如
二、代码实现
-
引入依赖:
-
使用ES6模块导入方式引入
dotenv
和openai
包。import dotenv from 'dotenv'; import OpenAI from 'openai';
-
-
配置环境变量:
-
加载
.env
文件中的环境变量。dotenv.config({ path: '.env' });
-
-
创建OpenAI客户端:
-
使用
dotenv
获取到的API密钥和基础URL来创建客户端实例。const client = new OpenAI({ apiKey: process.env.OPENAI_KEY, baseURL: process.env.BASE_URL });
-
-
定义销售数据:
-
将销售数据定义为一个字符串。
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 `;
-
-
创建报告生成函数:
- 定义一个异步函数
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 响应中提取生成的报告,并返回 };
- 定义一个异步函数
-
测试函数:
- 调用
genSaleReport
函数,并传入不同的查询问题来测试。
console.log(await genSaleReport(saleData, '根据上述销售数据,计算iPhone 13和iPhone 14的总销量各是多少?')); console.log(await genSaleReport(saleData, '根据上述销售数据,哪个产品的总收入更高,高多少?'));
- 调用
可以得到以下答案:
三、总结
以上,我们就构建了一个简单的销售数据分析助手。通过使用OpenAI的API,我们能够利用现代人工智能技术来简化数据分析,将原始的数据转换为有用的报告。
技术要点:
- 使用ES6模块语法来组织代码。
- 利用环境变量管理敏感信息。
- 通过API与AI模型交互,生成基于数据的报告。