前言
我们都知道大语言模型拥有强大的文本分析能力,而今年5月openai发布的多模态大模型gpt-4o更是拥有图片分析能力。下面我们将了解如何从零开始通过openai的接口使用gpt-4o的图片分析功能。效果如下:
1.配置文件
在分析代码之前我们需要配置好运行环境,npm init -y 是一个用于快速初始化一个新的 npm 项目的命令。它会在当前目录下创建一个 package.json 文件,并使用默认的配置选项。初始化完成后我们就可以安装openai的sdk了:npm i openai,有同学也许到了这一步会卡住,不停的转圈圈,如果你没有能力翻墙,你可以使用npm config set registry https://registry.npmmirror.com设置阿里的npm的镜像源。
你也许会问,不能让我每次做项目都去安装一遍包吧,既费事又占磁盘空间。然后你就找到了全局安装命令npm i openai -g,然而这么做是有问题的,如果你所有的工具都全局安装,那么你将会遇到全局被污染的问题,这个时候执行某些指令可能会出现预料之外的结果。
因此,npm i -g pnpm是更为成熟的做法,pnpm 是一个快速、节省磁盘空间的包管理器,旨在替代 npm 和 yarn。pnpm通过使用符号链接,来共享依赖项,从而减少磁盘上的冗余数据。
现在让我们逐步解析这段代码的各个部分:
2.导入依赖
import dotenv from 'dotenv';
dotenv.config();
console.log(process.env.OpenAI_API_KEY, '////');
import OpenAI from "openai";
dotenv用于加载环境变量文件(通常是.env文件),这样可以安全地管理敏感信息,如 API 密钥。dotenv.config()加载.env文件中的变量到process.env对象中。console.log(process.env.OpenAI_API_KEY, '////')用于调试,输出环境变量中的OpenAI_API_KEY。import OpenAI from "openai";导入 OpenAI 库,用于与 OpenAI API 进行交互。
3. 初始化 OpenAI 客户端
javascript
const client = new OpenAI({
apiKey: process.env.OpenAI_API_KEY,
baseURL: 'https://api.302.ai/v1' // 转发
});
- 创建一个 OpenAI 客户端实例
client,并传入 API 密钥和自定义的基础 URL(转发地址)。
4. 定义主函数并执行
const main = async () => {
try {
const response = await client.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: '请描述以下图片的内容'
},
{
type: 'image_url',
image_url: {
url: "https://img.huxiucdn.com/img/minitopic/202406/25/084826659075.jpg? imageView2/1/w/512/h/512/|imageMogr2/strip/interlace/1/quality/85"
}
}
]
}
],
max_tokens: 300
});
console.log(response.choices[0].message.content);
} catch (error) {
console.log(error);
}
}
main();
-
main是一个异步函数,使用async关键字声明。 -
在
try块中,调用client.chat.completions.create方法来生成文本。 -
model: 'gpt-4o'指定使用的模型。 -
messages是一个数组,包含对话的历史记录。在这个例子中,只有一个用户消息,包含文本和图像 URL。 -
role: 'user'表示这是用户发送的消息。 -
content是一个数组,包含两种类型的内容:文本和图像 URL。 -
{ type: 'text', text: '请描述以下图片的内容' }是用户发送的文本。 -
{ type: 'image_url', image_url: { url: '...' } }是用户发送的图像 URL。 -
max_tokens: 300指定生成的文本的最大长度。 -
await关键字用于等待异步操作完成。 -
如果请求成功,
response.choices[0].message.content包含生成的文本,将其打印到控制台。 -
如果请求失败,捕获错误并打印到控制台。
-
调用
main函数,开始执行异步操作。
5.注意事项
- 我们的项目结构如下:
my-project/
├── .env
├── main.mjs
└── package.json
-
main.mjs是主入口文件,使用 ES6 模块语法。 -
为了更好地调试,我们可以在关键位置使用
console.log查看返回的 JSON 结构:
console.log(JSON.stringify(response, null, 2));
-
API 密钥:为了保证api key不被泄露,请在根目录下新建一个
.env文件,并用OPENAI_API_KEY=sk-......使用key。另外如果代码需要提交至github等仓库上,还需要在.gitignore文件中写入.env。 -
异常处理:已经包含了基本的错误处理,但可以根据需要进一步扩展,保证代码容错毫无疑问是非常重要的。
最后
通过以上步骤,我们便完成了通过接口使用openai gpt-4o模型。