那么紧接着我们就来看看,Response API到底应该如何上手来进行使用。 这个其实是我们现在在去做开发的过程当中,可能都需要会涉及到一些底层的通信格式的讲解。 当然如果是去年的话,这部分内容应该是非常核心,非常重要的一部分的内容。 还有底层的开发范式,对不对?OpenAI的Response API,还有之前的ChatComplations API,这都是我们将用大模型的基础。 到现在在webcoding时代 这些很多功能 我们其实都可以让大模型 帮我们完成 所以像这部分内容 仍然是很重要 但是我们可能就不需要 去特别深入的吸引到 每一行代码 每一个参数 分别代表什么样的含义 这个程度来进行理解 你只需要知道是 它是干什么的 有什么用 以及你能怎么用 这个东西其实是最重要的 那么我们接下来就来看看 OpenAI的Responses API 到底是什么 当然这里大家如果不太了解 这个Response API到底是什么的话 你可以把它想象成就是OpenAI版的LongChain 专门负责给我们开发者一个接口 去更好的去调用这样的一些大模型 然后把它们和一些工具给它绑在一块 最后做成一个Agent 就是这样的一个API 可以这么来进行理解 当然其实这个Response API 是去年3月11号 OpenAI正式开源的一个全新的一种大模型调度的一种方法 然后官网在OpenAI官网上也有非常详细的 关于使用这个Response API的一些好处啊 和怎么去进行迁移呀的一些这个方法啊 当然这里我们要说明的是 其实每一家啊大保险厂商都有资格的啊 这个API的调度的这个范式 比如说对于这个 Anthelope来说啊 他们呢自己有一套Anthelope API啊 还有一套Cloud Agents SDK啊 那么对于OpenAI来说呢 他们家啊有这个Response API啊 和Agent SDK啊两套开发框架啊 这个其实每一家他们都会有推出一些适配自己家模型的一些agent通信和开发范式 是这么一回事 那么对于openAI来说 他们其实当然这个responses API就是现在他们来进行模型调度的过程当中最核心的响应的这样的方法 然后对于这个deep seek来说 他现在是接入到了responses API这功能体系里面来 当然这里其实有一个很有意思的一个点 就在于说其实之前有同学会问到说 Deepseek他们是怎么去考虑去接入OpenAI的Response API的呢 当然我们说对Deepseek来说 他一旦接入OpenAI这个Response API之后 他实际上就可以无缝的接入Codex的体系了 那他是怎么接入的呢 其实非常简单 就是在后训练的过程当中 给了他很多的一些指令方面的训练集 让他的响应格式能够和Response API的响应格式来进行兼容 这里其实就会说的会比较底层了 因为其实大家知道 对于任何大模型来说 它原始的这个输出这个内容 实际上就是一个又一个token 或者一个又一个字符 这个字符里面内容其实会非常非常多 然后大模型输出的 实际上是一段非常非常长的这个字符 那么我们每次呢 在去进行大模型的这个聊天的过程当中 实际上后台是需要把很长的这段字符 来进行各式各样的格式解析的 这段是什么 那段是什么 那么有一些呢 他输出这个结果是给用户去看的 原来某一段话的回复 那么也有一些输出这个结果 可能是比如说工具调用信息 他自己运行当中的一些状态信息等等等等 总之是有很长很长这段信息 那么这个信息是以什么样的格式来进行输出 他就可以被什么样的格式来进行解析 你可以这么来经理解 那只不过现在对于DeepseekV4 整个正式版的模型来说 他们选择了是以Responsees API这样的一个形式来进行输出 所以他们就可以被Response API来进行解析 所以他就跟他兼容了 这么来进行理解就可以了 是这么一回事 是他在训练过程当中进行的非常深度的设置 OK好 那么问题是Response API它是什么东西 对不对 它怎么样来进行的解析 那么非常完整的一次Response API的调用 大家可以看这段代码 那么这个代码实际上就是一次非常完整的 非常底层的 我们使用Python 当然你使用这个 使用这个TS 其实也是类似的 这样的语法规则 来去完成一次通过Response API 调用底层模型的 一整个完整的这样的一个流程 那它是什么样的呢 首先我们需要 这个import OpenAI 就导入这样的库 然后导入这个库之后 接下来我们需要实力化 一个OpenAI的客户端 然后在OpenAI客户端里面 输入你的Deepseek API key 和Deepseek的这个base URL 这个base URL是定死的 然后这个Deepseek API key 你需要自己去注册一个 那么这里就实力化了一个open AI的这样的客户端 然后有了这个客户端 或者你可以把它理解成是一个负了值的 一个open AI对象的一个实力化的一个对象 就这么一回事 然后接下来就可以调用client.response.create这样的一个命令 就可以去获得一次对应的模型回复的这样的响应结果 这里我们输入modal等于deep seek v4 flash 然后这个instructor代表的含义 实际上就是system prompt 你可以这么来自己理解 就是我们整个的agent运行的方式当中 system prompt 然后有一个input input代表的含义就是 我现在跟他来进行的对话 对不对 然后下面还有其他的参数 这下我们可以都不管 然后通过这样的方式 就可以完成一次模型的调用 当然我这里给大家举的例子 都是生成的英文的提出词 但用中文也是一样的 没有任何影响 总之就可以完成一次对应的响应 比如说我们这就可以让他来进行运行 我这个是在线的这个环境 就可以直接来进行运行 也是一样对不对 这个Response API 先做好一个Client 然后这Client 然后接下来就可以跟他来进对话了 就这么一回事 那么这个Client 实际上我们现在所说的这个Response API 实际上就是这Client里面的一个方法 通过他能够去获取一次又一次模型的响应结果 是什么样的一个情况 好 那么对于我们当前的这个Response API来说 其实它返回的这个结果里面 包含的消息会非常多 它会包含你的 比如说Reasoning Item 推理的字段的内容 会包含这个Message的内容 会包含这个Function Call 就是你工具调用这个内容 等等等等 价格式各样这个内容 然后这个Message里面还会包含 它模型本身的output 或者其他的一些警告 拒绝的一些信息 还有包括文本图像的一个信息 等等等等 也就是它实际上 你可以把理解成 就是一个完整的一种响应格式 是这么样的一个基本的定位 所以也是基于这样的响应格式 我们才能够去很好的去跟当前大模型来进行对话 能够把它的对应结果来进行一个输出 来进行一个响应 那么上面也是一样的 我们又来了一遍 这个Response API完整的执行流程 那么只不过在执行的过程当中 我们这里是考虑把每一个Response里面的所有内容 单独给你打印出来 来看一看它到底回复哪些东西 那么它回复内容包括什么Response ID Response的State Response Model 等等等等 总之就是 它的每一条消息回复里面 实际上会包含我们当前 所有的回复的内容 所有当前模型运行的 全部的这样的信息 换而言之就是 我们当前这样的模型 在执行当前任务的时候 所有的状态信息 你可以这么来进行理解 好 那么它和另外一个 就是我们经常会讨论的 叫Chat Compilation API 它们两者之间 到底是什么样的一个 什么样的区别 这里我们是首先需要放在这 来给大家来进行个探讨 因为其实很多同学之前 其实是了解 OpenAI的Chat Compilations API的 那么这里面 我们说OpenAI是原上一版本的 Chat Compilations API 它的核心的功能 是去围绕Message消息列表 来进行编辑 也就是说它实际上 是去维护一个又一个消息列表 那一个消息列表里面 我们需要由System 也就是说它实际上是去维护一个又一个消息列表,那一个消息列表里面我们需要有systemmessage,需要有usermessage,有的时候还会有大模型回复回来message, 但总之我们实际上重点是去维护它的模型每次运行过程当中消息列表,然后给它导入到当前模型里面去来进行一个运行, 来进行一个测试 然后最后的模型也给你返回出一个消息 它返回消息的本质的也是一条消息 所以原来的openAI它上一代的 或者deep seek也是一样 它之前支持的主要是chatcompletions API 那么它那些主要是去维护一个消息列表 而现在升级到了response API 你会发现它实际上是维护你当前运行的一个状态 所谓当前运行的状态 就指的是我们现在在运行的过程当中 一个模型它其实每次在进行响应的过程当中 它会有很多很多的一些状态方面这样的信息 而原来我们重点维护的消息列表 你可以把理解成只是状态当中的一个维度 仅此而已 那么现在我们说借助Response API 实际上对于开发者来说 其实就能够非常便捷的把一些工具 把一些这个extract给它放到一块 就可以迅速的构成一个agent 然后你只需要输入一个input 它背后就可以完整的去执行一整个agent loop 那所谓agent loop 这点大家也可以这么理解一下 就是我现在agent要调用一些工具 来完成一些事项 对不对 那这工具有的时候 我们需要多部的进行调用 有的时候也需要并发的来进行调用 对不对 那原来我们需要实现多部 或者并发的这样的工具调用 你可能得编写更加复杂的 这样的一个程序 或者是用比如说像long chain 这样的agent开发框架 对不对 它其实是支持内部 去完成agent loop这样的工作的 agent loop就是它不断不断去调用工具 直到它能够完成当前的请求为止 好 现在我们说这些功能 其实也是可以被responses API来去完成的 这个其实是它的一个功能上面这样的进阶 如果原来你是使用chat completion API的话 你可能就需要不断的去维护它的消息例表 其实整个过程会非常的繁琐 如果你需要去实现agent loop的话 其实你需要手动来进行搭建 而现在是用responses API 其实不需要 它内部是可以帮你去全自动的 完成agent loop这样的工作的 所以其实对于Responses API来说 它其实也就是你可以把它理解成 就是一个类似于LongChain这样的一个 agent和工具把它绑定一块的一个脚手架 这个是它的一个基础的认知 当然在OpenAI官方的给出的Responses API的说明里面 它其实也有谈到说 我们现在使用Responses API 相比于上一代的Chat Completions API来说 其实它的性能是增长了3% 它是在terminal的榜单上 它性能是增上了3% 也就是说明有了框架 去搭建一些agent 实际上是能够更好的 更加稳定的去维护这些agent运行的 它是有这样的一个功能在这 OK 这个是所谓的Responses API 当然我们说对于Responses API来说 我们下面还有很多的一些 大家可以课后自己再去来进行 深度学习的一些内容和素材 比如说它也是支持一些参数这样的调整的 对不对 比如说什么temperature 还有topia这样的一些底层的模型运行参数 这样的调整 比如说你这个temperature调整的范围是在0到2之间 然后temperature越高 那么它生成结果越就越不稳定 然后temperature越低 它生成结果越稳定等等等等 同时它也是支持直接通过一些json schema 这个是来进行structured output 就是结构化的输出 那么结构化输出呢 实际上在现在很多的agent开发场景下 都会非常非常的重要 对不对 你可以通过类似这样的方式 去设置好对应的这个结构化输出的 这个结构化这个文本的这个要求 然后呢 把它直接带入到我们的 Responses API的这个text参数里面去 就让它能够进行结构化的输出了 是这么一回事 当然我们现在公开课 其实一般来说就不会围绕 比如说结构化输出里面 具体它是规定哪些结构 这个Json schema的这个对象 到底代表什么样的含义 来展开来说 实际上也是因为 这东西都可以让大模型来完成 重点是你需要知道的是 有这个responsive API之后 它的结果化输出会非常稳定 是这么样的一个情况 具体怎么稳定 它其实有很多层的检验 什么text format 一层的检验 返回结果的Json格式的 一层本地的教验 最后再给你返回一个结果化输出 这样的文本 它是可以经过多层的教验和反馈 最后给你输出一个结构化的文本 这个其实是没有什么问题的 然后同时对于Response API来说 它还有非常关键的Tours的参数 对不对 Tours的参数我们一会儿就看到 它其实和Launcher里面的Tours的参数 实际上就是一样的 给它输入一个工具 然后它就可以调用这工具 来完成对应的工作 是怎么样的情况 所以对于整个的Response API来说 核心样的参数就这么些 模型instruction系统开发指令 对不对input 本次任务的基本请求 然后还有这个什么maxoutputtoken 这个最高的模型输出结果上线 还有这个temperaturetoppr reasoning 对它推理强度 刚不说了吗 这个V4这个模型 有三档推理强度 然后下面还有这个text 主要是去进行结构化输出的一些参数 然后还有这个tours 是可以绑定一些外部的这样的工具 然后它还有这个tourchoice 代表的含义是 我们每次运行的时候 指定的工具来进行运行 还有这个stream 对不对 流式打印等等等等 有很多很多这些参数 基本上如果你看这参数 你会感觉他整个的运行的状态 差不多就和LongChain的CreateAgent是非常类似的 对不对 那这个是现在对于DeepSeq V4正式版模型来说 他所选择的一套基本的API 当然下面还有关于什么流失打印 是怎么样来进行操作的 这一点大家也可以自己去看一下 下面还有对应的可以来进行测试和运行的代码 关于流失打印其实也是一样的 就是人工讲应起来 其实会非常 其实人工编写其实非常麻烦 但是对于现在的agent来说 他们编写其实非常简单 所以你只需要知道 他其实这个是可以非常顺利的 来进行实现的 就没有什么问题 然后同时 他由于是维护每次运行的状态 所以他也是可以把之前对话状态 给他传入进去的 把之前对话状态传入进去 实际上相当于是 把上一次任务执行记录的全部信息 包括上一次咱们对话这个信息 都给他输入进去 然后他就可以来实现多种对话了 就这么一回事 这个其实是它的多轮对话的历史保存的一个基本的方法 就是把它的之前上一轮的response id给它传入进去 那么它接下来就可以顺利的来进行多轮对话了 这个是它的一个基本设置 然后同时下面还有关于function calling的完整的外部循环 就是我们现在要去定一个外部工具 对不对 你这个什么查询天气的外部工具 各式各样的外部工具 包括这里面是个结构化信息的匹配的一个外部工具 等等等等 都可以通类似使用类似这样的方式来进行一个定义 定义好了外部工具之后 接下来在Responses API里面直接输入tools 然后把你的工具给它放进去 然后它就可以顺带进行运行 就这么简单 当然如果你去拆 如果你去看它底层的响应的过程的话 这里其实就是一个我们去看它底层响应的过程完整的事例了 那么你会发现 它其实底层仍然还是一个function calling的完整流程 就是你给它关联工具之后 你先给工具发送个请求 然后公共运行完了之后呢 给你一个function response message 然后你接收到function response message之后呢 再开启你的second response啊 就是再去结合最开始用户的问题啊 去给用户来进行回复啊 是这么一回事啊 所以这个呢实际上是一个验证的过程啊 你要说一下啊 对于response API来说呢 他的这个也是一样的 他的这个工具要用其本质上啊 也是这个function calling啊 跟现在所有的其他的这个agent开发框架的这个function calling啊 也全部都是一样的 当然他其实非常完善好 整个response API里面 他其实有非常完善的功能 包括它工具室外的时候 所以也是基於response API,我們說deepseek它現在是擁抱了response API,才能夠更好的去接入到我們現在的codex裡面來進行運行。 否则的话 如果Deepseekv4本身这个模型 它并不兼容Responsees API的话 那么它其实是没有办法 完整接入到Codex里面去 并且能完整的释放现在Codex的完整性能 这个其实做不到 当然其实我们上面关于底层的API这个讲解 一个其实比较快 第二个其实我们也是希望主要是给大家留下一些印象 知道是怎么一回事就可以了 因为之后的编写主要是让我们AI来进行编写 所以我们可能就不像之前的公块课一样 围绕每一个API的每一行代码来进行讲解 因为现在来看其实意义不是很大 你总之你核心是要知道 这个Response API到底是干什么的 这点其实会非常重要 当然下面我们其实是围绕Response API 做了一个小小的实验 我们来搭建了一个简单的一个agent 然后这个agent基本上就是 现在有很多很多张表 然后我们来做一个简单的数据分析 然后核心是从各个表当中 来进行数据提取跟数据查询 当然我们这里为什么跟大家去先使用这个Response API 搭建一个简单的数据分析 因为从下一个小节开始 我们在使用Codex这样更加复杂的工具的时候 实际上我们最后的目标这不就是搭建 对不对 长成这样的一个数据分析系统吗 只不过我们现在从最底层的API出发 一点点来进行学习 到最后能搭建这么一个比较复杂的数据分析系统 其实有很长的路要走 所以我们在最一开始就给大家举一个小例子 如果我们现在是使用Response API来搭建一个数据分析系统的话 那么未来它是一个 那么它首先这第一步应该怎么卖出去 然后我们再来考虑使用这Codex之后 你整个搭建数据分析系统的效率跟速度就可以起飞 对不对 我们来一步一步来看它是怎么样来进行运行的 当然这里我们涉及到一个数据集 叫Allist 它是巴西电商公司的一个开源数据集 这个数据集其实非常庞大 里面总共有这么十几万行的这个数据 那这个数据集也是我们之后 在做我们当前整个数据分析系统的性能测试的时候 最核心的这个数据集 所以大家可以看一下 当然其实对于所谓这个电商的这个数据 其实主要是分成这么两大类 一个是orders 一个是customers 这么两类的这个数据表格 它这个数据集不是一个单独的数据集 是分了好多好多好多个这个子数据的这个数据集 然后这个orders就是你订单 然后customer就是当前的客户 等等非常非常多 总之近期订单历史订单非常非常多 总共是一个世界外行的数据表格 那么这个数据表其实会有点复杂 我们一会儿都会看到这个数据表里面完整的内容 总之大家需要知道是 哎呀 这里有个数据表格 好 那么如果你现在想要使用 比如说Deepseek v4这样的模型 搭配着它现在已经兼容的Responsees API 去搭建一个数据分析系统 大家可以想想看有哪一些想法 对不对 其实我们对于现在的agent开发来说 首先你得有一个基本的思路 和一些基础的想法 可能我们就会涉及到 比如说我现在数据库 数据存储的数据库里面 所以我需要有一些 从数据库里面取出数据的这样的工具 对不对 然后也需要有一些 我们去查询数据这样的工具 然后同时还需要有一些读取数据的工具 然后同时还需要有一些 查询具体的每一个数据里面的 航和列之间的工具 这里面其实我们是给出一系列工具 列出数据表格 然后查询每一个数据表 什么来源表明 然后什么查询 什么每一个数据的 这个原数据 它的来源 它的最大最大行数 它的编写设计数代码来进行运行 同时还需要 去创建 去实现一个能够单独去创建数据集的 这样的一个外部工具等等 这个其实是我们现在的建议数据分析的过程当中 我们最核心 最常用的 无聊数据库来进行操作的啊 是像四项工具啊 列数表格 对不对 查他的这个原数据啊 就是查这个数据表格的这个真实情况 然后呢编写circle啊 来进行这个读数啊 然后呢去创建表格 把这个数据给取出来啊 基本上我们说这四个工具呢 是非常核心的 这么四个工具 好 那么下面啊 其实就是关于这四工具的 这样的一个定义的这个方法了啊 那么这里面呢 其实各个不同类型的这个工具啊 他呢 其实呃 我们上面他的具体的功能 其实定义还是非常清楚的啊 这里我们都是使用的python Sirco查询的一些工具 其实它背后的核心实现逻辑 就是把用户的输入的语言 把它转换成对应的Sirco代码 然后把它再去检查一下 Sirco代码本身这样的格式 那么接下来就可以来进行运行 就这么样的一个基本的使用方法 下面就是这些工具的一些创建这样的方式 然后紧接着我们就可以把这工具 给它关联到我们当前的Responses API里边来 那么接下来下面有一个Stream 就打印的这样的方式 那么接下来呢 我们说你的一个极简的啊 一个简易的这个agent啊 实际上就相当于是完成了啊 当然我们这里其实有个每一个 有每一个的这个外部函数 它具体完整的这样的这个定义方法啊 这里面呢 会有大家可以自己去看一下啊 因为实际上我们说啊 这个每个外部函数的这个定义呢 都会比较复杂啊 但是这里面先给大家简单的啊 留下一个这个印象啊 就是对于现在的 我们在进行啊 这个agent的开发过程当中啊 那么如果你需要去搭建一个 数据分析的这样的agent的话 然后如果你现在去使用这个Responses API的话 实际上实现起来会非常简单 我们说你只需要定义好 我们刚刚所说的拥有这些功能的外部函数 然后把这函数和我们当前的model模型放在一块 对不对来进行一个封装 然后最后它就可以直接就是一个简单的agent 就可以直接顺利来进行运行 就这么回事 但这里其实会具体涉及到很多的一些代码 就比如说我们如何把自然预言转化成sicle 对不对 然后呢Sircle本身这样代码如何去提升它的这样的准确性等等等等 那么这个可能就属于这个比较进阶的一些功能了 这个我们公开课可能就没有时间展开来说了 但是呢这里给大家提供的所有的这些代码呢 实际上每个代码都是可以真实的来进行运行的 然后呢大家如果感兴趣的话 课后呢可以单独再去看一下这个代码 或者你也可以直接能把它导到你本地的这个环境里边去 让它呢反正我们说每一个这个核心的这个外部函数 我们下面都有完整脚本和它的功能的这样的定义 你可以直接用它来进行的使用也是ok的 只不过这里我们就跟大家说的一点 是其实对于当前的Response API来说 如果你想创建一个数据分析agent 我知不知道它也可以非常简单 对不对 我们无非就是我的工具给它封闹到一起去 然后用户输入一个业务的问题 我们就看需要使用哪些工具 对不对 然后通过Response API 它本质上实际上是一个agent loop 它是一个不断循环的这样的一个操作 它就会不断的尝试去调用各式各样的工具 来进行多部工具调用 或者工具的这样的并发使用等等 然后最后完成了 最后就给输出一段最终这样的结果 然后最后我们也可以让它去绘制一些表格等等 它其实基本上就是这么样的一个过程 但是它底层 我们说上面其实大模型的运行的层 底层实际上我们肯定是需要有维护的收据库 这里其实我们默认的数据库是CircleLite和MyCircle这么两种数据库 然后那么无非就是下来我们上面各式各样生产出来的消息 或者你的Circle从你的数据库当中具体来进行运行等等 然后运行完了之后 你最后返回的Circle数据库这样的内容也会拼接到我们原始的消息列表里面去 然后共同回复用户当前这样的问题 就是这样的一个过程 所以其实现在我们在进行Agent的开发过程当中 本质上其实如果说最底层的话 无非就是创建好工具 然后和你当前的agent给他放在一块 然后最后来进行一些测试 来进行运行 看一下能不能够来进行顺利的运行 上面我们最下面 最上面这个脚本 最后面这两个脚本 实际上是去查询我们当前的数据 它一段时间的销量的结果 它的各式各样的 巴西店商各式各样不同品类的这样的商品 它实际上销量的一个分布情况 这个是我们来进行的一个查询 然后最后生成了一张图片 是这么一回事 那么实际上具体运行脚本和代码 实际上就是上面这些脚本和代码 这个是在数据库中查询数据的一个完整的脚本 那下面是查询完数据之后 生成最终运行结果的这样的脚本 那么里面实际上本质上都是去关联到我们当前agent 来进行一轮又轮的运行 是怎么样一回事