应用优化与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,所以它有时会出错。最常见的失败方式是软件项目的全面幻觉。当目标软件的替代品有限或没有提供相同功能但更好性能时,这很容易发生。一个很好的例子是libtiff。如果你要求findfaster为你找一个更快的libtiff版本,你可能会被建议考虑TurboTiff。TurboTiff不是一个软件项目。