使用OpenAI API对图片进行简单分析

536 阅读4分钟

利用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行为和参数含义。

结果展示

屏幕截图 2025-01-07 112006.png