ChatGPT,超越模型:插件和意图识别
如何通过与数字世界连接而使语言模型为我们提供更多帮助
在这一点上,我们知道ChatGPT基本上是一个神奇的Plinco板:把你的话(你的提示)放在顶部,看着它们在模型的挂钉上弹来弹去,直到你得到一个整洁的答案。但挂钉是固定的:相同的提示会给出大致相同的答案,无论何时输入。结果,我们无法直接从语言模型获取新闻更新或天气报告:它根本无法访问外部世界。
但是当你使用必应聊天、微软Copilot、谷歌Bard或Grok时,你可以明显看到时间敏感的回应:比赛的当前比分,附近出售的房屋,或是有关破产新闻的最新消息,嗯,任何事情都有可能。这很棒,但它是如何工作的呢?简单的答案是,工程师们将搜索结果提供给模型,并要求它进行摘要。但是具体来说,这是如何工作的呢?从Copilot中我们可以学到什么并可以应用到任何应用程序中,进入微软所称的“副驾驶时代”?让我们深入探讨一下!
一如既往,我是一名微软员工,非官方发言:所有观点均为个人意见。
我已经泄露了最重要的秘密:副驾驶只是在语言模型之外收集信息,然后像正常提示一样输入。对于我们的目的来说,副驾驶只是使用语言模型来确定采取什么行动并为用户总结回应的应用程序。让我们来分解一下这是如何运作的:
那是用户和副驾驶员之间的一次单向对话。用户询问天气情况,副驾驶员利用语言模型和插件提供了信息丰富的回答,并附带了更多信息的链接。我将这位副驾驶员的模型命名为“Gurbo”,这是我个人对ChatGPT背后的GPT-3.5-Turbo模型的简称。
在这里有很多要解释的,但是我想强调三件事情:
- 语言模型并不知道其输入从哪里获取,也不知道其输出将如何使用。
- 天气插件不知道语言模型的存在。
- 一款使用LLM和多个插件的应用可以辅助完成任何数字任务。
回顾插图1,我们可以看到语言模型根本不需要进行任何变动就能提供这些回应。事实上,这些回应并非虚构:ChatGPT在这些提示下给出的确切回应,您可以亲自尝试!从语言模型的角度来看,这些就像是与用户在线聊天一样。
已经看到使用大型语言模型来解释用户请求的主要好处之一:它不需要重新编程以处理不同的问题!这个相同的提示模板适用于许多请求:
“但是马克,你会问,如果用户的提示与列表中的任何插件都不匹配会发生什么?”
原来ChatGPT背后的语言模型很聪明!在幕后,一位联合驾驶员会检查ChatGPT的回答是否是有效的选项。如果不是,它可能会简单地返回“抱歉,出了点问题。”(我们稍后会讨论高级错误处理。)
使用这些语言模型的自动请求,工程师们能够充分体验到通用型LLM的好处:它能够处理几乎任何我们提出的自然语言问题,使我们能够使用同一个LLM核心构建各种复杂的协作模型。在像ChatGPT这样的LLM出现之前,工程师们每次想要处理一种新类型的问题时都必须编写自定义代码。现在我们可以重复使用同一个巨型模型来处理所有事情,使我们能够更快速地构建出色的东西。而且LLM的令人难以置信的灵活性使我们能够构建以前甚至未曾想过的东西,就像一个全能应用程序-每个功能都可以插入到LLM中,并且LLM根据用户的请求恰当地使用其功能,就像我们之前看到的那样。
分解,第2部分:天气插件不知道语言模型的存在。事实上,没有任何插件需要知道语言模型的存在。你知道为什么这很棒吗?因为天气应用程序是为处理邮政编码和城市名称而构建的,而不是问题!那么,工程师们如何将LLM的灵活性与像天气或体育应用程序这样的“传统”应用程序的特定性结合起来?
答案就在一个清单文件中!清单文件只是描述插件的一个文件。清单文件中的信息通过一个示例提示直接提供给模型,正如我们在本文中之前所见。以下是一个示例清单文件,改编自OpenAI的插件教程供参考:
{
"schema_version": "v1",
"name_for_human": "Weather Anywhere",
"name_for_model": "weather",
"description_for_human":
"Get current weather information
for any location on Earth!",
"description_for_model":
"Get the current weather for a region.
Provides results based on ZIP code or city name.",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "https://example.com/openapi.yaml"
},
"logo_url": "https://example.com/logo.png",
"contact_email": "support@example.com",
"legal_info_url": "http://www.example.com/legal"
}
这里有一些噪音,但我认为你可以看到最相关的部分:那部分是我们普通人可以理解的!你可能还会认出之前发送给ChatGPT的确切文本是“获取某个地区的当前天气”。没错:通过提示增强的魔力,从清单中提取的相关信息会被添加到你的提示中!(为简单起见,我的示例只包括描述的第一部分,但在实际操作中,整个描述始终包括在内。)
提示增强就像你能想象的那样简单:获取用户的输入,然后添加内容,以便模型可以采取更具体的操作!在本文中,我们一直在进行提示增强来识别用户的意图:用户想要什么类型的信息?我们应该使用哪个插件来获取这些信息?这个过程很简单:
- 从以下列表中选择一个插件来完成此提示。
- 所以模型知道何时开始和结束,请保留HTML结构,并将以下英文文本翻译为简体中文:“提示:'今天的天气如何?'”
- 对于提供的每个清单文件,获取名称和模型描述,并将其添加到一个美观的列表中:“1. 体育:获取体育赛事信息,2. 天气:获取某个地区的当前天气…” (我为了与之前的提示保持一致,复制了我的拼写错误——您可以看到 LLM 对此处理得非常好。)
- 当你有疑问时,提供更多的指示!ChatGPT非常健谈,通常会提供超过我们所需的内容。在聊天时这没问题,但是当将ChatGPT的回复发送给应用程序时,处理一个单词比整个句子要容易得多。对于这个例子,我添加了“只说插件的名称,不要多说其他”。
有很多关于提示增强方面的事情可以说 - 这实际上只是一种自动化的提示工程!工程师通常会提供许多示例来利用所谓的少样本学习,他们会提醒LLM可以说“我不知道”以防止产生幻觉,他们会鼓励LLM引用其来源或拒绝回答无关的问题,列举的清单还有很多。目前,我们可以看到将所有这些工作都放在合作伙伴身上的价值,而不是用户。不再需要详细说明每一个小细节 - 合作伙伴也会处理这一切!
通过清单,我们有一种非常简单的方式来将任何传统应用程序连接到一个大型语言模型。只需提供一个简单的描述,基本上就可以开始使用了!我们不需要在这里重新发明任何轮子,大多数应用程序已经有描述,以便新工程师理解它们的工作原理 — 现在我们只需要将这些知识传递给一个LLM,它会处理其他的事情!
那就带我们来谈最后一个重点:一个使用LLM和一些插件的应用可以帮助完成任何数字任务。
让我们回顾一下我们如何在网上搜索。从某种意义上说,我们都在默默地掌握关键词搜索的艺术。大多数痴迷电脑使用者不会打开浏览器然后输入“Hi Google,请告诉我当前的天气。非常感谢。” 这样也可以,但我们知道传统的搜索引擎只真正关心几个词。大多数人搜索“天气”就能得到我们所需要的结果。
但是当我们看到必应或谷歌或无论使用何种搜索引擎时,它们开始与我们就我们的搜索开展对话,我们更倾向于给这些新的副驾驶提供完整的句子。以前,如果我们对太平洋西北地区的气候趋势以及这对野火烟雾的影响感到好奇,我们可能会搜索“太平洋西北地区的气候历史野火”,并获得一些相当不错的结果。我们会点击链接,阅读一些内容,做一些笔记,然后再次搜索。但是这个过程,像网络上的大多数多网站体验一样,充满了阻力。页面加载缓慢,Cookie通知令人烦恼,自动播放视频最糟糕,总体来说,要获取相关信息是一种挣扎,因为文章通常包含大量琐事内容。
一个搜索副驾驶,就像谷歌巴德一样,让我们能够避免浏览网页的烦人部分。现在我们可以在不离开页面的情况下与互联网进行交流。我们可以提问后续问题,获得详细摘要,并查看信息来源以确保我们没有被误导。这是一个流畅简单的过程,我相信在这个领域我们很快会看到更多先进的功能。
但我们可以走得更远!想象一下,一个亚马逊插件可以让您在同一页上对购物车进行审核、添加和结账。我们已经在必应聊天中有了一个AI图像生成插件 - 想象一下根据您理想中的鞋子绘制出一张图像,然后基于该图像进行购物搜索!对于更多技术用例,Microsoft Excel中的Copilot已经可以生成图表,总结表格并为更好的数据可视化创建动态列 - 这一切都是因为它与您当前的文件连接在一起。
除了创造和可视化外,插入式LLMs还可以帮助导航。对于为什么您的保险只覆盖了部分医疗账单,您可能感到好奇。我相信保险公司很快也会拥有自己的副驾驶员。每一个其他支持代理都会有:银行家、IT、零售——无所不能!如果事情进展顺利,我们将再也不必等待烦人的电话树或与无能的机器人聊天了。
我们已经走了很远的路,而且我们只是刚刚开始。现在ChatGPT和其他语言模型可以直接连接到任何应用程序,我们将会看到使用语言模型的应用程序数量急剧增加。让我们回顾一下为什么以及好处是什么:
- 副驾驶是一种将LLM(低语言材料,即不懂某种语言的人所使用的语言材料)与传统功能连接起来的应用程序,只要启用了正确的插件,它们可以协助完成任何数字任务。
- 我们可以想象一个副驾驶员应用程序,就像我们一样使用ChatGPT。
- 将现有应用程序连接到LLM是很容易的,因此我们可以预期许多复杂的应用程序很快会这样做(如果他们还没有这样做)!
- 相同的 LLM 可以作为任意数量的副驾驶的核心进行重复使用 - 工程师们更多地关注于帮助用户,而不是应用基础架构。
请问您认为副驾驶员接下来会做什么呢?一如既往,我很愿意听听您的想法!感谢您的阅读。🤓