用OpenAI大模型进行“多模态”的数据处理

418 阅读4分钟

面向OpenAI接口编程:构建多模态应用

在人工智能快速发展的今天,AI已经成为了我们生活中不可或缺的一部分了。而OpenAI则是全球AI行业走在最前端的企业。OpenAI不仅可以像普通企业那样只能分析文本文件,它还能分析视频,图片甚至是音频。所以本文我将介绍如何用Node.jsOpenAI来实现多模态的数据处理。

模态解析

既然本文主要解释的是多模态的数据处理。那么相反的,肯定也有单模态的数据处理。

单模态:专注于注意单一类型的信息。如纯文本、纯视频等

优点:有更高的精确度和效率。开发和维护的成本低。

多模态:能同时处理多种类型信息。如文本,图像等。

优点:可以获得更全面的数据。应用场景更广泛。

环境配置

首先,我们做任何程序设计时,都应该做的就是初始化。

mkdir openai // 创建目录
cd openai   // 进入目录
npm init -y // 初始化

做完这些后,我们才放心去做下一步。

要想用上openai及其功能,我们当然要安装对应依赖了

npm i openai //安装openai

此刻一些问题可能出现,如下载慢,报错等等。

此时我们可以安装一个国内的镜像源

npm config set registry https://registry.npmmirror.com

安装完openai后,我们脑海中会有一个问题。如果我们在别的程序中也需要用openai怎么办,难道要重复下载吗? 要知道,重复下载可能会污染我们的全局。

这时候我们需要一个更高效,安全的下载的包管理器

pnpm

这是一个高性能且不会浪费空间的Node.js中的包管理器,pnpm 不会在全局环境中安装任何东西,而是通过符号链接将依赖项链接到项目中。这样可以避免全局环境变量的污染和重复下载浪费空间的情况。

npm install -g pnpm //安装pnpm
pnpm i openai // 安装openai依赖

实战

安装,配置好一切环境后,我们来进行实战训练。

入口文件

我们在根目录下创建一个main.mjs文件作为程序入口,后面的.mjs是es6模块语法编写的JavaScript文件。支持异步(async)加载和执行

实例化openai客户端。

// 实例化openai 客户端

const client = new OpenAI({
    apiKey: YOUR.API,
    baseURL: 'YOUR URL' // 转发    
})

我们要在这两栏输入自己在OpenAI官网获取的API,和国内转发地址。 但我们不能直接输入API在内,会导致我们的API泄露。 此时我们需装另外一个依赖

dotenv

pnpm install  dotenv //安装依赖

再到main.mjs上方添加

import dotenv from 'dotenv';
dotenv.config();

import dotenv from 'dotenv':导入 dotenv 库,该库用于从 .env 文件中读取环境变量。

dotenv.config():调用 dotenv.config() 方法,加载 .env 文件中的环境变量到 process.env 对象中。

此时我们创建一个.env文件,往里面这样输入自己的API

OPEN_AI_KEY:XXXXXX;

然后再输入进实例化中,变成:

const client = new OpenAI({
    apiKey: OPEN_AI_KEY,
    baseURL: 'YOUR URL' // 转发    
})

如果直接将代码提交至git仓库中,可能会被盗走。

主体

const main = async () => {
    // openai 的调用是异步的 
    // awit 等会儿
    // chat 聊天的方式调用
    // conpletions 完成问答
    // create 创建
 try{
   const respose = await client.chat.completions.create({
    model:'gpt-4o',
    // 对话列表
    messages:[
        {
            role:'user', // 角色
            content:[
                {
                    type:'text',
                    'text':'请描述一下图片的内容'
                },
                {
                    type:'image_url',
                    "image_url":{
                        "url":'自己想要分析的图片'
                    
                    }
                }
        
            ]
        }
    ],
    max_tokens:300,
   }) 
   console.log(respose.choices[0].message.content)
}
  catch(err){
    console.log(err)
  }
}
main()

细节操作

首先我们没有用传统的function去声明一个函数,这里我们用的是箭头函数。更简洁。添加异步操作async和下面的await结合起来会是同步操作的效果。增加代码可读性和维护性。

try catch:当我们的API发生错误(余额不够,网络错误)时,try里的代码会抛出错误,调转到catch中处理。

结语

通过这篇文章,详细介绍了OpenAI和Node.js实现多模态数据的处理。从开始到结束每一块都有详细的介绍。现在是ai的时代,希望大家掌握这门技巧。相信大家会有所收获,激发出更精彩的创作。