OpenAI数据分析的实例,体验Js中的模块化
在我们日常生活中,我们要完成一次日常穿搭,通过选择基础的牛仔、T恤、西装外套,这些作为模块,通过不同的搭配,就有了各种各样的穿搭风格,来适应各个不同的场合......在Js中,定义常量或者函数时,常常使用CommonJs规范实现模块化,接下来,我们结合OpenAI中的数据分析,来进行模块化,实现分析各类数据。
一、mian.mjs 代替main.js成为主入口
在现代JavaScript开发中,使用.mjs
扩展名的文件表明该文件是一个ES模块(ECMAScript模块)。随着ES模块标准在JavaScript社区的广泛接纳,越来越多的项目开始采用.mjs
作为默认的模块格式,尤其是在那些完全支持ES模块特性的环境中。
它默认支持ES模块导入和导出语法,不需要特殊的配置,通过扩展名,帮助开发者和工具明确的识别模块类型。
1、初始化Node项目
- 新建一个文件夹,右键在集成终端(Integrated Terminal)打开
- 在命令行输入
nmp init -y
2、在文件夹下新建后缀为
.mjs
的文件,通常为main.mjs
3、安装OpenAI 输入
npm i openai
4、引入并实例化openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey:'sk-x28Srq3ECHmPkBs8OFp9LPVrW5TCI5zSC6QipaDOZfolaq0n',
baseURL:'https://api.302.ai/v1'
})
这里我们就完成了基础的搭建。
二、使用OpenAI进行数据分析
const getSaleReport = async (data,query) => {
const prompt = `
You are a professional data analyst.
Here is the sale data \n ${data} \n\n
Please generate a report to answer
the following question:\n
${query}
`;
// openai 的接口很简单
// AIGC -> AGI OPENAI 生成(完成)
let response = await client.completions.create({
model:'gpt-3.5-turbo-instruct',
prompt:prompt,
//控制花销的 openai的账单 靠token
max_tokens:1234,
//LLM 的自由度 数据分析 严格
temperature:0,
n:1
})
return response.choices[0].text;
const res = await getSaleReport(client,saleData,
"根据上述销售数据,哪个产品的总收入更高,高多少?")
console.log(res);
}
- 使用英文的prompt会让openai对提示词的理解更加全面,输出更准确的回答。
- 定义一个异步的箭头函数,将你要处理的数据和需求传入。
- 调用openai的
completions.create
API - 传入对象{
model
:使用的大模型,prompt
:提示词,max_tokens
:最大花费时间,temperature
:大模型的自由度,用于数据分析时,必须严格按所给数据分析,值越小越严格,n:生成条数} return response.choices[0].text;
返回大模型处理的结果- 调用函数,打印结果
这里我们要处理的数据应为csv格式,这里有一份实例。
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
`
到这里,其实这个需求已经完成了。早期的js并没有模块化的概念,只进行简单的交互,负责尽可能地提高用户的体验,现在的node开发业务往往是比较复杂的,没有模块化是大大不行的
Node.js 的出现极大地推动了服务器端JavaScript的发展,它最初采用CommonJS规范,允许开发者通过
require
函数导入模块,通过module.exports
或exports
导出模块,从而实现了模块化编程。这种机制使得代码能够按功能划分为独立的模块,每个模块都有自己的作用域,有助于提高代码的可维护性和可重用性。
三、模块化
/**
* @fun 销售数据分析
* @param client openai client
* @param {csv} data
* @param {string} query 问题
* @returns 数据分析的结果
* @author wsl 2024-6-21
*/
export const getSaleReport = async (client,data,query) => {
const prompt = `
You are a professional data analyst.
Here is the sale data \n ${data} \n\n
Please generate a report to answer
the following question:\n
${query}
`;
// openai 的接口很简单
// AIGC -> AGI OPENAI 生成(完成)
let response = await client.completions.create({
model:'gpt-3.5-turbo-instruct',
prompt:prompt,
//控制花销的 openai的账单 靠token
max_tokens:1234,
//LLM 的自由度 数据分析 严格
temperature:0,
n:1
})
return response.choices[0].text;
}
/**
* @func 多数相加
* @param {...any} args
* @returns 多数之和
*
*/
export const add = (...args)=>{
args.reduce((prev,ans)=>prev+ans,0)
}
创建common.mjs
文件
- 将封装好的异步函数
getSaleReport
放在这个文件中并用export
关键字进行输出,这里的add
函数为测试用例。 - 注释信息中写明函数功能、传入参数类型、返回结果、作者信息等。
- 在mian.mjs中引入这个模块
import {add,getSaleReport} from "./common.mjs";
import OpenAI from "openai";
import {add,getSaleReport} from "./common.mjs";
const client = new OpenAI({
apiKey:'sk-x28Srq3ECHmPkBs8OFp9LPVrW5TCI5zSC6QipaDOZfolaq0n',
baseURL:'https://api.302.ai/v1'
})
//python csv 格式·数据分析
//以,隔开
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 res = await getSaleReport(client,saleData,
"根据上述销售数据,哪个产品的总收入更高,高多少?")
console.log(res);
至此,es6中一个简单的模块化就完成了,从JavaScript早期缺乏原生模块支持到如今广泛采纳ES Modules,这一演变过程反映了Web开发复杂性的增长以及对更高效、更易于管理的代码结构的追求。模块化已经成为现代JavaScript开发不可或缺的一部分,无论是对于提升开发效率、增强代码的可维护性还是促进团队协作,都有着重要意义。
今天的分享就到这啦,各位掘友们再见!喜欢小编文章的欢迎点赞关注!
转载自:https://juejin.cn/post/7383880021821980684