当前位置:首页|资讯|ChatGPT|OpenAI

ChatGPT革新:采用Azure OpenAI和搜索的新一代应用

作者:你的快乐我都知道发布时间:2023-03-28

OpenAI的ChatGPT在不到一周的时间内就达到了百万用户,并且在不到两个月的时间内就突破了1亿用户大关。围绕这项技术的兴趣和兴奋是显著的。世界各地的用户看到了将这些大型语言模型应用于广泛场景的潜力。

 

在企业应用程序环境中,我们常听到的问题是“我如何构建像ChatGPT这样的东西,使用我自己的数据作为其响应的基础?”

 

的组合Azure认知搜索和Azure OpenAI服务为这种情况提供了一种有效的解决方案。它集成了Azure的企业级特性、跨大型知识库索引、理解和检索您自己的正确数据的认知搜索能力,以及ChatGPT以自然语言回答问题或轮流对话的令人印象深刻的交互能力。

 

在这篇博文中,我们将描述上述解决方案模式,从编排对话和知识库的内部因素,到帮助最终用户正确判断响应及其支持事实所需的用户体验考虑因素。我们的目标是从今天开始,使用预览版中的“gpt-35-turbo”模型,为您提供构建基于ChatGPT的应用程序所必需的工具。我们还发布了一个GitHub repo示例,包括UX、配器、提示等。,您可以使用它来了解更多信息或作为您自己的应用程序的起点。

 

与您自己的数据聊天

与ChatGPT这样的大型语言模型交互的方式是使用自然语言,给模型一个“提示”并请求它完成它。这可能是一个问题,一个谈话的转折,一个延伸的模式,等等。当以这种方式使用时,您得到的响应是基于模型在训练期间学到的东西,这对于一般的知识问题或非正式的聊天可能是有用的,但如果您正在构建一个应用程序,用户应该根据您自己的数据看到响应,这不是您想要的。在本例(询问员工医疗保健计划)中,您可以看到使用基本ChatGPT模型的回答(绿色)没有用,因为它没有说明公司自己的福利政策:

<|im_start|>system
Assistant helps Contoso Inc employees with their internal healthcare plan questions. 
<|im_end|>
<|im_start|>user
Does my plan cover annual eye exams?
<|im_end|>
<|im_start|>assistantI'm sorry, I'm not able to access your specific healthcare plan information. However, many healthcare plans do cover annual eye exams. I recommend checking your plan's summary of benefits or contacting your plan administrator for more information.

 

让ChatGPT基于您自己的数据生成响应的一种方法很简单:将这些信息注入到提示中。ChatGPT可以读取信息以及任何指令、上下文或问题,并做出相应的响应。这种方法不需要对模型进行重新训练或微调,并且响应可以立即反映底层数据的任何变化。

 

这带来了一个新的挑战:这些模型对它们支持的“上下文长度”有限制(当前的ChatGPT模型在一个提示中可以接受多达4000个令牌),即使它们没有这些限制,在每次交互中向文本提示中注入GBs的数据也是不实际的。另一种方法是将所有数据保存在一个外部知识库中,这样可以快速检索到相关的数据,这正是认知搜索的设计目的。下面是一个起点提示和响应的样子:

 

<|im_start|>system
Assistant helps Contoso Inc employees with their internal healthcare plan questions. Only answer questions based on the fact listed below. If the facts below don't answer the question, say you don't know. Each fact sentence is numbered. Always include a reference to the fact number in the form [number] when you answer. 
1. Employees have a choice of two plans, PlanA and PlanB, and they have different benefits.
2. PlanA includes coverage for annual eye and hearing exams.
3. Those with PlanB have a co-payment for routine eye exams and vision-related purchases such as glasses.
4. Both PlanA and PlanB cover preventive care visits.<|im_end|>
<|im_start|>user
Does my plan cover annual eye exams?
<|im_end|>
<|im_start|>assistantPlanA includes coverage for annual eye and hearing exams. [2]

 

在示例中,蓝色部分是基于用户的问题和任何可能适用的累积上下文从认知搜索中检索的,绿色部分是模型生成的响应,其余部分是我们用来给模型指示的提示模板。

 

这种检索增强的生成方法为从简单开始并根据需要变得更加复杂打开了大门。对于如何构造提示、如何从知识库中制定有效检索的查询以及如何编排ChatGPT和知识库之间的来回交互,有许多选项。在我们深入探讨这些之前,让我们先谈谈另一个需求:帮助用户验证响应是否可信。

 

产生可信的响应

我们假设这些大型语言模型、提示和编排系统并不完美,并将它们生成的响应视为候选响应,这些响应应该包含最终用户需要验证的正确信息。作为探索这个主题的一部分,我们实现了3个简单的体验作为起点。这并不是说只有这些。我们欢迎为用户提供更好的工具来验证系统结果是否真实正确的最佳方式的想法和反馈。

 

如下图所示,当我们在示例中生成响应时,我们还为用户提供了3种“深入”工具:

  1. 引文:回复中的每条陈述都包含一条引文,并带有指向源内容的链接。你可以看到上下文中的引用(上标数字)以及底部的链接。当你点击一个,我们显示原始内容,让用户可以检查它。

  2. 支持内容:ChatGPT生成的每个响应或聊天气泡都有一个选项(笔记本图标),用于显示作为事实输入到提示中的所有原始内容。

  3. 编排流程:我们还在每个回复或聊天气泡中提供了一个选项(灯泡图标)来查看整个交互过程,包括中间结果和生成的提示。

根据受众的不同,这些选项对用户可能有用,也可能没用。还有其他选项可以为用户提供透明和验证工具,让他们对回答有信心。特别是,在这篇博客文章和示例代码的初始版本中,我们并没有讨论在应用程序中可以实现的方法的关键主题,这些方法用于评估响应的质量,并可能拒绝或重试不符合特定标准的情况。我们鼓励应用程序开发人员在每个应用程序体验的上下文中明确探索这个主题。

 

新兴互动模式

更有效的提示设计、检索查询构造和组件间交互模型的方法正在迅速出现。这是一个新生的领域,我们期待看到许多快速的进步。这里是提示和查询生成的起点的一个小样本,并为那些对更多细节感兴趣的人提供了参考文献:

  • 检索然后阅读:单次问答场景的简单起点,其中用户问题包含足够的信息,可以从搜索索引中检索候选项。这种方法简单地使用问题从索引中检索,取前几个候选项,将它们与指令和问题本身一起嵌入到提示中。

  • 在检索之前阅读内容和上下文:在许多情况下,用户问题本身不足以进行检索。例如,在会话设置中,最后的用户话轮可能只是代表后续要点或问题的几个词,不能用于有效地检索相关知识。即使在单次交互中,也需要考虑上下文。在这些情况下,一种有趣的方法是使用ChatGPT生成搜索查询,方法是要求该工具为检索目的创建一个对话摘要,并考虑您想要注入的任何上下文。

  • 动作、工具等:通常用户输入、提示指令和知识库之间的单个交互是不够的。例如,已经证明,要求大型语言模型将响应分解成小步骤可以提高响应的质量,并避免某些错误模式。一旦问题被分解,可以向外部来源询问更小和更有针对性的问题,或者作为我们迄今为止所做的非结构化搜索,或者作为仿真问答步骤(例如,在认知搜索中由语义答案支持),或者作为外部系统中的查找(例如,内部应用程序中的雇员表,或者客户支持应用程序中的事件表)。这是一个广阔的探索空间,许多早期的实验工作正在进行。一些有趣的阅读包括引入CoT(思维链)提示和后续工作反应方法将婴儿床与工具结合在一起工具成型方法教导模型如何使用多种工具做出反应。

这篇博文附带的示例实现了其中的一些,或者直接实现,或者通过开源库实现,比如朗查恩。仅举一个特定的例子,在下面的截图中,用户聊天转向“我有plus计划”使用简单的检索然后阅读的方法不会产生好的答案,但是使用稍微复杂一点的实现可以很好地工作,该实现携带对话的上下文:

 

改进知识库检索

由于回答最终将基于我们能够从知识库中检索到的内容,因此检索质量成为这些解决方案的一个重要方面。以下是一些注意事项:

  1. 语义排序:默认情况下,认知搜索将使用关键字搜索结合简单的概率模型进行评分。你可以选择启用语义排名,这将使用复杂的深度学习二级排名层来提高精确度。

  2. 文档分块:当在Cognitive Search中为支持ChatGPT场景的特定目的而索引内容时,您希望内容具有正确的长度。如果每个文档都太短,就会缺乏上下文。如果太长,就很难找到合适的部分让ChatGPT“读取”。如果您的数据允许,我们建议以几个句子(例如,页面的1/4到1/3)为目标,以文本的滑动窗口为起点。在某些情况下,例如零件目录,合理的做法是不要将数据分块,让每个文档包含单个零件的完整描述。

  3. 摘要:即使在分块之后,有时您可能希望在提示中包含更多的候选项,方法是缩短每个候选项的长度。您可以通过使用总结步骤来实现这一点。这方面的几个选项包括使用语义字幕(认知搜索中直接支持的基于查询上下文的摘要步骤),使用点击突出显示(一种更词汇化而不是语义化的提取片段的机制),或者用外部摘要模型对搜索结果进行后处理。

附带的示例代码包括一些功能,可以轻松地试验上面的一些选项(单击窗口右上角的设置图标)。

 

更多场景

在这篇博文中,我们重点关注了对话和问答场景,这些场景将Azure OpenAI的ChatGPT与Azure Cognitive Search相结合,作为一个知识库和检索系统。还有其他方法可以将Azure OpenAI服务和认知搜索结合起来,以改善现有的场景或实现新的场景。示例包括使用自然语言进行查询,增强目录浏览体验,以及在索引时使用Azure OpenAI来丰富数据。我们计划继续发布指南和示例来说明如何实现这些目标。

 

今天就用你自己的数据或我们的数据来试试吧

我们贴出了一些例子,包括这篇博文中展示的完整的UXGitHub回购。我们计划继续扩大回购,重点是覆盖更多场景。

 

您可以克隆这个repo,或者使用包含的示例数据,或者对其进行修改以使用您自己的数据。我们鼓励你采取迭代的方法。数据准备需要几次尝试。从上传你所拥有的开始,尝试体验。

 

大型语言模型结合信息检索技术的可用性推动了改进和全新场景的前景,我们对此感到兴奋。我们期待看到你会用Azure OpenAI和Azure认知搜索构建什么。


以上内容来源 Azure AI博客



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1