面向OpenAI接口编程:构建多模态应用
在人工智能快速发展的今天,AI已经成为了我们生活中不可或缺的一部分了。而OpenAI
则是全球AI行业走在最前端的企业。OpenAI不仅可以像普通企业那样只能分析文本文件,它还能分析视频,图片甚至是音频。所以本文我将介绍如何用Node.js
和OpenAI
来实现多模态的数据处理。
模态解析
既然本文主要解释的是多模态的数据处理。那么相反的,肯定也有单模态的数据处理。
单模态
:专注于注意单一类型的信息。如纯文本、纯视频等
优点:有更高的精确度和效率。开发和维护的成本低。
多模态
:能同时处理多种类型信息。如文本,图像等。
优点:可以获得更全面的数据。应用场景更广泛。
环境配置
首先,我们做任何程序设计时,都应该做的就是初始化。
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的时代,希望大家掌握这门技巧。相信大家会有所收获,激发出更精彩的创作。