当前大语言模型工具链生态简介 - martinfowler


生成式人工智能,特别是LLM(大型语言模型)已经引起了公众的关注。像许多软件开发人员一样,我对这些可能性很感兴趣,但不确定从长远来看这对我们的职业到底意味着什么。

每当出现一个模式和技术仍在不断发展的新领域时,我都会尝试开发一种关于事物如何组合在一起的思维模型。它有助于应对向我袭来的信息浪潮。该领域正在解决哪些类型的问题?解决这些问题所需的常见拼图类型有哪些?事情进展如何?

以下是我当前使用 LLM(大型语言模型)支持编码的工具心智模型的维度。
辅助任务

  • 在上下文中更快地查找信息
  • 生成代码
  • 关于代码的“推理”(解释代码,或代码中的问题)
  • 将代码转换为其他内容(例如文档文本或图表)

这些是我在编码协助方面最常处理的任务类型,尽管如果我将范围扩展到软件交付生命周期中的其他任务,还有更多任务类型。

交互方式
我见过三种主要类型的交互模式:

  • 聊天界面
  • 在线帮助,即在代码编辑器中输入
  • 命令行界面

即时作文
结合后端使用的 LLM 的适用性,提示的质量显然对工具的实用性有很大影响。不过,提示工程不必完全留给用户,许多工具在后端为您应用提示技术。

  • 用户从头开始创建提示
  • 工具根据用户输入和其他上下文(例如打开的文件、一组可重用的上下文片段或向用户提出的其他问题)组成提示

模型的属性

  • 模型是用什么来训练的
    • 它是否经过专门的代码和编码任务训练?哪些语言?
    • 何时接受培训,即信息的最新程度如何
  • 模型的大小(尽管如此,对于编码等特定任务来说,什么“好”大小才是最重要的,仍然存在很大争议)
  • 模型支持的上下文窗口的大小,基本上就是它可以作为提示的标记数量
  • 模型或托管后端添加了哪些过滤器

起源和托管

  • 商业产品,具有由产品公司托管的 LLM API
  • 开源工具,连接LLM API服务
  • 自建工具,对接LLM API服务
  • 连接到微调的自托管 LLM API 的自建工具


以下是该领域的一些常见工具示例,以及它们如何融入此模型。(该列表并不是对这些工具的认可,也不是对其他工具的否定,它只是为了帮助说明维度。)

  • GitHub Copilot:代码生成,在线辅助,由IDE扩展组成;使用代码、漏洞过滤器进行训练
  • GitHub Copilot Chat:聊天,由用户聊天+打开文件组成;使用代码进行训练
  • ChatGPT:聊天,全部由用户完成,使用代码进行训练
  • GPT Engineer:代码生成,命令行界面根据用户输入编写提示,OpenAI 模型
  • “Team AIs”:全部网页,用户界面根据用户输入和用例组成的提示,最常见的是 OpenAI 的 GPT 模型由团队针对其用例进行维护,其会连接到 OpenAI API
  • Meta 的CodeCompose:代码生成,在线帮辅助,编辑器扩展组成,根据内部用例和代码库,属于微调模型自托管


如今,人们最常使用的是直接聊天互动(如通过 ChatGPT 或 Copilot Chat)与代码编辑器中的编码辅助(如通过 GitHub Copilot 或 Tabnine)相结合的方式。与其他方法相比,编辑器中的在线辅助可能是目前使用 LLMs 进行编码辅助的最成熟、最有效的方法。它以小步骤支持开发人员的自然工作流程。更小的步骤可以让开发人员更轻松地跟进并更认真地审查质量,而且在不成功的情况下也可以轻松地继续前进。

在开源世界中,有很多工具都在进行试验,这些工具提供了生成较大代码片段的提示组合(如 GPT Engineer、Aider)。我也看到过类似的小型提示组合应用程序,由团队根据特定用例进行调整,例如将可重用架构和技术栈定义与用户故事相结合,生成任务计划或测试代码,这与我的同事徐浩在这里描述的情况类似。像这样的提示合成应用目前最常用于 OpenAI 的模型,因为它们最容易获得,而且功能相对强大。不过,实验正越来越多地转向开源模型和大型超级计算机托管模型,因为人们正在寻求对数据的更多控制。

下一步,除了高级提示组合之外,人们还对模型组件的未来改进寄予厚望。是更大的模型,还是更小但经过更专门训练的模型更适合编码辅助?具有更大上下文窗口的模型是否能让我们向其输入更多代码,从而推理出代码库中更大一部分的质量和架构?在多大范围内使用组织的代码对模型进行微调才有价值?开源模型领域会发生什么?未来备忘录中的问题。