那么紧接着我们就来看看,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
来进行一轮又轮的运行
是怎么样一回事