OpenAI的对话和图像API简单体验

OpenAI的对话和图像API简单体验

  • 前言
    • OpenAI API 对话和图像接口
      • Python
      • JavaScript
    • Azure OpenAI API 对话和图像接口
      • Python
      • JavaScript
    • 总结

前言

JS 和 Python 是比较受欢迎的两个调用 OpenAI 对话 API 的两个库, 这里 简单记录这两个库对 OpenAI 的对话(Chat)和图像(Image)的使用.

使用上这里会包括原生的 OpenAI APIAzure OpenAI API 两个使用例子.

JavaScrip 在网络设置和后端平台开发上不如 Python 方便,但是我们的 AIGC_Playground 的项目是一个前后端的项目,未来能够在网页上有一个好的体验,并且尽量分离前后端,所以这个项目的请求优先用JavaScrip

  • 下面的例子 node 版本: v16.20.2, Python 的版本是 3.10.12

OpenAI API 对话和图像接口

Python

首先 pip3 install openai

直接看代码吧 代码比较简单

import httpx
import asyncio
from openai import OpenAIproxy_url = "http://xxxx:xxxx"
api_key = "xxxx"def use_proxy():http_client = Noneif(not proxy_url):http_client = httpx.Client()return http_clienthttp_client = httpx.Client(proxies={'http://': proxy_url, 'https://': proxy_url})return http_client'''
# ===== 非流式的对话测试 =====
'''
async def no_stream_chat():http_client = use_proxy()client = OpenAI(api_key=api_key,http_client=http_client)# 请求results = client.chat.completions.create(model= "gpt-4o-mini", messages=[{"role": "user", "content": [{"type": "text", "text": "Hello?"}]}])print(results.choices[0].message.content)'''
# ===== 流式的对话测试 =====
'''
async def stream_chat():http_client = use_proxy()client = OpenAI(api_key=api_key,http_client=http_client)# 请求results = client.chat.completions.create(model= "gpt-4o-mini", messages=[{"role": "user", "content": [{"type": "text", "text": "Hello?"}]}], stream=True)for chunk in results:choice = chunk.choicesif choice == []:continuecontent = choice[0].delta.contentprint(content)'''
# ===== 生成图像的函数 =====
'''
async def gen_dell3_pic():http_client = use_proxy()client = OpenAI(api_key=api_key,http_client=http_client)# 请求results = client.images.generate(model="dall-e-3", prompt="A cute cat")print(results.data[0].url)if __name__ == "__main__":asyncio.run(no_stream_chat())asyncio.run(stream_chat())asyncio.run(gen_dell3_pic())

JavaScript

首先安装包 npm install openai https-proxy-agent --save

再配置 package.json 支持 ES6 如下:

{"type": "module","dependencies": {"https-proxy-agent": "^7.0.6","openai": "^4.78.1"}
}

同样也直接看代码算了

import { OpenAI } from "openai";const proxyUrl = "http://xxxx:xxx";
const apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";/** 配置网络设置 */
async function useProxy(client) {if (!proxyUrl) return;// 动态导入 https-proxy-agent 模块const { HttpsProxyAgent } = await import("https-proxy-agent");// 使用 HttpsProxyAgentconst agent = new HttpsProxyAgent(proxyUrl);const originalFetchWithTimeout = client.fetchWithTimeout;client.fetchWithTimeout = async (url, init, ms, controller) => {const { signal, ...options } = init || {};if (signal) signal.addEventListener("abort", () => controller.abort());const timeout = setTimeout(() => controller.abort(), ms);const fetchOptions = {signal: controller.signal,...options,agent: agent,};if (fetchOptions.method) {// Custom methods like 'patch' need to be uppercasedfetchOptions.method = fetchOptions.method.toUpperCase();}try {return await originalFetchWithTimeout.call(client,url,fetchOptions,ms,controller);} finally {clearTimeout(timeout);}};
}/** ===== 非流式的对话测试 ===== */
async function noStreamChat() {const client = new OpenAI({ apiKey, timeout: 5000 });await useProxy(client);// 请求const results = await client.chat.completions.create({model: "gpt-4o-mini",messages: [{ role: "user", content: [{ type: "text", text: "Hello?" }] }],});for (const choice of results.choices) {console.log(choice.message);}
}/** ===== 流式的对话测试 ===== */
async function streamChat() {const client = new OpenAI({ apiKey, timeout: 5000 });await useProxy(client);// 请求const results = await client.chat.completions.create({model: "gpt-4o-mini",messages: [{ role: "user", content: [{ type: "text", text: "Hello?" }] }],stream: true,});for await (const chunk of results) {console.log(chunk.choices[0]?.delta?.content || "");}
}/** ===== 图片请求 ===== */
async function genDell3Pic() {const client = new OpenAI({ apiKey, timeout: 60000 });await useProxy(client);// 请求const results = await client.images.generate({model: "dall-e-3",prompt: "cute cat",});console.log(results.data[0].url);
}/** ===== 测试主函数 ===== */
async function main() {await noStreamChat();await streamChat();await genDell3Pic();
}main().catch((err) => {console.error("The sample encountered an error:", err);
});

Azure OpenAI API 对话和图像接口

Python

装依赖 pip3 install openai 看代码

import httpx
import asyncio
from openai import AzureOpenAIproxy_url = ""
azure_endpoint = "xxxxxxxxxxxxxxxx"
api_key = "xxxxxxxxxxxxxxxx"
chat_deployment = "xxxxxx"
image_deployment = "xxxxxxx"def use_proxy():http_client = Noneif(not proxy_url):http_client = httpx.Client()return http_clienthttp_client = httpx.Client(proxies={'http://': proxy_url, 'https://': proxy_url})return http_client'''
# ===== 非流式的对话测试 =====
'''
async def no_stream_chat():deployment = chat_deploymentapi_version = "2024-05-01-preview"http_client = use_proxy()client = AzureOpenAI(azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version, http_client=http_client)# 请求results = client.chat.completions.create(model=deployment, messages=[{"role": "user", "content": [{"type": "text", "text": "Hello?"}]}])print(results.choices[0].message.content)'''
# ===== 流式的对话测试 =====
'''
async def stream_chat():deployment = chat_deploymentapi_version = "2024-05-01-preview"http_client = use_proxy()client = AzureOpenAI(azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version, http_client=http_client)# 请求results = client.chat.completions.create(model=deployment, messages=[{"role": "user", "content": [{"type": "text", "text": "Hello?"}]}], stream=True)for chunk in results:choice = chunk.choicesif choice == []:continuecontent = choice[0].delta.contentprint(content)'''
# ===== 生成图像的函数 =====
'''
async def gen_dell3_pic():deployment = image_deploymentapi_version = "2024-05-01-preview"http_client = use_proxy()client = AzureOpenAI(azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version, http_client=http_client)# 请求results = client.images.generate(model=deployment, prompt="cute cat")print(results.data[0].url)if __name__ == "__main__":asyncio.run(no_stream_chat())asyncio.run(stream_chat())asyncio.run(gen_dell3_pic())

JavaScript

安装包 npm install openai https-proxy-agent --save, 再配置 package.json 如下:

{"type": "module","dependencies": {"https-proxy-agent": "^7.0.6","openai": "^4.78.1"}
}

直接看代码吧:

import { AzureOpenAI } from "openai";const proxyUrl = "";
const endpoint = "xxxxxxxxx";
const apiKey = "xxxxxxxxx";
const chatDeployment = "xxx";
const dellDelpoyment = "xxxxxx";/** 配置网络设置 */
async function useProxy(client) {if (!proxyUrl) return;// 动态导入 https-proxy-agent 模块const { HttpsProxyAgent } = await import("https-proxy-agent");// 使用 HttpsProxyAgentconst agent = new HttpsProxyAgent(proxyUrl);const originalFetchWithTimeout = client.fetchWithTimeout;client.fetchWithTimeout = async (url, init, ms, controller) => {const { signal, ...options } = init || {};if (signal) signal.addEventListener("abort", () => controller.abort());const timeout = setTimeout(() => controller.abort(), ms);const fetchOptions = {signal: controller.signal,...options,agent: agent,};if (fetchOptions.method) {// Custom methods like 'patch' need to be uppercasedfetchOptions.method = fetchOptions.method.toUpperCase();}try {return await originalFetchWithTimeout.call(client,url,fetchOptions,ms,controller);} finally {clearTimeout(timeout);}};
}/** ===== 非流式的对话测试 ===== */
async function noStreamChat() {const deployment = chatDeployment;const apiVersion = "2024-05-01-preview";const client = new AzureOpenAI({ endpoint, apiKey, apiVersion, deployment });useProxy(client);// 请求const results = await client.chat.completions.create({messages: [{ role: "user", content: [{ type: "text", text: "Hello?" }] }],});for (const choice of results.choices) {console.log(choice.message);}
}/** ===== 流式的对话测试 ===== */
async function streamChat() {const apiVersion = "2024-05-01-preview";const deployment = chatDeployment;const client = new AzureOpenAI({ endpoint, apiKey, apiVersion, deployment });useProxy(client);// 请求const results = await client.chat.completions.create({messages: [{ role: "user", content: [{ type: "text", text: "Hello?" }] }],stream: true,});for await (const chunk of results) {console.log(chunk.choices[0]?.delta?.content || "");}
}/** ===== 图片请求 ===== */
async function genDell3Pic() {// The prompt to generate images fromconst deployment = dellDelpoyment;const apiVersion = "2024-04-01-preview";const client = new AzureOpenAI({ endpoint, apiKey, apiVersion, deployment });useProxy(client);// 请求const results = await client.images.generate({ prompt: "cute cat" });console.log("image.url :", results.data[0].url);
}/** ===== 测试主函数 ===== */
async function main() {await noStreamChat();await streamChat();await genDell3Pic();
}main().catch((err) => {console.error("The sample encountered an error:", err);
});

总结

  1. 对于 JavaScript 的代码在配置网络时候需要对原来的 fetch 的参数进行复写, 虽然 openainpm 的包时候提供了传入自定义的 fetch 的值, 但是我测试发现这个传入对返回的 response 要做一些处理, 暂时这样操作.

  2. Python 的库直接用 httpx 直接定义网络设置, 还是比较方便的.

  3. 后续再介绍其他的接口.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568 Android 13 内置搜狗输入法小计

问:为什么写? 答:网上搜出来的都试过了,不行!下面直接上代码和注意事项! 首先到这个目录(/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall&#xff09…

windows10下安装Microsoft SQL Server 2016

一、下载安装包 网站:MSDN, 我告诉你 - 做一个安静的工具站 选择需要的版本,点击详细信息,复制ed2k链接,打开eMule或迅雷,新建下载,粘贴链接,开始下载。 下载好的文件是一个.iso镜像文件。 二、…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…

IDEA Maven构建时报错:无效的目标发行版17

报错分析 报错原因:Maven 构建时,Java 版本配置不匹配 我安装的JDK版本是1.8,但由于种种原因,Maven构建时指定了 Java 17 作为目标发行版,从而导致错误 解决方案 首先,java -version,查看环…

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义,生理学派,模拟神经计算。高度的并行、分布性,很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义,心理学派,基于符号…

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务,如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信,接收作业并提交到执行队列,Gitlab-Runner从队列中获取作业,并允许在不同环境下进行作…

LLM 智能视频字幕助手,支持生成、断句、优化、翻译、视频合成全流程

卡卡字幕助手(VideoCaptioner)是一款功能强大的视频字幕配制软件。操作简单且无需高配置,利用大语言模型进行字幕智能断句、校正、优化、翻译,一键为视频配上效果惊艳的字幕。 🎯 可使用强大的语音识别引擎&#xff0c…

GitLab本地服务器配置ssh和克隆项目

1. 本地安装好git git链接:https://git-scm.com/downloads/win 无脑点击下一步安装即可,打开Git Bash命令终端如下: 2. 配置本地用户名和邮箱 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…

Unity热更新 之 Addressables(2) 本地/远端打包 流程测试

基础篇:Unity热更新 之 Addressables(1) 资源基础加载-CSDN博客 基础方法来源于唐老狮,我也是初学热更这一块,所有不保证步骤完全正确,如有不足还请斧正 目录 0.前提 1.本地打包 1.1.资源放入包 1.2.简化路径名称给出标签(如有需要的话) …

HDFS架构原理

一、HDFS架构整体概述 HDFS是Hadoop Distribute File System 的简称,意为:Hadoop分布式文件系统。HDFS是Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。HDFS解决的问题就是大数据如何存储,它是横跨在多台计算机上的文件…

Qiskit快速编程探索(进阶篇)

五、量子电路模拟:探索量子世界的虚拟实验室 5.1 Aer模拟器:强大的模拟引擎 在量子计算的探索旅程中,Aer模拟器作为Qiskit的核心组件之一,宛如一座功能强大的虚拟实验室,为开发者提供了在经典计算机上模拟量子电路运行的卓越能力。它打破了硬件条件的限制,使得研究者无…

rust学习——环境搭建

rust安装:https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html 1、vscode装插件: toml语法支持 依赖管理 rust语法支持 2、创建demo 3、查看目录 4、执行文件的几种方式: rust安装:https://www.rust-lang.org/z…

继承(7)

大家好,今天我们继续来学习一下继承的知识,这方面需要大家勤动脑才能理解,那么我们来看。 1.9 protected关键字 在类和对象章节中,为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型 模型回复 前言 视觉多模态语言模型由预训练的多模态编码器…

J-LangChain - 复杂智能链流式执行

系列文章索引 J-LangChain 入门 介绍 j-langchain是一个Java版的LangChain开发框架,具有灵活编排和流式执行能力,旨在简化和加速各类大模型应用在Java平台的落地开发。它提供了一组实用的工具和类,使得开发人员能够更轻松地构建类似于LangC…

【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取

保存至本地网盘 链接:https://pan.quark.cn/s/f82a1fa7ed87 提取码:6UUw 2025年“华数杯”国际大学生数学建模竞赛比赛时间于2025年1月11日(周六)06:00开始,至1月15日(周三)09:00结束&#xff…

C# GID+绘制不透明和半透明的线条

绘制线条时,必须将 Pen 对象传递给 DrawLine 类的 Graphics 方法。 Pen 构造函数的参数之一是 Color 对象。 若要绘制不透明的线条,请将颜色的 alpha 分量设置为 255。 若要绘制半透明的线条,请将 alpha 分量设置为从 1 到 254 的任何值。 在…

通过可穿戴外骨骼,以更灵活的方式操作你的机器人。

今天,我们将介绍一款专为控制 Mercury X1 和 Mercury B1 机械臂而设计的创新外骨骼。这种外骨骼以人类手臂的结构为蓝本,可实现直观和精确的控制。 开发这种外骨骼的动机源于人们对深度学习和机器学习等领域日益增长的兴趣。这些技术使机器人能够自主学习…

浅尝Appium自动化框架

浅尝Appium自动化框架 Appium自动化框架介绍Appium原理Appium使用安装平台驱动实战 坑 Appium自动化框架介绍 Appium 是一个开源的自动化测试框架,最初设计用于移动应用的测试,但现在它也扩展了对桌面端应用的支持。Appium 使得自动化测试变得更加简单&…

maven多模块项目编译一直报Failure to find com.xxx.xxx:xxx-xxx-xxx:pom:1.0-SNAPSHOT in问题

工作中项目上因为多版本迭代,需要对不同迭代版本升级版本号,且因为项目工程本身是多模块结构,且依然多个其他模块工程。 在将工程中子模块的pom.xml中版本号使用变量引用父模块中定义的版本号时,一直报Failure to find com.xxx.x…