likes
comments
collection
share

OpenAI数据分析的实例,体验Js中的模块化

作者站长头像
站长
· 阅读数 29

在我们日常生活中,我们要完成一次日常穿搭,通过选择基础的牛仔、T恤、西装外套,这些作为模块,通过不同的搭配,就有了各种各样的穿搭风格,来适应各个不同的场合......在Js中,定义常量或者函数时,常常使用CommonJs规范实现模块化,接下来,我们结合OpenAI中的数据分析,来进行模块化,实现分析各类数据。

一、mian.mjs 代替main.js成为主入口

在现代JavaScript开发中,使用.mjs扩展名的文件表明该文件是一个ES模块(ECMAScript模块)。随着ES模块标准在JavaScript社区的广泛接纳,越来越多的项目开始采用.mjs作为默认的模块格式,尤其是在那些完全支持ES模块特性的环境中。

它默认支持ES模块导入和导出语法,不需要特殊的配置,通过扩展名,帮助开发者和工具明确的识别模块类型。

1、初始化Node项目

  • 新建一个文件夹,右键在集成终端(Integrated Terminal)打开
  • 在命令行输入 nmp init -y

OpenAI数据分析的实例,体验Js中的模块化 2、在文件夹下新建后缀为.mjs的文件,通常为main.mjs

OpenAI数据分析的实例,体验Js中的模块化 3、安装OpenAI 输入npm i openai

OpenAI数据分析的实例,体验Js中的模块化

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.exportsexports导出模块,从而实现了模块化编程。这种机制使得代码能够按功能划分为独立的模块,每个模块都有自己的作用域,有助于提高代码的可维护性和可重用性。

三、模块化

/**
 * @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文件

OpenAI数据分析的实例,体验Js中的模块化

  • 将封装好的异步函数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);

OpenAI数据分析的实例,体验Js中的模块化

至此,es6中一个简单的模块化就完成了,从JavaScript早期缺乏原生模块支持到如今广泛采纳ES Modules,这一演变过程反映了Web开发复杂性的增长以及对更高效、更易于管理的代码结构的追求。模块化已经成为现代JavaScript开发不可或缺的一部分,无论是对于提升开发效率、增强代码的可维护性还是促进团队协作,都有着重要意义。

今天的分享就到这啦,各位掘友们再见!喜欢小编文章的欢迎点赞关注!

转载自:https://juejin.cn/post/7383880021821980684
评论
请登录