[python]从零开始的API调用教程

news2024/11/24 12:58:11

一、API是什么?

        API即应用程序编程接口,是一组定义了不同软件系统或组件之间如何交互的规则和协议。API为开发者提供了一种简化的方式,通过预定义的函数或方法,来使用某个软件、库、操作系统或硬件的功能,而不需要深入了解其内部工作原理。

API 的类型

  1. Web API:也叫做网络API或HTTP API,允许应用程序通过网络(通常是互联网)进行交互。Web API通常使用HTTP协议,传递JSON或XML格式的数据。例如,天气预报应用可以通过调用一个天气服务的Web API,获取当前的天气信息。

  2. 操作系统API:操作系统提供的API允许开发者访问硬件资源或系统服务。例如,Windows API允许程序访问文件系统、网络连接、显示图形等操作系统功能。

  3. 库或框架的API:编程语言中的库或框架通常提供API,允许开发者调用其功能。例如,Python的requests库提供了简单的API来发起HTTP请求。

  4. 硬件API:一些硬件设备(如显卡、传感器等)也提供API,供开发者控制或与设备通信。例如,图形API(如OpenGL、DirectX)用于开发3D图形应用。

这里我们主要讲解web API,教大家怎么使用网络的方式调用一些远程的API从而简化我们的程序。

二、为什么我们需要web API?

        在如今庞大的互联网环境中,各个服务节点之间的交互是非常复杂的,每个服务器上都运行着不同的服务以供用户使用。当我们在开发一款应用时,我们可能需要为我们的应用添加一个天气查询功能,我们肯定不能自己在各地都成立气象站实时监测天气,当然这也不现实,首先是成本高昂,可实现性低,其次就是数据量庞大,处理这些数据的成本也高。那怎么办呢?当然是使用API来解决问题,我们自己不能做的事总会有别人做,别人将各地的天气数据收集好然后开放出相应的接口我们直接使用别人开放出来的接口即可。这样我们也不用在意这一切的实现,毕竟我们只需要调用接口就能知道某地的天气信息。当然,相对的,对方为我们提供了API的服务,其自身的成本也非常高昂,我们在调用某些API时,可能需要支付给API服务商一些费用。上面只是从用户出发的一个场景。下面我们从商户出发。假如,我作为一个商户,我开发了一款大模型。因为商业竞争原因,我不能将我的大模型直接开源,那我也想让我的用户使用,那应该怎么办呢?当然还是使用API,我不一定需要开源我的模型,我可以就我模型而言,开放相应的API给我的用户使用。这样我的用户只需要调用我的API就可以直接使用我的模型了。用户也可以就我模型的API开发新的应用,将我的服务嵌入到自己的软件中。当然,上面只是API一些常见的调用方式,API的使用场景还有很多,比如一些博客中的随机图片,每日一言,大多都是用API实现的。可以说API已经存在于我们生活中的方方面面。

三、需要准备什么?

        这篇API的调用教程已经不只针对于纯新手了,在学习之前需要大家具备一定的python基础,能够看懂最基本的代码,以及知道怎么使用pip安装python库。

四、如何调用一个大语言模型的API

        这篇文章是为了教会大家如何调用web API,这里我们主要使用百度千帆大模型进行演示。当大家会调用这个API以后,根据自己举一反三,后续许多API大家都能自行进行调用了。如果你准备好了,那就让我们开始吧!

这里我们直接在浏览器中搜索“百度开放平台”:

如果你没有搜到,可以直接点下面的链接直接进入:

百度开放平台:百度AI开放平台-全球领先的人工智能服务平台 (baidu.com)

进来以后就可以看到以下的界面了:

下面我们点击“文心大模型”:

再点击“百度智能云千帆大模型平台”:

点击以后就来到了以下界面:

往下滑就能看到百度推出的最新的几款模型:

这里我们主要教大家如何调用接口,以及如何阅读接口文档,这里我们随便选择一款模型,点击

“API文档”:

这里我们只是作为演示,也是为了教会大家如何使用,所以我就随便选取了一个模型的API文档,这里我选择的是“ERNIE 4.0”的API作为演示:

因为我们这里教大家API调用,更注重调用时的细节,虽说百度已经封装好了相关的SDK,调用起来更方便,但是为了学习API调用的原理,我们这里还是选择“HTTP”调用:

这里简单的来说一下两者的区别,SDK是封装好的一个库,我们可以直接使用并且不需要在意调用时的细节。HTTP调用是最原始的API调用方法,API的提供者通过开放一个网络接口,我们使用指定请求方式向接口请求数据,并且接收API接口的返回值。现在,相信你对API和SDK都有一定的了解了,那就让我们来看看文档吧!

 这里我们首先看到“HTTP调用”方法的“鉴权说明”:

这里的鉴权主要是用于验证用户身份,之前也提到过,我们有的API是收费的或者为了防止API被滥用,许多API都设立鉴权,用于验证用户身份或者计费。

因为我们这里使用“access_token”鉴权,我们可以这里的链接了解这种鉴权方式:

当我们点击了上面的链接以后,来到了一篇新的文章,这篇文章会教我们如何鉴权:

这里我们使用”access_token鉴权认证“,所以我们看文章的第一部分:

在文档中,这里一共有三个步骤,分别是“获取API key和Secret Key”,“通过调用接口获取access token”,“使用accesstoken”:

根据文档的步骤,这里我们先去获取“API key和Secret Key”,同样的,我们可以点击提供的文档:

这里的两个key获取的步骤比较简单,就不详细讲解了,大家自行创建好应用就可以看到key了:

然后我们就可以进行下一步了,这里我们需要使用接口获取“access_token”,我们同样进入它的相关文档:

下面我们看到请求说明:

这里我们就需要写代码了,大家打开自己熟悉的IDE,这里我使用的是pycharm,如果你想知道pycharm的安装方法,可以看下面的教程:

pycharm安装教程:[python]我们应该如何正确的安装和汉化pycharm,并且导入开发环境?_python汉化-CSDN博客

我们可以在pycharm中新建一个工程并且导入一个python环境,如果你还不会导入开发环境,可以参考上面的教程。

如下图,我们的pycharm环境已经创建好了并且已经导入了一个python环境:

首先,既然要请求API接口,我们需要一个python中的网络请求库,这里我们在python中最常用的网络请求库是“requests”库,我们使用下面的命令来安装“requests”库:

pip install requests

在安装好requests库以后,我们就可以开始写代码了。

这里我们继续回到获取access token的文档:

我们首先在python代码中引用我们安装好的requests库:

然后我们要在这个文件中指定python的函数入口点,因为后面我们会封装许多函数,所以这里要指定一个python的入口点,这里在入口点的下方随便写一个函数防止报错:

下面我们来封装我们的第一个函数,用来获取access token:

在文档中我们可以看到,这里获取access token使用的是POST的请求方式,我们可以直接使用函数“requsts.post”函数,我们可以看到,这个函数的显性参数有这些:

这里我们需要填写的有“url”,“headers”,“data”几个,即使这里的“headers”参数在“requsts.post”函数中被明确要求,但是在API文档中headres参数被要求了值,这里我们仍然要将其加入:

这里我们首先就可以来写headres,我们可以使用一个字典来存放headres:

    headers={
        'Content-Type' : 'application/json',
        'Accept': 'application/json'
            }

这里的'Content-Type' : 'application/json'表示向服务器提供的数据是JSON格式的,这是在文档中被要求的。'Accept': 'application/json'表示期待服务器的回复也是JSON,这个是用户定义的,如果服务器的返回值默认是JSON这个也可以不写。

然后我们来写url,这里我们直接使用一个变量来装url就行了,这里在文档中,我们看到Query参数:

这里的Query参数我们需要填写在url中,如图:

这里的url大家按照我的格式写即可,注意观察我的url中的参数和文档中提到的Query参数:

url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=oQhJMMU2YLjkPE8jbnUl7dlg&client_secret=l0sWf63eSYXAdL6ZNGWHA5eSFIPNZhm2"

将函数写完以后,就可以将我们封装的函数写道main函数中测试一下,如果前面都写对了的话,就可以得到下面的结果了:

如果你在这一步中,执行了函数但是没有值返回,你可以考虑查看url中的Query参数有没有写错,反复核对一下文档,请求url和和Query参数之间有没有用?分隔。如果返回一个错误的JSON,可以根据错误内容和错误代码解决相关问题。下面我们来举一个例子,也是作为一个错误复现,假如我将我的key中的一个字符删除,就会出现以下错误:

这里的“unknown client id”翻译过来就是“未知的用户id”这就表示我们的key错了。每一种以JSON形式返回的错误都是有解决方法的,如果在这一段JSON中没有直接提示错误也会提示错误码,大家可以对照文档下面的错误码查询解决办法:

我们现在将程序调到正常的状态,我们可以看到返回JSON数据中有一个access_token的键:

我们可以提取JSON中的这个键:

在代码中加入下面的代码:

    returnjson = returndata.json()
    access_token = returnjson.get("access_token")
    print(access_token)

简单解释一下,“returnjson = returndata.json()”用于对返回值创建一个JSON的对象。

“access_token = returnjson.get("access_token")”,为了将JSON对象中的“access_token”键提取出来并存放在“access_token”变量中。

“print(access_token)”,将我们的access_token打印出来。

这样我们就得到了下面的结果:

我们可以为这个函数写一个返回值,直接将我们的access token作为函数的返回值:

至此,我们已经获取到了access token,让我们回到鉴权的文章中,我们可以看到,这里是最后一步,怎么使用access token:

这里我们直接将access token按照一定格式加在我们的API接口后面即可。现在我们不着急拼接,我们写一个调用API的函数,因为我们这里是调用的语言模型,我们就可以将我们说的话作为函数的传入参数,将AI的回复作为函数的返回值:

我们先调用一开始封装好的获取access token的函数,将我们的access token存放在一个变量中:

下面我们按照文档中的鉴权要求拼接url:

url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token="+access_token

这里的url如果你不确定有没有拼对,可以考虑将其打印出来:

打印出来得到以下结果:

这样就表示我们的url与accesstoken拼接成功了。注意,格式一定要一样,如果在这里出现问题,在后面肯定会调用失败,请反复检查是否使用?分隔,检查有没有加=号。

我们继续看API文档:

这里可以看到,我们这里的API请求方式仍然需要使用POST的方式,我们同样的将POST的请求函数写出来,再看看差什么,再考虑写什么?

这里我们url已经有了还差headers,和data。这里的headers我们直接复制上面个的就行:

最后我们来写data,这里我们再看文档:

这里的data我们要写成JSON格式的,里面要放一个键messages作为与AI的对话内容,也可以将AI的回复内容保存在其中让AI具有上下文能力,这里我们将文本转换为JSON并且存放在变量中,大家按照此格式写即可:

    payload = json.dumps({
        "messages": [{"role": "user", "content": "你好"}]
    })

上面我们要的都凑齐了,我们下面来填写“requests.post”函数的参数,如下:

requests.post(url,headers=headers,data=payload)

我们同样的将其返回值打印出来:

大家可以看到,我们这里已经收到了AI的返回值了。

我们同样的,使用上面的代码将AI的回复提取出来:

returnjson =  returndata.json()
baiduchat = returnjson.get("result")
print(baiduchat)

这里可以看到,AI的回复已经成功的被提取出来了:

我们这里将AI的回复内容作为函数的返回值,并且将传入的参数作为我们要对AI说的话放在messages中:

我们直接将这个函数的返回值打印出来:

可以看到,我们这里的回复已经打印出来了:

五、结语

        在本次教程中,教了大家如何根据API的文档来调用API,自己阅读文档调用API也能更直观的感受一个API的调用过程。如果大家在调用API时遇到了我没有提到的问题,可以考虑多次阅读文档,或者使用文档中的请求示例。在使用请求示例时,直接将相关的key填入对应的位置即可。当然,本次教程是为了教会大家,如果遇到要调用API的场景,到底应该怎么办,怎么去准备需要的数据。这篇教程中我们首先为了鉴权去获取access token,然后又根据文档中的示例进行了鉴权。最后我们根据API文档中的参数,将我们对AI的对话填入messages中,最终完成的调用。不只是百度的API,有很多API的调用方式都与这个类似,在调用API时仔细阅读文档,观察哪些东西是必须的。最后,感谢大家观看!

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

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

相关文章

图像编辑大一统?多功能图像编辑框架Dedit:可基于图像、文本和掩码进行图像编辑。

今天给大家介绍一个基于图像和文本的编辑的框架D-Edit,它是第一个可以通过掩码编辑实现图像编辑的项目,近期已经在HuggingFace开放使用,并一度冲到了热门项目Top5。 使用 D-Edit 的编辑流程。用户首先上传一张分割成多个项目的图像。微调 DPM…

CTFHUB技能树之文件上传——前端验证

开启靶场,打开链接: 看到提示是js前端验证 直接F12查看前端源代码: 可以看出对上传的文件做了限制,只能上传.jpg、.png、.gif文件 (小插曲:本来我想着直接删除onsubmit处的代码的,但是删了之后…

沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元

在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。在这场变革中,沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力,成为了抖音小店领域的佼佼者,…

功能推荐 | TopOn 智能管家,开发者收益提升好帮手,一键托管自动提升ARPU!

01 什么是智能管家 智能管家,是TopOn SDK基于广告位填充率、广告源预估收益等大数据学习的基础上开发的一项新功能,它能根据当前开发者流量分组瀑布流配置的数据情况,自动判断对应广告源是否需要开启/关闭,以及是否需要增加Biddi…

SpringBoot整合mybatisPlus实现批量插入并获取ID

背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…

Verilator——最简单、最细节上手教程

目录 前言工具安装Verilator 安装GTKwave 安装 Verilator 基础用法fst格式和vcd格式的wave文件Verilator 的使用 Verilator 的进阶使用与GDB搭配与makefile搭配 Verilator 的高阶用法访问模块内部数据 前言 此教程会以ubuntu22.04为例 从如何安装,到如何使用 全程帮…

coze上构建必应搜索工作流

首先登入COZE网站,打开工作空间,进入后默认是个人空间,在其下方选择资源库,最后在右上角点击资源按钮,在弹出的列表中点击工作流。 构建必应搜索工作流 Coze官方介绍:必应搜索插件,其中插件输…

【网络】IP协议的地址管理

【网络】IP协议的地址管理 一. IP协议格式二. 地址管理1.动态分配IP地址2.NAT机制2.1 NAT机制下网络的请求/响应 3. 网段划分3.1 特殊的IP地址 4.路由选择5.DNS域名解析系统 一. IP协议格式 4位版本号(version): 指定IP协议的版本(IPv4/IPv6), 对于IPv4来…

AI工具:最受欢迎与最佳体验的探索

在当今数字化的时代,人工智能(AI)技术的广泛应用正在彻底改变我们的生活方式、工作方式和社会交往。AI工具不仅在工业生产、医疗诊断、金融服务等领域发挥着关键作用,还深入日常生活,为人们带来便捷与高效。本文将探讨…

基于SpringBoot的旅店管理系统的设计与实现源码+Vue前端(酒店、民宿、功能较多)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

基于JSP实习管理系统【附源码】

基于SSM的学生管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统功能结构设计 4.3数据库设计 4.3.1数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1管理员功能介绍 5.1.1管理员登录 5.1.2…

RuoYi-Vue若依 环境搭建 速成

一、若依简介 RuoYi-Vue 是一个开源的后台管理系统,适用于快速开发企业级应用。该平台由两部分组成:前端和后端。 (1)技术框架 前端技术: Vue.js: 前端框架使用 Vue.js,这是一种流行的JavaScript框架&a…

鸿蒙网络编程系列28-服务端证书锁定防范中间人攻击示例

1. TLS通讯中间人攻击及防范简介 TLS安全通讯的基础是基于对操作系统或者浏览器根证书的信任,如果CA证书签发机构被入侵,或者设备内置证书被篡改,都会导致TLS握手环节面临中间人攻击的风险。其实,这种风险被善意利用的情况还是很…

数据结构与算法——Java实现 44.翻转二叉树

目录 226. 翻转二叉树 思路 代码 本地代码测试 不管前方的路有多苦 只要走的方向正确 不管多么崎岖不平 都比站在原地更接近幸福 —— 24.10.21 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输…

GEE引擎传奇UI界面修改教程

还记得小林之前给大家分享了gom引擎UI界面编辑教程,今天给大家分享一下gee引擎UI界面修改教程 首先打开登录器生成器-客户端界面设置 在客户端界面设置这里可以自定义UI素材,也可以直接在原素材上编辑主界面 传奇根目录指向的是你的传奇客户端根目录&am…

单神经元建模:基于电导的模型[神经元结构、静息电位和等效电路]

文章目录 神经元结构、静息电位和等效电路神经元结构静息电位能斯特方程1. **描述浓度比的非线性关系**:2. **化学势与电势的关系**:3. **对称性**:4. **热力学与平衡**:总结: GHK方程Nernst方程和GHK方程的对比 等效电…

深度学习:YOLO目标检测和YOLO-V1算法损失函数的计算

简介 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,它的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测目标的类别和位置。 YOLO算法将输入图像分成SxS个网格,每个网格负责预测…

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…

Kafka之原理解析

定义 Kafka 是一个分布式流媒体平台,kafka官网:http://kafka.apache.org/ Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语言编写,目前是Apache 的开源项目。 流媒体…

深入解析Golang GMP

文章目录 1. 引言2. GMP 模型概述与核心结构体2.1. G(Goroutine)2.2. M(Machine/Thread)2.3. P(Processor)2.4. 全局调度器schedt(Scheduler) 3. Goroutine 的生命周期与状态管理3.1…