面向openai接口编程:跨出探索AGI的第一步

219 阅读3分钟

前言

我们都知道大语言模型拥有强大的文本分析能力,而今年5月openai发布的多模态大模型gpt-4o更是拥有图片分析能力。下面我们将了解如何从零开始通过openai的接口使用gpt-4o的图片分析功能。效果如下:

b3b6a9cf890e3b1449fa6e29c10b35d.png 6239ddd504edd6aa2ddddee3b30a308.png

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 是一个快速、节省磁盘空间的包管理器,旨在替代 npmyarnpnpm通过使用符号链接,来共享依赖项,从而减少磁盘上的冗余数据。

现在让我们逐步解析这段代码的各个部分:

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模型。

R-C.png