Skip to main content

EcoAssistant - 更准确、更经济地使用LLM助手

· 8 min read
Jieyu Zhang

system

TL;DR:

  • 我们介绍了EcoAssistant,旨在更准确、更经济地解决用户的问题。
  • 我们展示了如何让LLM助手代理利用外部API来解决用户的问题。
  • 我们展示了如何通过助手层次结构降低使用GPT模型的成本。
  • 我们展示了如何利用检索增强生成(RAG)的思想通过解决方案演示来提高成功率。

EcoAssistant

在本文中,我们介绍了EcoAssistant,这是一个建立在AutoGen之上的系统,旨在更准确、更经济地解决用户的问题。

问题设定

最近,用户们使用对话式LLM(如ChatGPT)进行各种查询。 报告显示,23%的ChatGPT用户查询是为了进行知识提取。 其中许多查询需要的知识是超出任何预训练的大型语言模型(LLM)内部存储的信息的。 这些任务只能通过生成代码来获取所需信息,而这些信息存储在包含所请求信息的外部API中。 在下表中,我们展示了我们在这项工作中要解决的三种类型的用户查询。

数据集API示例查询
地点Google Places我在蒙特利尔找一个24小时的药店,你能帮我找一个吗?
天气Weather API孟买,印度的当前云覆盖率是多少?
股票Alpha Vantage Stock API你能给我2023年1月份微软的开盘价吗?

利用外部API

为了解决这些查询,我们首先构建了一个基于AutoGen的双代理系统, 其中第一个代理是一个LLM助手代理(AutoGen中的AssistantAgent),负责提出和优化代码, 第二个代理是一个代码执行代理(AutoGen中的UserProxyAgent),负责提取生成的代码并执行它,将输出转发回LLM助手代理。 下图显示了这个双代理系统的可视化。

chat

为了指示助手代理利用外部API,我们只需要在初始消息的开头添加API名称/密钥字典。 模板如下所示,其中红色部分是API的信息,黑色部分是用户查询。

template

重要的是,出于安全考虑,我们不想向助手代理透露真实的API密钥。 因此,我们使用一个虚假的API密钥来替换初始消息中的真实API密钥。 具体来说,我们为每个API密钥生成一个随机令牌(例如181dbb37),并将真实API密钥替换为初始消息中的令牌。 然后,当代码执行器执行代码时,假的 API 密钥会自动被真实的 API 密钥替换。

解决方案演示

在大多数实际场景中,用户的查询通常是按时间顺序逐个出现的。 我们的 EcoAssistant 利用过去的成功经验,通过 解决方案演示 来帮助 LLM 助手解决未来的查询。 具体来说,每当一个查询被用户反馈认为成功解决时,我们会捕获并存储查询和最终生成的代码片段。 这些查询-代码对被保存在一个专门的向量数据库中。当出现新的查询时,EcoAssistant 从数据库中检索出最相似的查询,然后将其与相关的代码附加到新查询的初始提示中,作为演示。 下面是初始消息的新模板,其中蓝色部分对应解决方案演示。

template

我们发现,利用过去成功的查询-代码对可以减少迭代次数,提高系统性能,从而改进查询解决过程。

助手层次结构

LLM 助手通常具有不同的价格和性能,例如,GPT-3.5-turbo比GPT-4便宜得多,但准确性也较低。 因此,我们提出了 助手层次结构 来降低使用LLM的成本。 核心思想是我们首先使用更便宜的LLM,只有在必要时才使用更昂贵的LLM。 通过这种方式,我们能够减少对昂贵LLM的依赖,从而降低成本。 具体来说,给定多个LLM,我们为每个LLM初始化一个助手代理,并与最具成本效益的LLM助手开始对话。 如果当前LLM助手与代码执行器之间的对话在未成功解决查询的情况下结束,EcoAssistant 将重新与层次结构中的下一个更昂贵的LLM助手开始对话。 我们发现,这种策略显著降低了成本,同时仍然有效地解决了查询。

协同效应

我们发现 EcoAssistant助手层次结构解决方案演示 具有协同效应。 因为查询-代码数据库是所有LLM助手共享的,即使没有专门的设计, 更强大的LLM助手(例如GPT-4)的解决方案也可以后续检索,以指导较弱的LLM助手(例如GPT-3.5-turbo)。 这种协同效应进一步提高了 EcoAssistant 的性能并降低了成本。

实验结果

我们在三个数据集(Places、Weather和Stock)上评估了 EcoAssistant。与单个GPT-4助手相比,我们发现 EcoAssistant 在成功率更高的同时成本更低,如下图所示。 有关实验结果和其他实验的更多详细信息,请参阅我们的论文

exp

进一步阅读

更多关于EcoAssistant的详细信息,请参考我们的论文代码库

如果您觉得本博客有用,请考虑引用以下内容:

@article{zhang2023ecoassistant,
title={EcoAssistant: 使用LLM助手更经济高效},
author={Zhang, Jieyu and Krishna, Ranjay and Awadallah, Ahmed H and Wang, Chi},
journal={arXiv preprint arXiv:2310.03046},
year={2023}
}