【OpenAI库】从0到1深入理解Python调用OpenAI库的完整教程:从入门到实际运用
文章目录
- Moss前沿AI
- 一、初识OpenAI API
- 1.1 获取API-Key(两种方案)
- 1.2 安装OpenAI库
- 二、Python调用OpenAI API的基础设置
- 2.1 设置API密钥和Base URL
- 2.2 参数详解
- 三、构建一个简单的聊天应用
- 3.1 创建聊天请求
- 3.2 参数详解
- 3.3 处理响应
- 四、完整代码示例
- 1.Python示例代码(基础)
- 2.Python示例代码(高阶)
- Moss前沿AI
- 五、总结
Moss前沿AI
【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!
【VScode】VSCode中的智能AI-GPT编程利器,全面揭秘ChatMoss & ChatGPT中文版
【GPT-o1系列模型!支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率!】>>> - CodeMoss & ChatGPT-AI中文版
在当今的人工智能时代,OpenAI的API为开发者提供了强大的工具来构建智能应用程序。无论你是AI领域的新手还是经验丰富的开发者,掌握如何使用Python调用OpenAI库都是一项必备技能。在这篇文章中,我们将详细解析如何使用Python与OpenAI API进行交互,从基础设置到高级应用,帮助你从入门到精通。
一、初识OpenAI API
OpenAI API是一个强大的接口,允许开发者通过简单的HTTP请求与OpenAI的模型进行交互。通过API,你可以实现自然语言处理、文本生成、对话系统等多种功能。为了开始使用,你需要一个API密钥和基本的Python编程知识。
1.1 获取API-Key(两种方案)
- 1、从 OpenAI官网 获取API-Key。(点击名称就能够访问)
- 2、从 CodeMoss工具 获取API-Key。(点击名称就能够访问)
1.2 安装OpenAI库
在开始编写代码之前,确保你的Python环境中已经安装了OpenAI库。你可以通过以下命令安装:
pip install openai
二、Python调用OpenAI API的基础设置
在这一部分,我们将介绍如何设置API密钥和基本的请求参数。
2.1 设置API密钥和Base URL
在使用OpenAI库时,首先需要配置API密钥和Base URL。以下是一个简单的示例:
- 如果用的OpenAI官网提供的KEY那么就不需要填写
BaseUrl
,因为openai库已经内置了URL:https://api.openai.com/v1
。源码和示例如下:
示例:
from openai import OpenAIclient = OpenAI(api_key="api_key", # 只需要填写key就可以了)
response = client.chat.completions.create(messages=[{'role': 'user', 'content': "1+1"}, ],model='gpt-3.5-turbo',stream=True
)
for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)
openai源码:
- 如果你用的是第三方的,那么就要需要填写BaseUrl。但是要注意的是BaseUrl的地址链接参数,是否和源码一致。在下面的示例中你可以看到内置的BaseUrl链接后面是带
v1
的:https://api.openai.com/v1
。所以你要检查从其他地方获取的BaseUrl
是否完整,例如:CodeMoss里面的获取的就不带v1
,那么我们就需要手动在后面拼接v1
。如下:
配置前获取的BaseUrl
base_url="https://testchatmoss.aihao123.cn/luomacode-api/open-api/"
配置后的BaseUrl
base_url="https://testchatmoss.aihao123.cn/luomacode-api/open-api/v1"
注意结尾
代码示例:
from openai import OpenAIclient = OpenAI(api_key="api_key", # 填写提供的api_keybase_url="base_url" # 填写提供的base_url)
response = client.chat.completions.create(messages=[{'role': 'user', 'content': "1+1"}, ],model='gpt-3.5-turbo',stream=True
)
for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)
2.2 参数详解
api_key
: 这是你从某个渠道获取的API KEY,用于验证你的身份。base_url
: 这是API的基础URL,通常由OpenAI或者某个渠道提供。
三、构建一个简单的聊天应用
接下来,我们将构建一个简单的聊天应用,展示如何使用OpenAI的聊天模型。
3.1 创建聊天请求
使用OpenAI的聊天模型,你可以创建一个对话请求。以下是一个简单的示例:
response = client.chat.completions.create(messages=[{'role': 'user', 'content': "1+1"},],model='gpt-3.5-turbo',stream=True
)
3.2 参数详解
messages
: 这是一个列表,content
是你的的问题。user
是你的角色。model
: 指定使用的模型版本,如gpt-3.5-turbo
。stream
: 如果设置为True
,则响应将以流的形式返回。
3.3 处理响应
处理响应时,你可以逐块读取数据并输出结果:
for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)
四、完整代码示例
我这个是CodeMoss工具获取的api_key
,示例代码就配置了base_url
,完整代码和获取KEY的地址如下:>>> 获取OpenAI API Key的多种方式
1.Python示例代码(基础)
基本使用:直接调用,没有设置系统提示词的代码
from openai import OpenAI
client = OpenAI(api_key="这里是CodeMoss的api_key",base_url="这里是上图的base_url"
)response = client.chat.completions.create(messages=[# 把用户提示词传进来content{'role': 'user', 'content': "Python的排序由几种方式?"},],model='gpt-4', # 上面写了可以调用的模型stream=True # 一定要设置True
)for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)
输出结果:
2.Python示例代码(高阶)
进阶代码:根据用户反馈的问题,用GPT进行问题分类
from openai import OpenAI# 创建OpenAI客户端
client = OpenAI(api_key="your_api_key", # 你自己创建创建的Keybase_url="your_base_url" # 你的base_url
)def api(content):print()# 这里是系统提示词sysContent = f"请对下面的内容进行分类,并且描述出对应分类的理由。你只需要根据用户的内容输出下面几种类型:bug类型,用户体验问题,用户吐槽." \f"输出格式:[类型]-[问题:{content}]-[分析的理由]"response = client.chat.completions.create(messages=[# 把系统提示词传进来sysContent{'role': 'system', 'content': sysContent},# 把用户提示词传进来content{'role': 'user', 'content': content},],# 这是模型model='gpt-4', # 上面写了可以调用的模型stream=True)for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)if __name__ == '__main__':content = "这个页面不太好看,交互不太好,点击按钮的时候不太方便"api(content)
输出结果:
Moss前沿AI
【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!
【VScode】VSCode中的智能AI-GPT编程利器,全面揭秘ChatMoss & ChatGPT中文版
【GPT-o1系列模型!支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率!】>>> - CodeMoss & ChatGPT-AI中文版
五、总结
通过本文的学习,你应该已经掌握了如何使用Python调用OpenAI库的基本技能。从获取API密钥到构建聊天应用,再到探索高级功能,这些知识将帮助你在AI开发的道路上走得更远。
相关文章:
【OpenAI库】从0到1深入理解Python调用OpenAI库的完整教程:从入门到实际运用
文章目录 Moss前沿AI一、初识OpenAI API1.1 获取API-Key(两种方案)1.2 安装OpenAI库 二、Python调用OpenAI API的基础设置2.1 设置API密钥和Base URL2.2 参数详解 三、构建一个简单的聊天应用3.1 创建聊天请求3.2 参数详解3.3 处理响应 四、完整代码示例…...
设计模式---建造者模式
建造者模式 一种创建型设计模式,它允许你一步一步地构建复杂对象。通过使用建造者模式,你可以将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。说白点就是,解决了构造函数创建对象的问题。 适用于那种构造函…...
安装MySQL 5.7 亲测有效
前言:本文是笔者在安装MySQL5.7时根据另一位博主大大的安装教程基础上做了一些修改而成 首先在这里表示对博主大大的感谢 下面附博主大大地址 下面的步骤言简意赅 跟着做就不会出错 希望各位读者耐下心来 慢慢解决安装中出现的问题~MySQL 5.7 安装教程(全…...
delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务
这篇博客展示了如何使用Delphi创建一个简单的HTTP服务器,并处理GET和POST请求。服务器监听6600端口,响应JSON格式的数据。客户端通过IdHttp组件进行GET和POST请求,获取并显示服务器响应的内容。 http服务器测试代码 procedure TForm1.FormSh…...
SVM支持向量机分类——基于Python实现
SVM支持向量机分类 1.描述统计 from numpy import * from scipy import * from pandas import * import matplotlib.pyplot as pltimport seaborn as sns glassread_csv(../data/第5章数据/Glass.csv,sep,) glass.head() glass[Type].value_counts()Type 2 76 1 70 7 …...
k8s使用的nfs作为sc。
k8s使用的nfs作为sc。 当前出现一个问题: 1.有一个pod他是通过流进行文件解压并写入到nfs服务器对应的目录中。 2.一个大压缩包下有20多个压缩包,递归解压。解压完成后应该是20多个文件夹,文件夹下有.json文件。 3.pod中的程序解压后去找以.j…...
tp6 合成两个pdf文件(附加pdf或者替换pdf)
最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下: use set…...
SpringBoot
SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 SpringBoot快速入门 新建maven工程,导入SpringBoot父工程以及依赖 <?xml version"1.0" encoding"UTF-8"?>…...
2024第六届金盾信安杯Web 详细题解
比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP 分别是 fillllll_put hoverfly ssrf fillllll_put 涉及: 绕过exit() 死亡函数 php://filter 伪协议配合base64加解密 一句话木马 题目源码: $content参数在开头被…...
The selected directory is not a valid home for Go SDK
在idea里配置go语言的环境时,选择go语言的安装目录,一直提示这个 The selected directory is not a valid home for Go SDK后来查了一下,发现原来idea识别不出来 需要改一下配置文件,找到go环境的安装目录,我是默认安…...
《智能体雏形开发(高阶实操)》开发计划概述
智能体雏形开发计划 通过本计划,逐步完成一个可以真实运行的智能体雏形。 最终完成一个**“用户日志文件生成日报,日报再进一步汇总成周报”**的任务驱动型智能体雏形 第一阶段:基础准备与环境搭建 1. 学习基础知识 了解智能体的概念、类型和技术框架。学习大模型(如阿里…...
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
💥 .NET开源 ORM 框架 SqlSugar 系列 🎉🎉🎉 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…...
【Linux】设计文件系统(C实现)
要求: (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(创建时间,修改时间以及…...
Redis+Caffeine 多级缓存数据一致性解决方案
RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战,文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能,但是可能会出现缓存一致性问题。如果数据频繁的变更,可能会导…...
SpringMVC(二)
Model 以Map方式进行存储,用于向作用域中存值。 注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key Controller //控制器类 public class IndexController {RequestMapping("/index3")public Strin…...
leetcode--螺旋矩阵
LCR 146.螺旋遍历二维数组 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元…...
动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
Selenium3+Python如何操作键盘
selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…...
数据仓库的概念
先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...
初级数据结构——二叉搜索树
目录 前言一、定义二、基本操作三、时间复杂度分析四、变体五、动态图解六、代码模版七、经典例题[1.——700. 二叉搜索树中的搜索](https://leetcode.cn/problems/search-in-a-binary-search-tree/)代码题解 [2.——938. 二叉搜索树的范围和](https://leetcode.cn/problems/ra…...
配置宝塔php curl 支持http/2 发送苹果apns消息推送
由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…...
ARP表、MAC表、路由表的区别和各自作用
文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...
限定符使用
正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果想要匹配零个、一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。常用限定符如下: <asp:TextBox [^>]> 正则表达式字符类[^>]匹配除过“>”之外的任何字…...
【k8s】创建基于sa的token的kubeconfig
需求 创建一个基于sa的token的kubeconfig文件,并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…...
计算机网络——不同版本的 HTTP 协议
介绍 HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…...
【Linux】vim编辑器练习
1.在/tmp目录下建立一个名为mytest的目录,进入mytest目录 (1)进入/tmp目录 cd /tmp (2)创建mytest目录 mkdir mytest (3)查看是否创建成功 ls 或 ls -l (4)进入mytest目录 cd mytest …...
StarRocks关于ConcurrentModificationException 问题的解决
背景 本文基于 StarRocks 3.1.7 目前在基于Starrocks做一些数据分析的操作(主要是做一些简单的查询),同事遇到了一些并发的问题: ontent:2024-11-27 07:04:34,048 WARN (starrocks-mysql-nio-pool-214933|3593819) [StmtExecutor.execute():643] execute Exceptio…...
MySQL MVCC 介绍
MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。MVCC通过在每个数据行上维护多个版本的数据来实现。当一个事务要对数据库中的数据进行修改时,MVCC不会…...
HTML 快速上手
目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…...
【树莓派5】移动热点获取树莓派IP并初次登录SSH
本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本:Windows11 24H2树莓派:树莓派5,Raspberry Pi 5SSH软件:…...
用html+jq实现元素的拖动效果——js基础积累
用htmljq实现元素的拖动效果 效果图如下: 将【item10】拖动到【item1】前面 直接上代码: html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …...
Zookeeper的通知机制是什么?
大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper的通知机制主要通过Watcher实现,它是Zookeeper客…...
VSCode如何关闭Vite项目本地自启动
某些情况下VSCode打开Vite项目不需要自动启动,那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可...
微软表示不会使用你的 Word、Excel 数据进行 AI 训练
微软否认使用 Microsoft 365 应用程序(包括 Word、Excel 和 PowerPoint)收集数据来训练公司人工智能 (AI) 模型的说法。 此前,Tumblr 的一篇博文声称,雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据,用…...
Redis缓存设计与性能优化
多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了…...
前端图像处理(三)
目录 一、大文件分片 二、图片添加防篡改水印 2.1、主图水印图(vue2) 2.2、主图文字(vue3) 一、大文件分片 并行传输:多个数据块可以同时并行传输,利用多线程或多路复用技术提高传输效率;减…...
JAVA设计模式,动态代理模式
动态代理(Dynamic Proxy)是Java中一种非常有用的设计模式。它允许在运行时创建一个实现了一组给定接口的新类。这种模式主要用于当需要为某个对象提供一个代理以控制对该对象的访问时。通过这种方式,可以添加额外的功能,如事务管理…...
谈论 PHP与XSS
本文将讨论一些脚本攻击问题,以及如何解决XSS脚本攻击问题 美好的周末就用来学点知识吧!!! ———————————————————————————————————— 文章目录 XSS跨站脚本攻击XSS是什么XSS类型:反…...
基于Java Springboot武汉市公交路线查询APP且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...
106.【C语言】数据结构之二叉树的三种递归遍历方式
目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...
解决WebView写入localstorage但首次加载取不到值的问题
本文是解决Android写localstorage的问题。 在android中,native经常需要和h5页面进行交互,比如将本地token写入h5,然后h5中的js获取token进行api请求。 写入localstorage的方法很标准,即在webview的onPageFinished中注入并调用一…...
CTF-PWN glibc源码阅读[1]: 寻找libc中堆结构的定义(2.31-0ubuntu9.16)
源代码在这里下载 来到malloc/malloc.c 在980行发现这段代码 // 定义最大 mmap 值为 -4 #define M_MMAP_MAX -4// 如果没有定义 DEFAULT_MMAP_MAX,则将其定义为 65536 #ifndef DEFAULT_MMAP_MAX #define DEFAULT_MMAP_MAX (65536) #endif// 引…...
Node.js 实战: 爬取百度新闻并序列化 - 完整教程
很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可…...
C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static
文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…...
【计算机网络】实验6:IPV4地址的构造超网及IP数据报
实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…...
【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)
打开 xshell ssh 登录远程服务器:卡在下面这里,迟迟不继续 当 SSH 连接卡在 Connection established. 之后,但没有显示远程终端提示符时,这通常意味着连接已经成功建立,说明不是网络连接和服务器连接问题,…...
node.js基础学习-querystring模块-查询字符串处理(三)
一、前言 querystring是 Node.js 中的一个内置模块,主要用于处理 URL 查询字符串。它提供了一些实用的方法来解析和格式化查询字符串,使得在处理 HTTP 请求中的查询参数等场景时非常方便。 还可以防止sql注入 二、解析查询字符串(parse方法&a…...
【C++】深入优化计算题目分析与实现
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯第一题:圆的计算我的代码实现代码分析改进建议改进代码 老师的代码实现代码分析可以改进的地方改进代码 💯第二题:对齐输出我的代码实现…...
【一起学习三维GIS】Cesium基础功能和项目讲解
一、Cesium整体介绍 Cesium正式发布于 2014 年,是一个完全开源的基于 WebGL 的 JavaScript框架,无需安装插件即可创建具有最佳性能、精度、视觉质量和易用性的世界级三维地球影像和地图,并且具有丰富的开源社区内容。 Cesium 作为一个较为…...
【docker】Overlay网络
什么是 Overlay 网络? Overlay 网络是一种 Docker 网络驱动,允许容器在不同主机间通信。 它依赖分布式存储(如 Swarm、Etcd 或 Consul)来管理网络配置和路由。 Overlay 网络的核心特点 跨主机通信:容器可以跨物理主…...