应用优化与LLMs:寻找更快的等效软件库
几个月前,我写了一篇博客文章,提到应用优化的最低投入/最高回报方法是在集群中部署全系统分析器,查看最耗资源的库和进程,然后通过谷歌搜索寻找更快的等效替代品。在Optimyze/Elastic,我们的全系统分析器客户已多次成功使用这种方法。这种方法唯一的困难是需要大量搜索替代方案,然后还需要搜索更多的基准测试比较。要是我们有一个包含互联网所有信息的压缩版本,以及一个基于此生成自由格式文本的界面就好了!
你可能已经猜到了:我们确实有。OpenAI和其他公司的大型语言模型(LLM)已经在大量互联网数据上进行了训练,包括描述大量可用软件库的简介、比较它们的基准测试,以及博客、StackOverflow评论和Github内容等形式的大量相关内容。
那么,当你可以通过谷歌搜索相同信息时,为什么要使用LLM作为搜索界面呢?有几个原因。首先,LLM提供的功能比单纯搜索广泛得多。例如,你可以提出这样的问题:“为我找到三个替代库,列出每个库的优缺点,然后根据这些优缺点给出我应该使用哪个的建议。“这样,我们可以将搜索软件和基准测试、解释结果以及提出建议的多步骤过程压缩为一步。第二个原因是,由于LLM具有自然语言输入/输出界面,与使用Google API、抓取网页、提取信息然后生成报告相比,以编程方式解决问题并利用结果要容易得多。
如果你想尝试一下,几天前我开源了sysgrok(博客,代码),这是一个旨在帮助自动化系统分析和理解解决方案的工具。它组织成一系列子命令,其中一个叫做findfaster。findfaster子命令使用一个提示,询问上述问题。这里有一个使用它来寻找libjpeg更快替代品的示例。
sysgrok还有一个”–chat"参数,它会在生成初始响应后让你进入与LLM的聊天会话。这可以用来要求澄清建议、纠正LLM犯的错误等。例如,这里我们要求替代Python的stdlib JSON库。LLM回应了三个好的替代品(ujson、orjson、simdjson),并建议我们使用其中最好的一个(orjson)。然后我们进入聊天会话,要求LLM说明如何安装和使用该库。
通常这工作得很好,并且是我遇到的这个问题的最佳自动化解决方案。也就是说,我们使用的是LLM,所以有时它会出错得很有趣。最常见的失败方式是全面虚构软件项目。当目标的软件没有或很少有提供相同功能但性能更好的替代品时,很容易发生这种情况。一个很好的例子是libtiff。如果你要求findfaster为你找到更快的libtiff版本,你可能会被建议考虑TurboTiff。但TurboTiff并不是一个真实的软件项目。
如果你使用sysgrok并且它返回了一个不好的建议,我很乐意听到,因为这些例子有助于改进提示。你可以在这里的GitHub上提出问题。