利用OpenAI API与现代包管理工具
随着人工智能技术的快速发展,特别是像OpenAI这样的平台提供了强大的API接口,开发者们现在能够构建更加智能和复杂的多模态应用程序。这类应用不仅限于处理文本(如ChatGPT),还能解析图片、视频以及音频等多媒体内容。本文将探讨如何使用OpenAI API结合现代JavaScript包管理工具来创建一个高效的多模态应用,并分享一些开发过程中的最佳实践。
项目初始化与依赖安装
开始之前,我们先用npm init -y快速设置一个新的Node.js项目。接着,为了调用OpenAI的服务,我们需要安装官方提供的SDK——openai。
npm init -y
npm install openai
单入口设计
在项目的根目录下创建一个名为main.mjs的文件作为主入口。选择.mjs扩展名是为了明确表明这是一个遵循ES6模块规范的文件,这允许我们使用import/export语句来组织代码结构,提高代码的可维护性和复用性。
import OpenAI from "openai/index.mjs";
// 实例化 Openai 客户端
const client = new OpenAI({
apiKey: "",
baseURL: 'https://api.302.ai/v1'
})
- 密钥是需要付费获取的,大家可以从官网注册一个。
- API密钥是访问OpenAI服务的关键凭证,因此绝对不能将其硬编码或提交到公共版本控制系统如GitHub上。建议使用环境变量存储敏感信息,并通过
dotenv库加载这些值到你的应用程序中。dotenv是一个零依赖的模块,它可以将环境变量从.env文件加载到process.env中,使得在开发环境中可以方便地管理敏感信息和配置项。process.env是 Node.js 中的一个全局对象,它包含了当前 shell 的环境变量。在 Node.js 应用程序中,process.env提供了一种访问这些环境变量的方式,这些变量可以在应用程序的任何地方被访问。- 使用方法:
npm -i dotenv,在项目中创建.env文件用于存储环境变量的键值对。
import dotenv from "dotenv";
import OpenAI from "openai/index.mjs";
dotenv.config();
// 实例化 Openai 客户端
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.302.ai/v1'
})
dotenv.config()函数的作用是读取.env文件中的内容,并将其解析为键值对,然后将这些键值对添加到process.env对象中。这样,你就可以在代码中通过process.env对象来访问这些环境变量,而不需要直接暴露敏感信息。
功能实现
针对需要支持图像输入的场景,比如使用GPT-4进行多模态分析时,确保你正确传递了文本指令和图片地址。同时,合理运用try...catch语句包裹可能抛出异常的操作,以增强程序的健壮性。
import dotenv from "dotenv";
import OpenAI from "openai/index.mjs";
dotenv.config();
// 实例化 Openai 客户端
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.302.ai/v1'
})
// 良好的编程风格
// 主函数 执行的入口
const main = async () => {
try {
// openai 的调用是异步
// await 等会儿
// chat 聊天的方式调用
// completions 完成问答
// create 创建一个实例
const respone = await client.chat.completions.create({ //以聊天的方式完成问答
model: 'gpt-4o',
//模拟对话列表
messages: [
{
role: 'user',// 角色 以用户的身份像大模型提问
content: [
{
type: 'text',
'text': '请描述以下图片的内容'
},
{
type: 'image_url',
'image_url': {
'url' :"https://ts1.cn.mm.bing.net/th/id/R-C.240a564addca5a1ca76f89cdebcb5e56?rik=RDPtCQnVrXOYXQ&riu=http%3a%2f%2fn.sinaimg.cn%2fsinacn%2f251%2fw1080h1571%2f20191002%2f1d6e-ifmectk5810007.jpg&ehk=GVJ8dxu9kSwWmOOfF6YtNdtcJj3DwR%2bM71oav%2fMuN4U%3d&risl=&pid=ImgRaw&r=0"
}
}
]
}
],
max_tokens: 300
})
console.log(respone.choices[0].message.content)
} catch (error) {
console.log(error)
}
}
main()
-
model: 指定要使用的语言模型。本案例使用的是gpt-4o模型。 -
messages: 一个数组,包含了模拟对话的消息。每个消息对象包含两个属性:role: 消息的角色,可以是'user'(用户)、'system'(系统)或'assistant'(助手)。在这个例子中,角色是'user',表示这是用户发送的消息。content: 消息的内容。在这个例子中,内容是一个数组,包含了一个文本消息和一个图片 URL 消息。
-
max_tokens: 指定生成的回复的最大长度,以 tokens 为单位。
调试技巧
在开发过程中,了解返回数据的结构对于调试至关重要。可以简单地使用console.log(result)打印出响应对象,帮助理解API行为和参数含义。