在 GPTs 推出之后,我用它花了 5 分钟就配置了一个生成天气画报的 GPTs,目前看 GPTs 在提升 AI 应用研发效率上面还是做的非常好的,但并没有超出期望,它只是一种研发范式的创新,并没有带来质的变化:以前 Langchain+GPT4 做不到的事情,现在也做不到。
在这个功能出来之后,有人就说这个功能干死了一大批创业公司,因为很多创业公司都是在 ChatGPT 的接口上面套壳。而现在 OpenAI 亲自下场,直接把锅端走了,开发者不需要通过套壳平台来做聊天机器人,直接在官方的平台上面开发就行,没有中间商赚差价。于是就有了马斯克(模仿者)对奥特曼的灵魂拷问:

这个功能出来之后,有些人就说不会编程的普通人也能够开发 AI 应用了,以后就不需要程序员了。这个的东西真的有这么厉害吗?
GPT Builder 能帮我们做什么
奥特曼在发布会上面演示了一个用 GPT Builder 通过聊天的方式就创建了一个创业咨询 GPT,看起来很厉害,但其实自动化的能力还不够。我目前的试用下来,它主要还是一个辅助生成 prompt 的工具,有些高级功能比如知识库配置和 api 的配置还是需要自己手动实现,并且在这个过程中也不是很智能。
接下来我扮演一个不会编程的普通人,让 GPT Builder 通过纯聊天方式来生成一个天气画报 GPT,它的主要能力就是调用天气接口查询指定城市的天气,然后再用 DALL·E 生成天气画报。功能虽然简单,但是已经涉及到了应用开发中最常见的调用接口的基本能力,通过这个例子我们就能看到 GPT Builder 在实际开发 GPTs 时的能力边界。
首先我让 GPT Builder 创建一个 GPT,调用高德的天气 api 查询天气。我给它提供了 api key 和接口文档,作为一个没有编程能力的普通人,这个已经是我能做到的极限了。
创建一个 GPT:根据用户输入的城市查询当天的天气,然后根据查询得到的天气信息画一个天气简报,要求有根据天气情况选择对应的背景,然后列出温度/湿度,以及一句每日鸡汤。
amap api 中的 key 是 d8bbbaeaeae49e71ca4d89597a3f26cc
amap 的 api 文档是:https://lbs.amap.com/api/webservice/guide/api/weatherinfo/

GPT Builder 收到我的请求之后,就开始自动更新 GPT 机器人的配置了,看起来确实很自动化。

这里它帮我起了 GPT 机器人的名称叫:Weather Briefing Artist,还提供简介,以及 prompt 的示例。

我点开 GPT 的配置,就可以看到 GPT Builder 帮我创建的东西了,主要就是前面四个配置:名称、描述、指令、示例 prompt。到目前为止,GPT Builder 的表现还是可圈可点的。
接下来我们试试看 GPT Builder 帮我自动化生成的天气画报靠不靠谱,到底能不能用。

当我问它杭州天气的时候,它写了一段代码去调用天气的接口,只不过调用失败了,原因是它的代码执行环境不能联网。要了解大模型使用代码解释器的原理,可以参考《ChatGLM3 的代码解释器(Code Interpreter)实现原理》。不能联网的原因主要是考虑到安全和性能,比如如果代码解释器能够联网,有些用户可能会让 ChatGPT 下载病毒,有些用户可能会 ChatGPT 下载 130B 的大模型把硬盘干爆了。只要禁止联网就没那么多麻烦了。
让看来作为一个普通人想要用 GPT Builder 开发一个天气画报暂时还是做不到的。它目前的能力主要是帮助我们优化给 GPT 的自定义指令。
程序员如何开发 GPTs
手动定义 FunctionCall(actions)
那么有其他方式来让 GPT 能够调用天气接口吗?答案是有的,我注意到 GPT 的配置中有一个叫 Actions,这个就是能够让 GPT 调用我们自定义的外部接口。action 的原理本质就是大模型的工具调用。action 的实现原理可以参考《ChatGLM3 的工具调用(FunctionCalling)实现原理》,虽然之前文章里面说的是 ChatGLM3 的实现,但 ChatGPT 的实现原理也是类似的。
首先看一下 action 的配置项

第一部分是 Schema,也就是接口的定义。OpenAI 提供了一个天气 api 的示例,如下:
{
"openapi": "3.1.0",
"info": {
"title": "Get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [
{
"url": "https://api.example-weather-app.com"
}
],
"paths": {
"/location": {
"get": {
"description": "Get temperature for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "query",
"description": "The city and state to retrieve the weather for",
"required": true,
"schema": {
"type": "string"
}
}
],
"deprecated": false
}
}
},
"components": {
"schemas": {}
}
}
可以看到,跟函数调用的定义的 json 差不多,因为本质上面就是一种函数调用,通过这个描述让 GPT 知道有一个天气的 api 可以使用。值得注意的是这个天气接口只是一个例子,并不能直接拿来用。
第二部分是 Authentication,这是 OpenAI 提供的两种 api 权限控制方式:API key 和 OAuth。因为大部分 API 都是使用这两种方式认证调用权限的。

第三部分是 Privacy Policy(隐私政策),其实就是让开发者通过这个隐私政策向用户说明数据的使用情况。如果你的 GPT 不对外使用就不需要填。

配置高德天气 api 给 GPT 使用
参考官方提供的天气 api schema 的例子,手动填一下就可以了。但是这个 JSON 说实话有点长,自己填太费时间了,于是我让 GPT Builder 帮我写了一下。我提供的 prompt 如下:
根据 https://lbs.amap.com/api/webservice/guide/api/weatherinfo/ 的天气 api,帮我写一个 gpt 能理解的 api schema,参考
{
"openapi": "3.1.0",
"info": {
"title": "Get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [
{
"url": "https://api.example-weather-app.com"
}
],
"paths": {
"/location": {
"get": {
"description": "Get temperature for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "query",
"description": "The city and state to retrieve the weather for",
"required": true,
"schema": {
"type": "string"
}
}
],
"deprecated": false
}
}
},
"components": {
"schemas": {}
}
}
然后 GPT Builder 真的访问了这个文档,然后参考官方的 api 例子,就帮我写了一个高德 api 的 schema,如下:
{
"openapi": "3.0.0",
"info": {
"title": "Amap Weather API",
"description": "Provides current and forecasted weather conditions based on 高德地图's weather service.",
"version": "1.0"
},
"servers": [
{
"url": "https://restapi.amap.com"
}
],
"paths": {
"/v3/weather/weatherInfo": {
"get": {
"description": "Retrieve current or forecasted weather information",
"operationId": "getWeatherInfo",
"parameters": [
{
"name": "city",
"in": "query",
"description": "The city code or name to retrieve weather information for",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "extensions",
"in": "query",
"description": "Type of weather information: 'base' for real-time or 'all' for forecast",
"required": false,
"schema": {
"type": "string",
"enum": ["base", "all"]
}
},
{
"name": "output",
"in": "query",
"description": "Response format: JSON or XML",
"required": false,
"schema": {
"type": "string",
"enum": ["JSON", "XML"]
}
},
{
"name": "key",
"in": "query",
"description": "User's unique API key",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successful response with weather data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WeatherResponse"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"WeatherResponse": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Request status code"
},
"info": {
"type": "string",
"description": "Description of the status code"
},
"infocode": {
"type": "string",
"description": "Info code of the response"
},
"lives": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LiveWeather"
}
},
"forecasts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ForecastWeather"
}
}
}
},
"LiveWeather": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
}
},
"ForecastWeather": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
}
}
}
}
}
这个高德的 api schema 定义确实挺长的,如果要我自己写肯定要花很久时间,GPT Builder 虽然不能够自己根据 api 文档直接创建 action,但是通过我的引导,也能基本完成任务,只是需要我自己手动把 schema 贴到 action 里面。
高德 api 的配置效果如下图所示:

配置完 action 之后,接下来就要配置 Instructions。由于高德的 api key 是直接在调用的参数里面透传过去的,不能用官方提供的 Authentication 方式。所以我在 prompt 中直接告诉 GPT 高德的 api key 是什么,这样它就会自己填到参数里面。我的 prompt 如下:
根据用户输入的城市查询当天的天气,然后根据查询得到的天气信息画一个天气简报,要求有根据天气情况选择对应的背景,然后列出温度/湿度,以及一句每日鸡汤。
amap api 中的 key 是 d8bbbaeaeae49e71ca4d89597a3f26cc
完整的 GPT 配置如下:

接下来就是激动人心的时刻,到底我手动配置的 GPT 能不能工作呢?我直接输入了:上海。

可以看到,GPT 首先调用了高德天气 api,它确实理解了高德的 api 调用入参,还把我告诉它的 key 填到参数里面了。然后生成的画报还挺好看的,包含了上海的很多地标建造,比如东方明珠,这个就是 GPT 根据天气的数据,然后结合 DALL·E 的画图能力自动画出来的。

总结
根据我上面的试用结果来看,GPTs 暂时还不会让程序员失业。GPTs 的产品能力其实包含了两个方面的能力:
一个是支持用户定义的集成了知识库、画图、代码解释器、自定义工具四种能力的聊天机器人 GPTs,这个其实是目前很多创业公司在做的事情,从这个角度看,它其实是 Langchain 的官方产品化版本,极大的降低了开发者的集成门槛。
另一个是 GPT Builder,官方希望它能够通过聊天的方式帮用户快速创建 GPTs,这个目的为了降低普通用户的使用门槛。这个对开发者用处不大,因为它只能写指令的部分,自定义工具的能力它目前还无法自动化的完成。
GPTs 的发布是 OpenAI 降低 AI 应用开发成本,试图定义 AI 时代的 APP 规范的一种尝试。之前的插件尝试可以说基本上失败了,这一次的尝试能否成功还需要时间的检验。从目前 GPTs 的能力来看,OpenAI 确实把目前为止成熟的大模型能力都集成进来了,而且具备实际落地的可行性。就拿我上面做的天气画报功能来说,我 5 分钟就能做一个这样的应用,这在以前是不可想象的,写代码的时间都不止 5 分钟呢。
但我们也要意识到,稍微复杂的能力比如代码解释器和自定义工具这两种能力的使用是有编程门槛的,OpenAI 给我们提供的是做菜的食材。对于普通人来说,如果你只是想做一个家常的蛋炒饭,那很简单。但是要做出佛跳墙,那还是需要大厨的功夫的。
对于开发者来说,GPTs 降低的是集成大模型能力的门槛。以前你要用工具调用的能力,还需要自己调试 Langchain,以后就不需要了。以前知识库检索要自己搞向量数据库,现在也不需要了。省下来的时间可以用于思考 idea,从这个角度说 GPTs 提升的是创建 AI 应用的效率。
总而言之,GPTs 的主要创新在于将之前社区摸索出来的使用大模型的最佳实践比如知识库、工具调用等能力定义出了一套研发框架,就有点安卓和 IOS 的应用研发框架。它主要包含了四种能力:知识库、画图、代码解释器、自定义工具,至于这些能力最后能做出什么样的应用,那就要看开发者的想象力了。
注:文中使用的 api key 已经废弃,想要复现的可以自己去高德官网申请一个。