← 全部极客知识库

大模型通识 / 大模型技术演进

4. 2023:模型成为可调用的能力,提示词与 API 开启应用探索

原文备份 · 第 5 / 26 篇 · 查看极客时间原知识库 ↗

来源:大模型技术演进

2023 年 3 月 1 日,OpenAI 宣布开放当时称为“ChatGPT API”的接口,以及 Whisper 语音转文字接口。在当天的开发者社区里,人们已经开始讨论怎样接到自己的应用里,也有人遇到了旧接口地址、客户端版本和请求参数的问题。模型能力进入软件开发的过程,就这样具体地发生在一条条请求和报错里。当日的官方社区公告与讨论

对普通用户来说,ChatGPT 是一个可以访问的网站;对开发者来说,接口开放意味着可以把类似的语言能力放进自己设计的软件。用户不必知道底层用了哪个模型,只需要在学习工具、笔记应用或购物页面中完成任务。

这一变化扩展了参与者的范围。训练一个强大的通用模型,需要大量数据、算力和研究积累;围绕现成模型开发一个小功能,则可以从一项明确需求开始。一个懂一点编程的人,也有机会尝试自己的产品想法。

不过,这一年很快又出现了更大的想象:既然程序可以调用模型,模型能否反过来帮助程序选择工具?如果把一次回答变成连续的行动,它是否就能自己推进任务?从 API,到插件、函数调用,再到 AutoGPT,2023 年的应用探索开始沿着这几个问题展开。

API 让模型进入自己的软件。

API 是应用程序接口,可以先理解为软件之间约定好的调用方式。你的程序把任务发送给模型服务,服务返回结果,再由你的程序决定如何展示、保存或继续处理。

语言模型 API 在此前已经存在。OpenAI 在 2020 年就发布过 API;2023 年的重要变化,是 GPT-3.5 Turbo 等对话模型以新的接口和价格进入开发者手中。因此,不能把这一年写成“模型第一次可以被程序调用”。2020 年的 OpenAI API 公告

2023 年 3 月的发布介绍中,GPT-3.5 Turbo 的价格为每千 token 0.002 美元,官方称其比已有 GPT-3.5 模型便宜十倍。这是当时的历史报价。公告还列举了 Snapchat 的 My AI、Quizlet 的 Q-Chat 等接入案例,展示模型怎样进入社交和学习产品。GPT-3.5 Turbo API 发布介绍

Token 是模型处理文本的单位,前面已经做过介绍。对开发者而言,按用量调用让实验成本更容易估算:可以先让模型处理少量任务,再判断效果是否值得继续投入。模型更容易获得、调用成本下降,与公众对聊天能力的兴趣结合起来,为小型应用提供了新的试验空间。

拿个人笔记工具举例,用户可以在页面里选中一段文字,点击“整理要点”。程序在后台把整理要求和原文一起交给模型,再把结果放回编辑区。用户看到的是一个具体功能,不一定是聊天框。

这里,模型只参与了一部分工作。选择文字、发出请求、保存笔记和展示错误,仍然要由应用完成。调用模型也不会自动获得 ChatGPT 网站的全部功能:对话历史怎样保存、是否能够访问文件、有没有搜索工具,都取决于你构建的系统。

这个区别为后来的应用开发定下了一个基本分工:模型提供可复用的能力,应用负责把能力接到具体任务上。产品可以围绕同一模型长出完全不同的形态。

提示词开始成为功能设计的一部分。

当用户自己和聊天助手交流时,提问可以很随意,回答不满意就再问一次。把同一能力放进一个按钮后,开发者就会遇到另一种要求:用户点下去,应该得到大致符合这个按钮含义的结果。

“整理一下”究竟是缩短原文、列出要点,还是补充解释?原文没有写出的信息能不能推断?结果应该是一段话,还是可以被程序继续处理的字段?这些决定需要在输入里表达清楚。

这就是提示词设计在应用中的实际作用。提示词可以包含任务说明、必要背景、输入材料、输出要求和示例。把这些内容组织好,模型才更容易在当前任务中发挥作用。

例如,下面是一段用于说明思路的构造要求:

根据这段学习记录,分别提取“已经完成”和“下一步计划”。只保留原文有依据的事项;没有提到的内容留空。每一项保留对应的原文片段。

与泛泛要求“帮我整理”相比,这段要求明确了分类标准和证据来源。它也让开发者更容易检查结果:模型有没有把计划放进已完成事项,有没有补出原文没有的信息?

但提示词无法单独解决所有问题。如果原始材料没有传入,写上“请准确回答”也不能让模型知道它;如果保存笔记的程序根本不存在,要求“请保存”也不能凭空完成保存。提示词改善的是模型如何利用现有信息和能力,应用还需要提供信息和执行条件。

这也是为什么同样一句提示词,放在不同产品里可能得到不同体验。产品背后可能连接了不同资料、模型和工具,而这些差异不会全部显示在输入框中。

插件让聊天窗口连接到外部服务。

2023 年 3 月 23 日,OpenAI 公布 ChatGPT 插件的初步支持,先向有限的用户和开发者开放。首批合作方包括 Expedia、Instacart、Wolfram、Zapier 等,涉及出行、购物、计算和服务连接。ChatGPT 插件首发公告

插件展示了一个很有吸引力的方向:用户表达需求以后,系统可以利用外部服务补充模型本身没有的信息或能力。聊天界面由此有机会成为操作其他软件的入口。

Wolfram 是其中一个容易理解的例子。Stephen Wolfram 在当时的介绍中展示了 ChatGPT 与 Wolfram|Alpha、Wolfram Language 的结合,让语言交互连接到计算和知识服务。Wolfram 插件的当时介绍

可以把这种配合理解为分工:模型帮助理解用户在问什么,把适合交给工具的部分送到外部系统,再围绕返回结果组织解释。工具的结果仍然需要被正确使用;连接了计算工具,也不意味着用户意图一定被理解正确。

对应用开发者而言,插件的启发超出了某一个插件商店。一个已有服务,只要能够被程序调用,就有机会成为模型应用的组成部分。模型不必把所有最新信息和执行能力都装在自己的参数里。

不过,2023 年这一代 ChatGPT 插件后来退出了产品,Wolfram 的原始介绍页也说明了这一变化。因此,本篇回顾的是当年的探索,不是让读者寻找旧插件入口。延续下来的,是语言模型连接工具和服务的设计方向。Wolfram 对后续产品变化的说明

函数调用,让开发者更容易把语言连接到程序动作。

2023 年 6 月 13 日,OpenAI 为 GPT-4、GPT-3.5 Turbo 的相应新版本加入 Function Calling,也就是函数调用支持。开发者可以描述可用函数,模型则根据请求生成函数名称和参数等结构化信息,便于程序处理。函数调用发布公告

以一个虚构的读书助手为例,用户问:“找出我上个月关于注意力机制的笔记。”应用可以提供一个查询笔记的函数,让模型把主题和时间范围整理成查询条件。随后由程序检查条件并执行查询,再把结果交回模型组织回答。

这个过程可以写成一条简单的链:

用户提出要求 → 模型选择函数并给出参数 → 程序检查并执行 → 返回真实结果 → 模型组织回答

其中,实际执行发生在程序里。模型生成“要调用什么”的信息,与函数已经成功运行,是两个环节。模型选错函数、参数不完整、服务返回错误,都需要应用处理。

相比之下,前面的 ChatGPT 插件是一种产品中的接入方式;函数调用则把更基础的连接能力交给开发者,让自己的应用也能组织类似流程。两者并不是同一个功能换了名字。

代码执行,把生成代码接到了真实计算上。

同一时期,Code Interpreter,也就是代码解释器,展示了另一条工具路线。它在 2023 年 3 月的插件公告中作为早期能力出现,让模型能够在受限制的环境里运行 Python,并处理上传文件、提供下载结果。7 月 6 日的更新记录则宣布,这项功能开始向全部 ChatGPT Plus 用户逐步开放测试。早期代码执行说明、2023 年 7 月更新记录

这对数据分析尤其有意义。假设用户提供一份阅读记录表,希望按月份统计阅读量并生成图表。只生成文字时,系统可以给出分析建议或一段代码;有了执行环境,代码就能真正读取文件、进行计算并产生输出。同样是用自然语言提出要求,背后是否连接执行环境,会改变系统实际能完成的工作。

用户接下来能够检查的是文件和图表,也能核对计算所依据的记录。模型仍可能误解列名、采用不合适的统计方式,程序能运行也不等于分析结论正确;但任务已经多了一个可以观察的执行过程。

对不熟悉编程的人,这种方式降低了尝试数据处理的门槛。对开发者,它则说明应用可以同时使用模型的语言能力和普通程序的计算能力,让各自承担合适的部分。

AutoGPT 把一个更大胆的问题推到前台:能不能连续做下去?

2023 年春天,AutoGPT 展示了把模型调用串成连续过程的尝试。其早期版本文档保留了 3 月 30 日的演示,并将项目定位为基于 GPT-4 的自主任务实验。程序提供工具、保存部分信息,再让模型根据目标继续提出下一步。AutoGPT 的早期版本记录

它展示的愿景很容易让人兴奋:用户交给系统一个目标之后,系统可以尝试自行拆解工作,调用工具,读取结果,再决定怎样继续。相比一次问答,人们开始期待一个能够持续推进任务的助手。

这种思路也有研究前史。2022 年公开的 ReAct 论文,就探索了将语言模型的推理过程与行动交替组织,让模型获得环境反馈。2023 年的产品实验使类似思路进入了更广泛的开发讨论。ReAct 原始论文

可以用整理读书资料来理解这个循环。系统先确定要查哪些主题,再检索资料、读取结果、保存笔记。如果发现材料不够,就继续检索;如果已经满足要求,就应该结束。这是一种解释任务结构的构造场景。

问题在于,“继续”相对容易,“知道什么时候做对了”却很困难。重复搜索可能没有增加有效信息,计划可能逐渐偏离目标,前一步的错误也可能成为后一步的依据。自动调用的次数越多,还越需要考虑运行成本和停止条件。

AutoGPT 自己的早期说明并未回避这些问题:它明确称项目是实验,复杂现实场景中的表现有限,运行费用也可能较高;连续模式还可能无法及时停止。早期版本的局限说明

因此,AutoGPT 在这段历史中的意义,更适合从它提出的问题理解:怎样让语言模型连续行动,并根据结果调整过程?这个问题没有随着一次演示获得解决,却会持续推动后来的工作流、Agent 和工程方法发展。

中文生态也出现了把模型接入程序的实践入口。

2023 年的 ChatGLM-6B 为中英双语对话模型的本地运行提供了一个具体例子。项目除了网页和命令行演示,还提供 API 服务示例,让其他程序通过请求获取模型回答。ChatGLM-6B 项目与 API 示例

这说明“通过 API 使用模型”并不只对应购买某家云服务。模型可以由服务商运行,也可以在具备条件的本地机器或服务器上部署,再向应用提供接口。对调用方而言,都是发送任务并接收结果;部署、维护和资源成本则由不同的人承担。

对中国的开发者和技术爱好者,这类项目提供了观察完整调用过程的机会:模型怎样加载,网页怎样把消息交给后端,另一个程序又怎样取得回复。本地运行并不自动意味着效果更好或使用成本更低,但它增加了实验和定制的选择。开放模型生态的后续发展,会在第 7 篇继续展开。

这一年的应用探索,留下了一组基础分工。

能力或机制 主要解决什么问题 应用仍要负责什么
模型 API 让自己的程序能够使用模型 组织输入、管理状态、处理调用结果
提示词 表达当前任务、背景和输出要求 提供实际资料,检查是否完成要求
插件与函数调用 连接模型和外部服务、程序动作 检查参数、控制权限、确认执行结果
代码执行与连续循环 运行计算、观察结果、继续推进任务 管理环境、错误、成本和停止条件

这些分工让“大模型应用”逐渐显出自己的工程形态。一个应用可能只需要一次整理文本的调用,也可能要连接搜索、文件和其他服务,再经过多轮处理。复杂程度不同,但都需要明确模型、数据和程序各自承担什么。

于是,2023 年的开发者面对的目标开始发生变化:从接通一个模型,进一步走向让它在真实任务里有用。API 提供了入口,提示词帮助表达任务,工具让系统接触外部世界,而连续执行的实验又暴露了可靠性的新问题。

还有一个需求,几乎会自然地出现在这些探索之后:既然模型可以回答问题,能不能让它依据我自己的文件回答?下一篇就从这里出发,进入 RAG 与知识库问答兴起的阶段。


上一篇:03|2022—2023:并行发展的 AI 绘画与 AIGC 热潮

下一篇:05|2023—2024:模型不知道我的资料,RAG 与知识库问答兴起

返回:第 0 部分大纲