如何利用ChatGPT与Azure Cosmos DB打造高智能应用?
摘要:原文 | Mark Brown 翻译 | 郑子铭 随着对智能应用程序的需求不断增长,开发人员越来越多地转向人工智能(AI)和机器学习(ML),以增强其应用程序的功能。聊天机器人已经成为提供对话式人工智能的最流行方式之一。ChatGPT是Op
原文 | Mark Brown
翻译 | 郑子铭
随着对智能应用程序的需求不断增长,开发人员越来越多地转向人工智能(AI)和机器学习(ML),以增强其应用程序的功能。聊天机器人已经成为提供对话式人工智能的最流行方式之一。ChatGPT是OpenAI开发的大型语言模型(LLM),是构建能够理解自然语言并提供智能响应的聊天机器人的强大工具。自 2022 年 11 月首次发布以来,OpenAI 的 ChatGPT 在全球范围内广受欢迎。
在这篇博文中,我和同事Sandeep Nair通过创建一个模仿其功能的Cosmos DB+ChatGPT示例应用程序(尽管程度较低),介绍了我们学习大型语言模型的经验,该模型为OpenAI的ChatGPT服务和API提供动力。我们的样本结合了OpenAI的ChatGPT和Azure Cosmos DB。具体来说,我们将结合这两个服务来构建大多数用户所熟悉的,消费者ChatGPT服务(chat.openai.com)。在这篇博文中,随着我们对样本的了解,我们还将探讨在构建智能应用时,结合Azure Cosmos DB这样的数据库来提升用户体验的其他方式。
要运行此示例应用程序,您需要有权访问 Azure OpenAI 服务。要在您的 Azure 订阅中获得访问权限,请在此处申请 Azure OpenAI 服务。
示例应用程序
让我们来看看这个应用程序。我们的应用程序试图模仿人们所熟悉的ChatGPT服务的一些功能。左手边是一个对话或 "聊天会话 "的列表。你点击其中的每一个,就可以看到一个不同的聊天会话。您还可以重命名或删除它们。每个聊天会话中都有 "聊天信息"。每条信息都有一个 "发件人 "的标识,即人类或人工智能。信息按时间顺序升序排列,并带有UTC时间戳。底部的文本框用于输入新的提示,以添加到会话中。
Azure Cosmos DB + Azure OpenAI ChatGPT 用户界面
在走得太远之前,先了解一些定义。在与 ChatGPT 等大型语言模型 (LLM) 服务交互时,您通常会提出一个问题,该服务会给您一个答案。为了将这些变成白话,用户提供“提示”,服务提供“完成”。对于此处的示例,我们使用了 text-davinci-003 模型。当前的 ChatGPT 基于更新的模型 gpt-35-turbo。
下面是我们示例的架构。前端是托管在 Azure App Service 中的 Blazor Web 应用程序。这连接到 Azure Cosmos DB 作为数据库和托管大型语言模型的 Azure OpenAI 服务。为了尽可能轻松地部署我们的示例应用程序,请在 GitHub 上的示例自述文件中查找“部署到 Azure”按钮。 ARM 模板将处理所有连接信息,因此您不必复制和粘贴密钥。这是一个完全零接触的部署。
Azure Cosmos DB + OpenAI ChatGPT 架构
这是我们应用程序的数据模型。非常简单,只有两个类,聊天会话和聊天消息。一切都存储在一个容器中。
聊天会话模型
聊天会话存储聊天会话 ID 和聊天会话名称。在应用程序中,此类还将一组聊天消息存储为本地缓存。但是,在容器中,会话和消息存储为单独的文档。 Type 属性用于区分它们。
容器的分区键是聊天会话 ID。在每个逻辑分区键值中,有一个聊天会话文档及其所有聊天消息文档。这种设计是最佳的,因为聊天消息总是通过聊天会话 ID 检索。
除了聊天会话 ID 和类型属性之外,聊天消息还包括聊天消息的时间戳、发送者属性和聊天消息本身的文本。
聊天消息模型
新的聊天消息将始终包含聊天会话 ID、发件人和消息本身。时间戳被生成并且 Type 属性被硬编码类似于聊天会话以区分它们。
给予 ChatGPT 记忆
如果您在 chat.openai.com 上使用过 ChatGPT,您可能已经注意到,除了回答单个提示外,您还可以与其进行对话。 ChatGPT 为您提供答案,您在没有任何其他上下文的情况下提出后续问题,ChatGPT 以上下文正确的方式做出响应,就好像您正在与它进行对话一样。
在使用底层 text-davinci-003 LLM 设计我们的示例应用程序时,我最初的假设是这个 LLM 有一些聪明的方法来保留完成之间的用户上下文,这在某种程度上是 Azure 上可用的 LLM 的一部分。我想看看它的实际效果,所以我根据输入的提示测试了该服务的 API。但是,该服务什么都不记得了。完成完全脱节。
我来给你展示。在下面的聊天中,我询问了西雅图 Lumen Field 的座位容量。然而,在我的后续问题“道奇体育场更大吗?”中,它给出了上下文不正确且实际上毫无意义的响应。
