跳转到内容

像高手一样编写 GPT:从基础到实践,学习使用 GPT 的 Action

全文约6000字,阅读此文大约需要⏰ 30分钟,但你将有以下收获

  • 理清 AI-AgentGPTAction 之间的联系,打下坚实的认知基础;
  • 亲身实践配置不同的 GPT Actions,直观感受其独特性;
  • 探索 Action 的实现机制,为后续提升指明方向。

本文为直播回放的整理,视频版可以在B站搜索 “LongTalk宇龙” 找到

提到 Action,就必须先了解一下 Agent。在人工智能领域,Agent 一般被翻译为 “代理”,“智能代理”,“智能体”。在计算机领域的构思里:智能体 Agent 是一种特别的计算机程序,他通过感知其环境,自主采取行动(Action)以实现目标,不需要人时刻告诉它该做什么。
  1. 智能体通过【传感器】感知环境判断【当前是什么状况】根据预设的【条件/行为规则】,发起行动(Action)调用【执行器】,完成任务,最终影响环境在这个框架下, Action 泛指了所有基于行为规则下的行动,拿扫地机器人举个例子:
  2. 扫地机器人通过红外感知器感知环境
  3. 它发现了灰尘或者杂物
  4. 它根据预设的清理规则,判定需要前往清理(Action
  5. 它驱动轮子和吸尘器以及扫把,前往并吸入灰尘,影响了环境(干净了)
  6. 判断环境中是否还有灰尘 / 判断接下来要如何前进……(继续循环)

《钢铁侠》里的人工智能助手 Jarvis 就在 Agent 的构想框架下,在设定里,Jarvis 具有的能力包括:

  1. 辅助托尼·斯塔克(钢铁侠)进行日常工作和战斗
  2. 管理、控制和运行斯塔克大厦和钢铁侠内部的系统
  3. 复杂的数据处理、决策制定和问题解决能力
  4. 快速的语音交互反应,高度的交互性

看起来是不是很厉害?我们加粗一些关键词:

1. 辅助托尼·斯塔克(钢铁侠)进行日常工作和战斗

2. 管理、控制和运行斯塔克大厦和钢铁侠内部的系统

  1. 复杂的数据处理决策制定问题解决能力
  2. 快速的语音交互反应,高度的交互性

看看另一个 AgentAgent Smith,来自《黑客帝国》的史密斯探员,能力大概有:

  1. 抓人
  2. 打人
  3. Ctrl+C,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V,Ctrl+V……和能发射火箭能战斗的 Jarvis 相比 —— 他只会出拳和开枪,所以我姑且认为他要弱一点。假如 Jarvis 代表了人类对未来 Agent 想象的一个高标准,那么他和 GPT 中间可能大概隔了 n 个 Agent Smith,GPT 和他们相比基本就是 Baby:

当然,这位 Baby Agent 也是有很多能力的。

Lilian Weng() —— OpenAI的应用人工智能研究负责人,也是GPT-4的开发人员。

她在个人博客的博文《大语言模型驱动的自动智能体(Agent)》提到了关于他们(OpenAI)构思中的 Agent 系统:

“ 大型语言模型的潜力不仅仅在于创作出流畅的文本、故事、论文和程序;

它还可以被视为一个强大的通用问题解决工具。”

和开头提到的计算机领域的通用

比,Lilian 进一步具体化了 Agent 的能力模型 :

在 Lilian 看来, Agent 的能力被具象为三大类:

  1. 规划
  2. 记忆
  3. 使用工具(工具 + 行为 Action你可能有印象 —— 在之前的GPT-4,画图工具Dall-E,Bing搜索,插件,和代码解释器,都需要切换不同的会话/窗口实现的。后来GPT-4 成为了 GPT:All-Tools,可以在一个会话里根据用户需求和上下文自行选择工具,并且做出行动 —— 这个行动,就是 OpenAI 定义的“Action”,如下图:

当你在让它搜索,画图的时候,GPT 会先思考决定怎么使用工具,然后会出现一个小图示,告诉你他尝试使用工具来完成你的任务。

现在你应该能够认清 AI-AgentGPTAction 之间的联系了:GPT(All-Tools,也是现在大家正在开发的“GPTs”),是 OpenAI 之于传统 Agent 定义交上的一份答卷 —— 具体的描绘了在大语言模型(LLM)驱动下 Agent 的系统实现方式。

即:使用 LLM 驱动,通过外部 API 获取信息和执行的行动(Action),也是本文后半部 提到的 Action 的定义,如下:

如果要选择一个最容易上手的 Action ,Webpilot() 应当首当其冲:

它能够让你的 GPT 支持比原本的“Web Browsing”更加实时的联网功能,同时还能获取网络上的文本和部分链接,使用方法也很简单,只需要 30 秒:第一步:在新建的GPT里把 Web Browsing 勾掉,因为他们的作用都是让 GPT 可以访问网络上的资源,不勾选可能会有冲突。

第二步,点击 添加 Actions(Add actions):

第三步,点击 import from URL,填入:https://gpts.webpilot.ai/gpts-openapi.yaml

你会发现 Schema()(组织和结构)这里出现了一大堆文字,内容先不用管。继续在最下面的隐私政策(Privacy Policy),填入:https://gpts.webpilot.ai/privacy_policy.html ,如下图:

之后点击左上角的返回保存即可,你甚至都不用写 Prompt,直接保存就可以使用。可以测试一下效果

我们询问同样的问题:“保亭有哪些正在上映的电影”。Webpilot 和 GPT-4 自带的搜索一样,它们会通过先搜索找到豆瓣电影的页面然后把页面内容总结给你,只是 GPT-4 点内容相比之下明显不够完整,而 Webpilot 的版本可以返回15条电影结果。

因此当你在你的 GPT 加入 Webpilot 后,大部分网上的文本你都可以作为原材料而进一步加工了,比如你可以 使用以下 Prompt 做一个菜谱助手,让他先搜索,然后处理信息:

但 Webpilot 的缺点也很明显,它只能查看网页的所有纯文本内容

可如果我们想要更进一步 —— 比如需要更加精确的信息和内容怎么办?这就需要我们自己制作一个 Action 了。

编写 Action

你有没有试过问 GPT 某部电影讲了什么?比如:“奥本海默”这部电影讲了什么?

GPT-4会这样回答:里面有概览、开头、展开、总结,很明显的 GPT 风格回复,你还可以看到链接里有有蓝色的引号,说明这是通过 Bing 搜索后获得的知识。

再看另一个版本:这是我做的一个“找电影”的 GPT Demo:

感觉怎样,是不是看起来丰富多了?除了电影信息,背景知识,还有主视觉图。当然,还有用户评论。

和上一个相同的地方是:顶部也有一个和 GPT 使用搜索和画图一样的小图示,“Talk to”,意为和某人聊天 —— 它在和谁聊天?在回答这个问题之前,我们先看一下 Prompt:

你可能注意到了,这里面有两个英文单词

他们对应了我在这个 GPT 里设置的两个 Action:一个代表 themoviedb 的某条数据,一个代表使用webpilot这个工具。

api.themoviedb.org

看起来是不是像个网址?没错,就是一个网址:

api.themoviedb.org

themoviedb.org 是一个电影数据库,api 是他的二级域名 —— 就像是门牌号一样,让 GPT 可以来这里取数据,也就刚刚 “Talk to” 的对象。接下来,我教大家如何快速上手这个 Action

完成“找电影”的 GPT

因为调用 TMDB 是需要 API KEY 的,所以我们需要先前往 themoviedb.org 注册后申请一个 API KEY 。在你注册后,还要点击邮箱验证邮件里的链接后才可以使用,注册流程就不赘述了

注册后,依次点击右上角头像 - 账户设置 - API - 请求 API 密钥 - click here

选择 Developer 开发者,协议拉到最底下然后 Accept 接受。

使用类型:网站。应用名称随便写,URL 填 ChatGPT() 官网就行,简介必须写英文的,下面的除了邮箱外(因为要收验证码),大概填填提交就好,支持中国手机号。

填完了就可以获得 API 密钥 API 读访问令牌了,找个小本本先记下来下面的 ‘API 读访问令牌’ 备用。

构建 GPT

新创建一个 GPT,名字描述随便写,Instructions 使用以下内容:

使用中文对话,当用户想找电影时,输出以下内容:

  • 详细介绍和主视觉图(取自'backdrop_path'
  • 主要剧情
  • 观影前需要了解的背景和知识
  • 搜索网上的评论并总结,你可以使用webPilot来寻找

添加一个上一步的 Webpilot Action。

继续添加一个新的 Action,在 Schema 里粘贴以下内容:

  • openapi: "3.1.0" info: title: "The movie finder" description: "Finding movies in themoviedb" version: "v1.0.0" servers: url: "https://api.themoviedb.org" paths: /3/search/movie: get: description: "Find movie for a query" operationId: "SearchMovie" parameters: - name: "query" in: "query" description: "Keywords for searching movies" required: true schema: type: "string" - name: "language" in: "query" description: "languages (ISO 639-1 tags) , e.g. 中国='zh-CN'" required: true schema: type: "string"

点击 Authentication 的齿轮,勾选 API KEY,Bearer。

在中间的 API KEY 填入 你之前记在小本本上的 API 读访问令牌,点击 Save 保存。

最后,在 Privacy policy 里填入:https://www.themoviedb.org/privacy-policy

如果你配置的没错,GPT 的内容应该如下:

完成!保存你的 GPT,输入一个电影试试看,如果有用,可以评论一下。

如何实现的?

大家现在每天使用微信,看视频,新闻获取信息,我们都知道是因为“上网”了,是因为我们接入了“互联网” 获得这些信息。

当你在使用线上 —— 也就是网上的产品时,不同软件和服务之间就通过 API 接口来让不同的应用程序进行主要的数据交换。

API 就像是一个信差,它接受一端的请求,告诉那边的系统你想要做的事情,然后把返回的信息发回给你。

在这个例子里, GPT 就通过预先配置的Action 里的 TMDB API ,获取了电影相关的专有信息。

当我问“奥本海默”这部电影讲了什么之后:GPT 识别到了我的意图,按照 Prompt 进行第一个任务。

使用 Action去 The Movie DB 寻找相关数据,从数据中取出 backdrop_path 这个数据作为主视觉图,然后处理剧情数据、生成背景知识。最后使用 webpilot 搜索评价,返回整理后的数据,也就是最终你看到的结果:

接下来,我们继续深入GPT Action 的配置项:

配置一个 Action ,你需要:

  • Schema:(下图)通过导入或者直接填写,相当于给 Baby GPT 的一个📓 操作手册,告诉它可以去哪干什么需要准备什么。这个示例的版本很简单,真正的会更复杂一些。

  • Available actions:(上图)可用行动,在你输入 Schema 后会自动生成,展示大纲中可以使用的行动,对应 operationIdgetpath —— 加入操作手册是本魔法书,Available actions 就是可以用的魔法

  • Authentication:(上图)认证,可以理解成身份证,没带证件不能请求数据
  • Privacy policy:(上图)隐私政策,因为 Baby GPT 会携带用户的需求访问别的服务器,所以需要一个隐私声明,这个一般在网站底部都可以找到,把网址填进去就行。

然后来看 Schema 的结构:

是不是有点

懵就对了,这已经是前端工程师相关领域的知识了,我们的知识体系里还没有建立这些信息的映射关系

这个页面大家应该一眼就能看明白,这是一个搜索结果页,搜索的关键词是“奥本海默”,返回了两个结果,每个结果的信息都有海报、名称、上映时间、描述

这个页面的网址是这样的:https://www.themoviedb.org/search?query=奥本海默

域名 (www.themoviedb.org):域名指定了网站的位置,类似地图上的地址。

在这个URL中,www.themoviedb.orgthemoviedb.org 网站的域名,用于定位和访问网站。为了方便理解,我把 URL 和 Schema 里的红框部分做一个对应关系,你会发现他们不一样,这是因为一个是面向普通用户,一个是面向开发者的。就和 ChatGPT 网页版和 ChatGPT API 的关系差不多。

路径 (/search): 路径指定了在网站上特定页面的位置。在这个例子中,路径是 /search,通常表示网站的搜索页面或功能。

query,就是一个“查询参数”,其中 query 是参数的名称,奥本海默 是分配给该参数的值。

这个网址完整的意思是:访问 themoviedb.org 网站上的搜索功能,执行一个搜索 “奥本海默” 关键词的操作 —— 我要找一个名叫“奥本海默”的电影

有些同学在写提示词的时候会用这种等号或者冒号的方式,其实都是一种变量的形式,请记住这个感觉,后面我们会继续用到这个概念。

也就是说:刚刚 TMDB 的 Action 实际上就是访问了下面的网址,提供了 query 和 language 参数,然后发起了请求,获取数据,如下:

但虽然我们大致理解了GPT发送请求是怎么回事,你可能有个问题一直在想:我要如何才能知道去哪请求,查询参数怎么写呢? 寻找 API 文档

很简单,去官网找,API 的规则一般都会写在网站的开发者相关的页面里或者 API 文档里,比如你可以从 TMDB 首页的“更多”进入,其它网站也大同小异。

这个 Action 用到了 TMDB 的搜索电影 API ,文档的网址是:https://developer.themoviedb.org/reference/search-movie ,下面是这个网址的内容:

API 文档都会很详细的告诉你如何使用他们的API,在左侧的导航部分你可以看到还有很多其他的 API 可以使用,我们先忽略,专注到右侧部分,点击图片可以放大。

你可以在右上角的认证里看到你的 API 读访问令牌。也可以看到和我配置文件里相同的部分,包括 url,请求方法 get(红框),对应需要的查询参数 query(蓝框)language(黄框)。这个 API 的作用就是:Search for movies by their original, translated and alternative titles. —— 输入 query 关键词,如果成功,就会返回符合关键词的电影列表。

在右侧 RESPONSE(响应)这里也展示了当我们请求后响应的范例。

我们可以在左边 query 输入“奥本海默”,Language填zh-CN,点一下 Try it,就会“啪”的一下出来一大堆数据。

这种数据格式叫做JSON,你只需要知道这种写法可以让程序很方便的读写就好,看起来有点复杂。 —— 不过你仔细看一下,就会发现这个数据其实和脑图没有太大区别。还记得之前提到的键和值么?

可以看到这里面返回了两条结果,是不是有点眼熟?没错,这个API返回的数据,应该和搜索结果页是一样的。只不过网页拿到了这些数据,做了样式的美化展示。

这是第一个结果的数据,对应了搜索结果页的内容,你会发现展现的内容远比数据维度要少 —— 这是因为有些数据虽然不展现,但为了支持筛选所保留的。

注意看,这里出现了‘backdrop_path’,记得原先 Prompt 是怎么写的吗:取出 backdrop_path 这个数据作为主视觉图 —— 所以这里是一个图片地址(),但它是不完整的,只有后半部分。就像是一个分成两块的藏宝图,两部分拼起来才是完整的图片地址。TMDb 的官方 API 文档(https://developer.themoviedb.org/docs/image-basics)里就写了如何构造完整的图片 URL:

但是因为我们的 Baby GPT 已经是一个成熟的 GPT 了。实际上,它已经有 TMDb 的训练数据了(相当于裤兜里已经有半拉地图了) —— 所以即使你不说,它也会自己完成构建完整的图片地址。

对于一些它不熟悉的 API,还是需要在 Prompt 里告诉他要怎样使用。比如剩下的数据也可以用类似的方式让 ChatGPT 来处理,比如让他列出:上映时间 'release_date'、评分 'vote_average'、评分人数 'vote_count':

它就能很+

我们最后提炼一下 Action 的工作流:

  • 首先,想一下你想要做一个什么样的 GPT,以及是否需要外部数据 —— 这两个谁先谁后不重要;
  • 然后,去你需要的外部数据寻找 API 文档,或者基于你的需求,自己开发一个 API,寻找市面上可以直接用的 Action ;
  • 最后,基于 API 文档,编写 Action 里的 Schema,和 Prompt(如何处理取回来的信息)

写在最后

总结一下:今天我们的讨论起始于人工智能中的“Agent & Action”,然后转向OpenAI 对智能体(Agent)能力模型的定义。接着,我们深入探讨了 ChatGPT 中的 Action(搜索、画图、代码解释器),以及GPT系列中的不同 Action。使用了一个容易上手的 Action Webpilot,用于访问网页获取实时的文本内容。

最后,我们初步了解了 API 的概念,以及 GPT 如何通过 Action 与外部数据进行交互和使用。

如果对 Action 很感兴趣,你可以从以下方向开始继续前进:

  • 系统的了解和学习 API 相关的知识
  • 去网上寻找可以用的 API 来练习
  • 发掘 GPT Action 更多的潜力

以上是我认为相对容易入门的知识框架,但是我们都知道:

你不可能只在一次分享 / 一篇文章中就获得完整的 Action 相关知识

学习虽然没有终点,但有阶段性目标。

大家可以通过后续看到的不同的教程和资料,识别这些知识之间的共性和逻辑关系,然后继续深化对这个主题的理解,构建你自己的知识体系。

如果你对 GPT 开发有兴趣,想要认识更多玩 GPT 的朋友,欢迎加入 GPTGeeker 的星球: