揭开ChatGPT面纱(2):OpenAI主类源码概览

news/2024/12/22 22:43:25/

文章目录

  • 〇、使用OpenAI的两个步骤
  • 一、初始化方法__init__()
    • 1.源码
    • 2.参数解析
  • 二、提供的接口
    • 1.源码
    • 2.接口说明
      • 主要接口说明

OpenAI版本==1.6.1


〇、使用OpenAI的两个步骤

在上一篇博客中,我实现并运行了一个OpenAI的demo,我们可以发现,想要使用OpenAI完成一个需求仅需要两个步骤,第一步是 传入参数 配置并声明对象,第二步是 调用接口 实现需求。

在这里插入图片描述

清楚这两点后,我们接着来看看源码。

openai包中,OpenAI类是核心类,它作为客户端库的入口点,提供了与OpenAI API进行交互的方法和属性。这个类封装了API的各种功能,使得开发者可以通过编写代码来使用OpenAI提供的各种服务,如文本生成、图像生成、模型微调等。

下面我将针对OpenAI的源码文件_client.py进行一个概览说明。

一、初始化方法__init__()

这个方法是OpenAI Python库中用于配置和初始化客户端实例的一部分,允许用户设置各种参数以定制他们的API请求。

1.源码

def __init__(self,*,api_key: str | None = None,organization: str | None = None,base_url: str | httpx.URL | None = None,timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN,max_retries: int = DEFAULT_MAX_RETRIES,default_headers: Mapping[str, str] | None = None,default_query: Mapping[str, object] | None = None,http_client: httpx.Client | None = None,_strict_response_validation: bool = False,)

在这里插入图片描述

2.参数解析

参数名数据类型默认值描述
api_keystrNone用于OpenAI API的认证密钥。如果设置为None,将尝试使用环境变量中的密钥。
organizationstrNone指定使用OpenAI API的组织名称。如果用户属于特定的组织,可以在这里指定。
base_urlstrNone指定OpenAI API服务的基础URL。如果设置为None,默认使用OpenAI的官方API URL。可以用来设置代理。
timeoutUnion[float, Timeout, None, NotGiven]NOT_GIVEN设置请求的超时时间。可以是一个浮点数表示秒数,或者是一个Timeout对象。
max_retriesintDEFAULT_MAX_RETRIES设置最大重试次数。默认值由库的常量DEFAULT_MAX_RETRIES决定。
default_headersMapping[str, str]None设置默认的请求头部。映射类型,键是头部名称,值是头部值。
default_queryMapping[str, object]None设置默认的查询参数。映射类型,键是参数名称,值是参数值。
http_clienthttpx.ClientNone允许用户配置一个自定义的httpx.Client实例。这可以用于更高级的HTTP请求定制,如设置代理、SSL验证等。
_strict_response_validationboolFalse启用或禁用对API返回数据的模式验证。当启用时,如果API响应的数据不符合预期的模式,将引发APIResponseValidationError错误。这个参数可能会在未来被移除或更改。如果依赖此特性,建议用户在GitHub上开启一个issue,以帮助开发者决定是否将其作为未来公共接口的一部分。

二、提供的接口

OpenAI类继承自SyncAPIClient。这个类提供了一些高级接口,用于与OpenAI的API进行交互。

1.源码

class OpenAI(SyncAPIClient):completions: resources.Completionschat: resources.Chatedits: resources.Editsembeddings: resources.Embeddingsfiles: resources.Filesimages: resources.Imagesaudio: resources.Audiomoderations: resources.Moderationsmodels: resources.Modelsfine_tuning: resources.FineTuningfine_tunes: resources.FineTunesbeta: resources.Betawith_raw_response: OpenAIWithRawResponse# client optionsapi_key: strorganization: str | None

在这里插入图片描述

2.接口说明

  • 首先,最后两行是一个client的配置,并不属于OpenAI类的接口:
  1. api_key:

    • 属性类型: str
    • 描述: 用于认证的API密钥。这个密钥是必需的,以确保用户有权访问OpenAI的API。
  2. organization:

    • 属性类型: str | None
    • 描述: 组织标识符,如果用户属于某个OpenAI组织,可以在这里指定。如果用户不属于任何组织,可以留空或设置为None

主要接口说明

在这里插入图片描述

  1. completions:

    • 属性类型: resources.Completions
    • 描述: 这个属性提供了一个用于生成文本完成的接口。它允许用户发送提示给OpenAI的语言模型,并接收由模型生成的文本响应。
  2. chat:

    • 属性类型: resources.Chat
    • 描述: 这个属性提供了一个用于创建和管理对话式AI的接口。它可以处理多轮对话,并允许用户与AI进行交互,类似于与聊天机器人的对话。
  3. edits:

    • 属性类型: resources.Edits
    • 描述: 这个属性提供了一个用于修改和改进文本的接口。它可以对生成的文本进行微调,以提高其连贯性、事实准确性或风格。
  4. embeddings:

    • 属性类型: resources.Embeddings
    • 描述: 这个属性提供了一个用于生成文本嵌入的接口。文本嵌入可以用于语义搜索、文本相似性比较等任务。
  5. files:

    • 属性类型: resources.Files
    • 描述: 这个属性提供了一个用于上传和下载文件的接口。这些文件可以用于进一步的处理或生成。
  6. images:

    • 属性类型: resources.Images
    • 描述: 这个属性提供了一个用于生成图像的接口。它可以利用OpenAI的DALL-E或其他图像生成模型来创建图像。
  7. audio:

    • 属性类型: resources.Audio
    • 描述: 这个属性提供了一个用于处理音频的接口。它可以用于生成、转录或其他音频相关的操作。
  8. moderations:

    • 属性类型: resources.Moderations
    • 描述: 这个属性提供了一个用于内容审核的接口。它可以检查文本内容是否违反了OpenAI的使用政策。
  9. models:

    • 属性类型: resources.Models
    • 描述: 这个属性提供了一个用于列出和检索有关模型信息的接口。它可以用来获取不同模型的详细信息。
  10. fine_tuning:

    • 属性类型: resources.FineTuning
    • 描述: 这个属性提供了一个用于模型微调的接口。用户可以创建、管理和监控模型微调作业。
  11. with_raw_response:

    • 属性类型: OpenAIWithRawResponse
    • 描述: 这个属性可能允许用户获取原始的API响应数据,而不仅仅是处理后的响应内容。

在这一篇博客中我们对OpenAI的参数和接口有了一些基本了解,后续的博客将会陆续对这些接口进行代码实践。


http://www.ppmy.cn/news/1434692.html

相关文章

批量添加集合元素

方法一: Collections.addAll() 方法内部会迭代传递给它的元素列表&#xff0c;并将每个元素添加到目标集合中。 List<Integer> list new ArrayList<>();Collections.addAll(list,1,2,3,4,5); 方式二: ArrayList 类有一个构造函数&#xff0c;它接受一个 Colle…

NodeRed节点编辑用于边缘计算和规则引擎,能做带UI界面和业务逻辑的上位机或前端应用吗?

网站&#xff1a;hhtp://www.uiotos.net 先说结论&#xff0c;可以&#xff0c;但是需要有页面嵌套继承类似的技术&#xff0c;实现页面模块化封装&#xff0c;否则难以实现复杂应用。 相信目光敏锐的人都在关注节点编辑在自身行业的应用&#xff01; NodeRed在边缘计算做数据…

鸿蒙开发中:首选项(Preferences)和长连接(PersistentStorage)的区别

Preferences&#xff1a;可看做是配置项&#xff0c;为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。Preferences中的数据会被缓存在内存中&#xff0c;因此它可以获得更快的存取速度。 PersistentStorage&#…

【简单介绍下PostCSS】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

CTFHub(web sql注入)(二)

布尔盲注 盲注原理&#xff1a; 将自己的注入语句使用and与?id1并列&#xff0c;完成注入 手工注入&#xff1a; 爆库名长度 首先通过折半查找的方法&#xff0c;通过界面的回显结果找出数据库名字的长度&#xff0c;并通过相同的方法依次找到数据库名字的每个字符、列名…

收集统计信息报错ora-00600[16515]问题处理

1、基础环境 操作系统Oracle Solaris 11.3 数据版本Oracle 12.2 2、故障理像 对一个20T的大库收集一下全库的统计信息 原因是现在都2024年了&#xff0c;这个库的统计信息基本都是2021年&#xff0c; 没具体查找啥原因导致的系统自定义的收集任务失败&#xff0c;于是决定手…

对已知数组排序

要对已知的数组进行排序&#xff0c;有很多种方法可以实现&#xff0c;以下是两种常见的排序算法&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 冒泡排序是一种比较简单但效率较低的排序算法。它的基本思想是通过不断地交换相邻元素&#xff0c;将最…

Linux_应用篇(04) 标准 I/O 库

本章介绍标准 I/O 库&#xff0c; 不仅是 Linux&#xff0c;很多其它的操作系统都实现了标准 I/O 库。 标准 I/O 虽然是对文件 I/O 进行了封装&#xff0c;但事实上并不仅仅只是如此&#xff0c;标准 I/O 会处理很多细节&#xff0c;譬如分配 stdio 缓冲区、以优化的块长度执行…