Ai学习之openai api

一、什么是openai api

大家对特斯拉的马斯克应该是不陌生的,openai 就是马斯克投资的一家研究人工智能的公司,它就致力于推动人工智能技术的发展,目标是确保人工智能对人类有益,并实现安全且通用的人工智能。

此后,OpenAI 在技术研发和应用方面不断取得进展,逐渐成为全球瞩目的人工智能研究机构,OpenAI 在自然语言处理方面取得了众多突破性成果,最著名的是 GPT(Generative Pretrained Transformer)系列语言模型。例如 GPT-3,它具有强大的语言理解和生成能力,能够生成连贯、有逻辑的文本,在问答、文本生成、翻译等多个任务中表现出色。GPT-4 更是在 GPT-3 的基础上进一步提升了性能和功能,能够处理更复杂的任务,对语言的理解和生成更加精准和自然。

而chatGpt 就是使用GPT的网页端应用。

但是为了更好的支持开发者使用,openai 公司提供了标准接口的api 供开发者使用GPT大模型。我们可以通过 api 和大模型进行通讯,从而实现使用大模型实现自己的功能。

目前 openapi api 规范已经是国内所有大模型统一的接口规范,基本上国内各大厂商都参考其规范实现自己的模型 API

二、Api 详细说明

可以看看下面的例子:

curl --insecure https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KEY" \
-d '{"model": "gpt-4o","messages": [{"role": "user", "content": "写一首关于AI的诗"}]}'

这是一个 openai 的聊天补全接口,实际上但Open AI API 提供了许多功能,比如:

Text Generation:生成和处理文本
Embeddings:文本转向量
Speech to Text:语音转文本
Image Generation:生成图像
Vision:处理图像输入

这些不同的接口是通过不同的路径进行区分。这里看到的 /v1/chat/completions 就是我们常用的大模型的编程接口。

接口有两个特别重要的参数。分别是访问地址和api key。 通过 api key 可以用来区分不同的用户,而访问地址则是一个模型代理地址,不同模型提供的访问地址一般都是不同的。这个地址不一定是模型本身提供的,也可能是代理地址。
https://api-docs.deepseek.com/zh-cn/guides/multi_round_chat
在这里插入图片描述

然后我们来讲讲接口的请求参数说明:

核心参数:
参数名称参数说明
model用于指定与哪个模型进行沟通,选择合适的模型来完成相应任务
messages是一个消息列表,发送给模型的消息,可理解为历史消息列表,为模型提供更多上下文信息,帮助其更准确地理解和生成回复
temperature设定大模型回复的确定性,取值范围对应不同的随机性。值越小,生成的回复越具确定性;值越大,回复的随机性越强
max_completion_tokens表示生成应答的最大token数。由于大模型生成内容常按token数计费,合理限制此参数大小可有效控制成本
stream用于决定是否需要流式应答。流式应答能够提升聊天的响应速度,为用户带来更好的交互体验
工程参数
参数名称参数说明
终端用户标识开发者提供给OpenAI,用于监控和检测API的滥用,监控粒度能到个体
n为每条输入消息生成回复的数量,生成更多内容需计费,若无特别需求,不额外设置此参数
response_format应答格式,默认接口只生成文本内容,开发中常用JSON格式,既可用提示词要求大模型返回JSON格式,也可通过设置此参数让API直接返回JSON格式
工具参数
参数名称说明
tools(模型可以调用的工具列表)每个工具包含 type(类型,目前只有 function 类型)和 function 部分。function 用于告知模型函数的调用方式,包括 description(函数描述)、name(函数名)以及 parameters(函数参数)
tool_choice(选择怎么调用工具)参数值为 none 表示不调用工具;参数值为 auto 表示模型自行选择生成消息或调用工具;参数值为 required 表示必须调用工具
模型参数
参数名称说明
seed(种子值)用于解决可重复输出问题,使用相同种子值和相同参数时,生成的结果相同,类似缓存
stop停止序列,告知大模型在生成文本时遇到该序列就停止生成
frequency_penalty(频率惩罚)根据一个 token 在已生成文本中出现的频率进行计算
presence_penalty(存在惩罚)根据一个 token 是否已经出现来进行计算
logit_bias(logit 偏差)在 logit 函数计算中调整计算结果,主要目的是修改某些 token 出现的可能性,如不希望某些词出现在最终结果里
logprobs(是否返回对数概率)返回大模型生成每个 token 的概率
top_logprobs(返回每个位置最可能返回的 token 数量)让大模型返回排名靠前的 token
top_p(另一种采样方式,与 temperature 相对)在概率前多少的 token 中进行选择

再看看接口的响应参数:

子项说明
id应答的唯一标识
object(对象类型)通用字段,在聊天补全接口中,值为 chat.comploetion(应为 chat.completion )
createdUnix 时间戳,表明这个应答生成的时间
model生成应答的模型,一般是请求时所带的模型,有时会返回具体的版本
system_fingerprint(系统指纹)代表模型运行时使用的后端配置
choices.index(索引)顺序编号,如果文本被切分了,可通过索引将内容重新排列以生成正确顺序
choices.finish_reason停止生成 token 的原因,到了停止点或遇到停止序列,原因是 stop ;到了一定长度,原因是 length
message(回复的消息)角色和内容
tool_calls.id函数调用的 ID
tool_calls.type目前只支持 function
tool_calls.function函数调用部分,其中包含了 name 和 arguments
logprobs.contenttoken 与其对应的概率(logprob)。bytes 表示这个 token 对应的 UTF-8 的字节表现形式,而 top_logprobs 则包含了每个 token 对应的备选 token 及其概率

三、应答模式

流式应答

为了解决大模型生成文本比较慢的问题。如果等大模型把所有内容生成一次性返回,等待的时间会非常长。对于聊天的场景,这会让本已很长的等待时间会显得更加漫长。所以推出了流式应答,主要是为了提高聊天的响应速度。

SSE

是指在连接建立之后,一块一块地把消息发给用户。对应到大模型上,就是每生成一部分内容就发送一次。

OpenAI 之所以选择 SSE,而非 WebSocket,是因为 SSE 的技术特点刚好可以契合流式应答的需求:
客户端与大模型的交互是一次性的,每产生一个 token,服务端就可以给客户端推送一次,当生成内容结束时,断掉连接,无需考虑客户端的存活情况

如果采用 WebSocket 的话,服务端就需要维护连接,像 OpenAI 这样的服务体量,维护连接就会造成很大的服务器压力,而且,在生成内容场景下,也没有向服务端进一步发送内容,WebSocket 的双向通信在这里也是多余的

SSE 通常分成纯数据消息和事件消息。纯数据消息,顾名思义就是只有数据的消息主题,事件消息会先有一个事件(event),后面跟着具体的数据(data)

通过使用大模型的API,我们可以更好了基于大模型实现应用层软件。这也是开发者低成本使用成熟大模型的途径。

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

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

相关文章

leetcode 合并区间 java

用 ArrayList<int[]> merged new ArrayList<>();来定义数组的list将数组进行排序 Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));如果前面的末尾>后面的初始&#xff0c;那么新的currentInterval的末尾这两个数组末尾的最大值&#xff0c;即…

std::vector<>.emplace_back

emplace_back() 详解&#xff1a;C 就地构造的效率革命 emplace_back() 是 C11 引入的容器成员函数&#xff0c;用于在容器尾部就地构造&#xff08;而非拷贝或移动&#xff09;元素。这一特性显著提升了复杂对象的插入效率&#xff0c;尤其适用于构造代价较高的类型。 一、核…

Dify实战案例《AI面试官》更新,支持语音交互+智能知识库+随机题库+敏感词过滤等...

大模型应用课又更新了&#xff0c;除了之前已经完结的两门课&#xff08;视频图文&#xff09;&#xff1a; 《Spring AI 从入门到精通》《LangChain4j 从入门到精通》 还有目前正在更新的 《Dify 从入门到实战》 本周也迎来了一大波内容更新&#xff0c;其中就包括今天要介绍…

AGI大模型(29):LangChain Model模型

1 LangChain支持的模型有三大类 大语言模型(LLM) ,也叫Text Model,这些模型将文本字符串作为输入,并返回文本字符串作为输出。聊天模型(Chat Model),主要代表Open AI的ChatGPT系列模型。这些模型通常由语言模型支持,但它们的API更加结构化。具体来说,这些模型将聊天消…

动态IP技术在跨境电商中的创新应用与战略价值解析

在全球化4.0时代&#xff0c;跨境电商正经历从"流量红利"向"技术红利"的深度转型。动态IP技术作为网络基础设施的关键组件&#xff0c;正在重塑跨境贸易的运营逻辑。本文将从技术架构、应用场景、创新实践三个维度&#xff0c;揭示动态IP如何成为跨境电商突…

android双屏之副屏待机显示图片

摘要&#xff1a;android原生有双屏的机制&#xff0c;但需要芯片厂商适配框架后在底层实现。本文在基于芯发8766已实现底层适配的基础上&#xff0c;仅针对上层Launcher部分对系统进行改造&#xff0c;从而实现在开机后副屏显示一张待机图片。 副屏布局 由于仅显示一张图片&…

STM32之中断

一、提高程序实时性的架构方案 轮询式 指的是在程序运行时&#xff0c;首先对所有的硬件进行初始化&#xff0c;然后在主程序中写一个死循环&#xff0c;需要运行的功能按照顺序进行执行&#xff0c;轮询系统是一种简单可靠的方式&#xff0c;一般适用于在只需要按照顺序执行…

LLM应用开发平台资料

课程和代码资料 放下面了&#xff0c;自取&#xff1a; https://pan.quark.cn/s/57a9d22d61e9

硬盘健康检测与性能测试的实践指南

在日常使用 Windows 系统的过程中&#xff0c;我们常常需要借助各种工具来优化性能、排查问题或管理文件。针对windows工具箱进行实测解析&#xff0c;发现它整合了多种实用功能&#xff0c;能够帮助用户更高效地管理计算机。 以下为测试发现的功能特性&#xff1a; 硬件信息查…

正则表达式进阶(三):递归模式与条件匹配的艺术

在正则表达式的高级应用中&#xff0c;递归模式和条件匹配是处理复杂嵌套结构和动态模式的利器。它们突破了传统正则表达式的线性匹配局限&#xff0c;能够应对嵌套括号、HTML标签、上下文依赖等复杂场景。本文将详细介绍递归模式&#xff08;(?>...)、 (?R) 等&#xff0…

从零开始创建React项目及制作页面

一、React 介绍 React 是一个由 Meta&#xff08;原Facebook&#xff09; 开发和维护的 开源JavaScript库&#xff0c;主要用于构建用户界面&#xff08;User Interface, UI&#xff09;。它是前端开发中最流行的工具之一&#xff0c;广泛应用于单页应用程序&#xff08;SPA&a…

【前端部署】通过 Nginx 让局域网用户访问你的纯前端应用

在日常前端开发中&#xff0c;我们常常需要快速将本地的应用展示给局域网内的同事或测试人员&#xff0c;而传统的共享方式往往效率不高。本文将指导你轻松地将你的纯前端应用&#xff08;无论是 Vue, React, Angular 或原生项目&#xff09;部署到本地&#xff0c;并配置局域网…

【Python装饰器深潜】从语法糖到元编程的艺术

目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现案例1:基础计时装饰器案…

mbed驱动st7789屏幕-硬件选择及连接(1)

目录 1.整体介绍 2. 硬件选择 2.1 mbed L432KC 2.2 ST7789 240*240 1.3寸 3. mbed与st7789的硬件连接 4. 总结 1.整体介绍 我们在使用单片机做一些项目的时候,交互性是最重要的因素。那么对于使用者而言,交互最直接的体现无非就是视觉感知,那么我们希望将项目通过视觉…

SpringBoot集成Jasypt对数据库连接密码进行加密、解密

引入依赖 <!--配置密码加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version></dependency><plugin><groupId>c…

分类器引导的条件生成模型

分类器引导的条件生成模型 分类器引导的条件生成模型1. **基本概念**2. **核心思想**3. **实现步骤&#xff08;以扩散模型为例&#xff09;**4. **优点**5. **挑战与注意事项**6. **应用场景**7. **数学推导**总结 分类器引导的条件生成模型 分类器引导的条件生成模型是一种通…

WPF中的ObjectDataProvider:用于数据绑定的数据源之一

ObjectDataProvider是WPF(Windows Presentation Foundation)中一种强大而灵活的数据绑定源&#xff0c;它允许我们将对象实例、方法结果甚至是构造函数的返回值用作数据源。通过本文&#xff0c;我将深入探讨ObjectDataProvider的工作原理、使用场景以及如何在实际应用中发挥其…

lasticsearch 报错 Document contains at least one immense term 的解决方案

一、问题背景 在使用 Elasticsearch 存储较大字段数据时&#xff0c;出现如下异常&#xff1a; ElasticsearchStatusException: Elasticsearch exception [typeillegal_argument_exception, reasonDocument contains at least one immense term in field"fieldZgbpka"…

[目标检测] YOLO系列算法讲解

前言 目标检测就是做到给模型输入一张图片或者视频&#xff0c;模型可以迅速判断出视频和图片里面感兴趣的目标所有的位置和它 的类别&#xff0c;而当前最热门的目标检测的模型也就是YOLO系列了。 YOLO系列的模型的提出&#xff0c;是为了解决当时目标检测的模型帧率太低而提…

服务器操作系统时间同步失败的原因及修复

服务器操作系统时间同步失败可能导致日志记录不准确、安全证书失效等问题。以下是常见原因及对应的修复方法&#xff1a; ### 一、时间同步失败的常见原因 1. **网络连接问题** - NTP服务器无法访问&#xff08;防火墙阻止、网络中断&#xff09; - DNS解析失败或网…