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