应用优化与LLMs:寻找更快的等效软件库
几个月前,我写了一篇博客文章,提到应用优化的最低投入/最高回报方法是在集群中部署全系统分析器,查看最耗资源的库和进程,然后通过谷歌搜索寻找更快的等效替代品。在Optimyze/Elastic,我们的全系统分析器客户已多次成功使用这种方法。这种方法唯一的困难是需要进行大量的谷歌搜索来寻找替代方案,然后还需要进行更多的谷歌搜索来获取比较基准测试数据。要是我们有一个包含互联网所有信息的压缩版本,并且有一个基于此生成自由格式文本的界面就好了!
你可能已经猜到了:我们确实有。OpenAI和其他公司的大型语言模型(LLMs)已经在大量互联网数据上进行了训练,包括描述大量可用软件库的简介、比较它们的基准测试,以及博客、StackOverflow评论和Github内容等形式的大量相关内容。
那么,当你可以直接谷歌搜索相同信息时,为什么要使用LLM作为搜索界面呢?有几个原因。首先,LLM提供的功能比单纯搜索广泛得多。例如,你可以提出这样的问题:“为我找到三个替代库,列出每个库的优缺点,然后基于这些优缺点给出我应该使用哪个的建议。“这样,我们可以将谷歌搜索软件和基准测试、解释结果以及提出建议的多步骤过程压缩为一步。第二个原因是,由于LLM具有自然语言输入/输出界面,与使用谷歌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上提交问题。