综述由AI生成OpenAI 演讲解析了通过 API 将大模型集成到应用程序的方法。内容涵盖语言模型的工作原理与局限性,重点讲解了函数调用功能(Function Calling)如何将模型与外部工具连接。通过三个演示案例展示了自然语言转 SQL、调用外部 API 及代码审查的应用。问答环节讨论了错误处理策略、数据隐私安全、并行调用支持及权限控制等实际问题。
leon19 浏览
OpenAI 演讲:如何通过 API 将大模型集成到自己的应用程序中
OpenAI 的员工 Sherwin Wu 和 Atty Eleti 在 QCon 上讨论了如何使用 OpenAI API 将这些大语言模型集成到应用程序中,并通过使用 API 和工具将 GPT 连接到外部世界以扩展 GPT 的功能。
Atty Eleti:我想带大家回到 1973 年,也就是 50 年前。1973 年,《科学美国人》(Scientific American)发表了一篇非常有趣的文章,他们在文章中比较了各种动物的运动。他们着手比较运动的效率。换句话说,一只动物从 A 点到 B 点燃烧了多少卡路里,与它们的体重等是否有关?他们比较了各种动物,鸟类、昆虫,当然还有我们人类,并将它们根据效率从高到低进行了排名。他们发现,就运动的效率而言,秃鹫的最高。
我很喜欢这个故事,因为它有一个很简单的认识,只要用一点工具,有一点机械帮助,我们就能极大地增强我们的能力。你们中的一些人可能以前听过这个故事。你可能会想,我是在哪里看到的?这个故事是苹果公司创立之初史蒂夫·乔布斯(Steve Jobs)经常讲的。他和苹果团队利用这个故事作为早期 Macintosh 的灵感来源。史蒂夫比较了这个故事,并说到:'人类是工具的制造者。'
我们制造了像自行车这样的工具来增强我们完成任务的能力。就像自行车是运动的工具一样,计算机也是我们思维的工具。它增强了我们的能力、创造力、想象力和生产力。事实上,史蒂夫曾经用这个神奇的短语来形容个人计算机。他说:'计算机是思维的自行车'。这篇文章发表十年后的 1983 年,苹果公司发布了 Macintosh,并掀起了个人计算的革命。当然,多年后的今天,我们仍然每天都在使用 mac 电脑。
例如,如果给定 GPT 的输入是,'the largest city in the United States is'(美国最大的城市是),那么答案就是 New York City(纽约市)。它会一个字一个字地思考,它会说'New'、'York',然后是'City'。同样,在更具对话性的环境中,如果你问它地球和太阳之间的距离是多少。GPT 已经从互联网上学过这个,它将输出 9400 万英里。它是根据输入逐个单词逐个单词思考的。
在底层,它真正做的是每次输出单词时,都会查看一堆候选单词并为它们分配概率。例如,在最初的例子中,'美国最大的城市是',它可能有很多候选城市,New 代表'纽约'(New York),或者'新泽西'(New Jersey),或者其他什么,Los 代表'洛杉矶'(Los Angeles),然后还有其他一些可能的例子。你可以看到,它确实认为'New York City'(纽约市)可能是正确的答案,因为 New 的概率为 95%。在这种情况下,它通常会选择最有可能的结果,所以它会选择 New,然后继续前进。这个单词出现后,我们现在就知道 New 是第一个单词,所以它对下一个单词是什么就有了更多的限制。
我们可以看到,现在它认为 New York(纽约)的可能性要高得多,但它也在考虑 New Brunswick(新不伦瑞克)、New Mexico(新墨西哥)和 New Delhi(新德里)等。直到完成第二个单词,这基本上是模型的叠加。它基本上知道答案是 New York City,概率几乎是 100%。但它仍在考虑其他一些剩余概率很低的选项,比如 County(县)、New York Metro(纽约地铁)、New York Times(纽约时报),但最终它选择了 City 并给出答案。
想象一下,如果考试是开放的,你可以使用手机或类似的东西,你会做得更好。GPT 今天真的只是在它自己的盒子里。正因为如此,作为工程师,我们希望使用 GPT 并将其集成到我们的系统中。限制 GPT,不允许它与我们的内部系统对话,这对于你可能想做的事情来说是非常有限的。此外,即使它确实可以访问某些工具,因为语言模型是概率性的,有时也很难保证模型与外部工具交互的方式。如果你有一个 API 或其他你想要使用的东西,当前模型不能保证总是能与你 API 可能想要的输入相匹配时,这最终也会成为一个问题。
也许这是一个关于哈利波特的浪漫故事之类的剧本。它知道这是浪漫的,青少年的浪漫,它看到罗恩(Ron)和赫敏(Hermione),并以这种 JSON 格式准确输出。这太棒了,因为我可以获取这个输出,现在我可以使用它并将其放入 API 中。然后我就像在我的代码中一样,一切都正常。问题是,它大概只有 80%、70% 的概率是这样的。
在剩下的时间里,它会尝试并提供额外的帮助,做一些像这样的事情,它会说:'当然,我可以为你做。下面是你要求的 JSON 格式的信息。'这是非常有用的,但如果你试图将其插入到 API 中,它实际上是起作用的,因为前面所有这些随机文本,你的 API 并不知道如何解析它。这显然是非常令人失望的。这不是你真正想要的。我们真正想做的是,帮助 GPT 打破常规,或者给 GPT 一辆自行车或另一套工具来真正增强它的能力,并让它无缝地工作。
使用 GPT 进行调用函数
这就把我们带到了下一部分,那就是我们所说的 GPT 函数调用,这是我们发布的 API 的一个新变化,它使函数调用能够以一种非常一流的方式更好地使用我们的 GPT 模型。举个例子,如果你问 GPT 这样的问题,what's the weather like in Brooklyn today?(今天布鲁克林的天气怎么样?)如果你问一个普通的 GPT 这个问题,它基本上会说,'作为一个由 OpenAI 训练的人工智能模型,我无法提供实时信息。'这是真的,因为它实际上无法访问任何东西。它在一个盒子里。它怎么会知道今天天气怎么样呢?
它接收一个带有 location(位置)的字符串,然后它就知道它可以使用这个。在本例中,在这个新的世界里,当你解析此输入时,GPT 将表达它打算调用 get_current_weather 函数的意图。然后,你可以根据需要在自己的系统中自行调用该函数。假设你得到的输出是 "22 Celsius and Sunny"(22 摄氏度和阳光明媚)。你可以将其解析回 GPT,它会综合这些信息,并返回给用户说:the weather in Brooklyn is currently sunny, with a temperature of 22 degrees Celsius(目前布鲁克林天气晴朗,温度为 22 摄氏度。)
第一步,显然是用户问了一个问题,在本例中,问题是 what's the weather like in Brooklyn today?('今天布鲁克林的天气怎么样?')然后下一步是,在应用程序中,调用模型,调用 OpenAPI,并非常具体地告诉它它可以访问的函数集以及用户输入。这是一个 API 请求的例子,目前它实际有效且可正常工作,任何具有 API 访问权限的人都可以尝试该操作。这是一个使用函数调用能力的 curl 示例。我们可以看到,这只是我们聊天完成端点的正常 curl,这是我们发布的一个新的 API 端点,为我们的 GPT-4 和 GPT-3.5 模型提供支持。你 curl 该 API。它会在模型中进行解析。
Eleti:我们刚刚介绍了几个入门性的主题。首先,我们了解了语言模型是如何工作的,以及它们的一些局限性,因为它们没有所有的训练数据,它们没有连接到外部世界,它们的结构化输出并不总是可解析的。Sherwin 还向我们介绍了新特性、函数调用和 API 的工作原理,以及如何将函数解析为 API 并获取输出,以及如何让 GPT 以面向用户的方式来总结响应。让我们通过几个演示来了解如何将所有这些组合起来,并将其应用到我们的产品和应用程序中。
我们来问这样一个问题'根据上周的消费金额,找出排名前 10 的用户姓名'(get me the names of the top 10 users by amount spent over the last week.)。这是一个相当正常的业务问题,当然不是我可以立即编写 SQL 就能解决的问题,但 GPT 可以。让我们运行一下。我们可以看到它正在调用 SQL 查询函数。它有一个参数'query',它创建了一个漂亮的 SQL 查询。它是选择了名称和金额的总和;它连接到订单表;并获取最后一周的订单,按总花费进行排序,并将其限制为 10 个。这看起来是正确且恰当的。让我们在数据库中运行一下它。我们得到了一些结果。
当然,这是 JSON 格式的,因此用户无法渲染它。让我们把它发送回 GPT 看看它说了什么。GPT 总结了这些信息,并表示'这些是按消费金额排名前十的用户。这是他们上周的花费,包括 Global Enterprises, Vantage Partners。'这是一个了不起的用户可读的答案。
让我们回到开始的地方。我们谈到了史蒂夫·乔布斯的名言,他说'计算机是思维的自行车'。这对我来说确实如此,对你们所有人来说也都是如此。我们身处计算机行业,计算机改变了我们的生活。计算机增强了我们与生俱来的能力,给了我们更多的生产力、想象力和创造力。ChatGPT 中的人工智能和语言模型还是个婴儿。它才出生几个月。我们有责任增强人工智能的思维,赋予它超越其内在推理能力的新能力,将其与工具连接,与 API 连接,并利用这一特性开发出真正令人兴奋的应用程序。
原话对我来说非常有启发。我们永远无法公正地对待史蒂夫·乔布斯的名言。'我记得在我大约 12 岁的时候读过一篇文章,我想可能是在《科学美国人》上,他们在文章中测量了地球上所有这些物种的运动效率,它们从 A 点到 B 点需要消耗多少千卡热量。秃鹫赢了,位居榜首,超过了其他所有物种。人类排在榜单大约三分之一的位置,这对创造之冠来说并不是一个很好的表现。在那里有人有足够的想象力来测试人类骑自行车的效率。一个骑自行车的人把秃鹫吹走了,一直高居榜首。这给我留下了非常深刻的印象,我们人类是工具的制造者,我们可以制造出将这些固有能力放大到惊人程度的工具。对我来说,计算机一直是思维的自行车,它让我们远远超越了固有的能力。我认为我们只是处于这个工具的早期阶段,非常早期的阶段。我们只走了很短的一段距离,它仍处于形成阶段,但我们已经看到了巨大的变化。我认为,与未来 100 年发生的事情相比,这算不了什么。'
Wu:实际上这存在一个误解,我认为我们最近没有作出很好地澄清,直到今年 3 月或 2 月,在我们为 API 提供的服务条款中,我们就说过'我们保留自己对 API 输入数据进行培训的权利'。我想这可能就是你所说的,就像你对一些 SQL 查询进行解析一样,它会在返回时以某种方式回到模型中。事实上,到目前为止,我们已经不再这样做了。根据我们的服务条款,我们实际上不会在 API 中对你的数据进行训练。我认为我们还没有把这一点说得非常清楚,所以人们对此非常偏执。到目前为止,还没有。你应该查阅我们的服务条款。我们不训练它。也就是说,解析的东西并不像企业级的那样。我们不会针对你的用户进行隔离。我们只是没有在自己的数据上训练它。这种围绕企业级数据隔离的特性显然很快就会出现。这一特定的安全层还没有出现。