AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


在使用大语言模型 (LLMs) 构建产品一年中的经验总结 (第一部分)-工作流的重要性
发布日期:2024-06-04 19:54:15 浏览次数: 1912 来源:NLP轻松谈


调整和优化工作流

提示大语言模型只是开始。要充分利用它们,我们需要超越单一提示,拥抱工作流。例如,如何将一个复杂的任务拆分成多个简单的任务?何时微调或缓存有助于提高性能并减少延迟/成本?在本节中,我们分享了经过验证的策略和实际案例,帮助你优化并构建可靠的大语言模型工作流。

逐步多轮的“流程”能显著提升效果

我们已经知道,将一大段提示词分解为若干个小段提示词可以取得更好的效果。例如,在 AlphaCodium 的研究中,通过从单一提示改为多步工作流程,他们将 GPT-4 在 CodeContests 上的准确率 (pass@5) 从 19% 提高到 44%。这一工作流程包括以下步骤:

  • 反思问题

  • 在公共测试中进行推理

  • 生成可能的解决方案

  • 对可能的解决方案进行排序

  • 生成模拟测试

  • 在公共和模拟测试中迭代解决方案

明确目标的小任务是最有效的智能体或流程提示。虽然不是每个智能体提示都需要结构化输出,但结构化输出有助于与协调智能体与环境互动的系统进行接口对接。

一些值得尝试的方法:

  • 制定尽可能详细的计划步骤。可以考虑从预定义的计划中进行选择 

  • 将原始用户提示转化为智能体提示,但要注意,这个过程可能会有信息损失!

  • 将智能体行为设计成线性链、DAG 和状态机的形式;不同的依赖关系和逻辑关系适用于不同的任务规模。能否通过不同的任务架构来优化性能?

  • 计划验证;在你的计划中包含如何评估其他智能体响应的指导,以确保最终组合效果果良好。

  • 通过固定的上游状态进行提示工程——确保你的智能体提示能够应对可能发生的各种情况。

优先采用确定性工作流程

虽然 AI 智能体可以动态响应用户请求和环境变化,但其不确定性使得部署变得困难。每一步操作都有失败的可能,而且从错误中恢复的几率很低。因此,智能体在执行多步骤任务时,随着步骤的增加,其成功率会呈指数下降。这使得开发团队很难部署出可靠的智能体。

一个有效的方法是让智能体系统生成确定性的计划,并以结构化、可重复的方式执行。首先,智能体根据高层次的目标或提示生成一个计划。然后,按计划进行确定性执行。这使得每一步操作都更可预测、更可靠。这样做的好处包括:

  • 生成的计划可以作为少样本示例,用于提示或微调智能体。

  • 确定性执行使系统更加可靠,便于测试和调试,且可以精确定位失败步骤。

  • 生成的计划可以表示为有向无环图 (DAG),比起静态提示更容易理解和适应新情况。

成功的智能体开发者往往具备管理初级工程师的经验,因为生成计划的过程类似于指导和管理初级工程师。我们会给初级工程师明确的目标和具体的计划,而不是模糊的指示,对智能体也应如此。

最终,构建可靠智能体的关键在于采用更结构化、确定性的方法,同时收集数据来完善提示和微调模型。否则,虽然智能体在某些情况下表现出色,但整体表现可能会让用户失望,导致用户流失。

超越温度参数获取更丰富的输出

假设你的任务需要大语言模型(LLM)的输出更加多样化。例如,你正在设计一个 LLM 流程,根据用户之前购买的产品列表推荐新产品。当你多次运行提示时,可能会发现结果推荐过于相似,因此你可能会考虑增加 LLM 请求中的温度参数。

简单来说,增加温度参数会使 LLM 的响应更加多样化。在采样时,下一个 token 的概率分布变得更加均匀,这意味着那些通常不太可能被选择的 token 被选中的几率增加。然而,增加温度可能会导致一些与输出多样性相关的问题。例如,目录中一些非常适合的产品可能从未被 LLM 推荐,而某些产品因为在训练时被认为非常适合而频繁出现。如果温度过高,输出可能会包含不存在的产品或一些无意义的内容。

换句话说,增加温度并不能保证 LLM 会从你期望的概率分布中抽取输出(例如,均匀随机分布)。不过,我们还有其他方法可以增加输出的多样性。最简单的方法是调整提示的内容。例如,如果提示模板包括一系列项目,如历史购买记录,每次将这些项目的顺序打乱插入提示中,可以产生显著差异。

另外,保持一个最近输出的简短列表可以帮助防止重复推荐。在推荐产品的示例中,可以通过指示 LLM 避免建议该列表中的项目,或者拒绝并重新采样与最近建议相似的输出,从而进一步多样化结果。另一种有效的策略是改变提示的表达方式。例如,使用“选择用户可能经常使用的产品”或“选择用户可能会推荐给朋友的产品”等短语,可以改变推荐的重点,从而影响推荐产品的多样性。

缓存的重要性被低估了

缓存可以节省成本并消除响应延迟,因为它避免了对相同输入重新计算响应的需要。此外,如果一个响应之前已经经过安全审核,我们可以提供这些审核过的响应,从而减少提供有害或不适当内容的风险。

一种简单的缓存方法是为正在处理的项目使用唯一 ID,例如,如果我们正在总结新文章或产品评论。当收到请求时,我们可以检查缓存中是否已经存在摘要。如果存在,我们可以立即返回;如果不存在,我们生成、审核并提供,然后将其存储在缓存中以供将来请求使用。

对于开放式查询,我们可以借鉴搜索领域的技术,该领域也利用缓存处理开放式输入。自动完成功能和拼写校正等功能也有助于标准化用户输入,从而提高缓存命中率。

何时进行微调

我们可能有一些任务,即使是最巧妙设计的提示也无法胜任。例如,即使经过大量提示工程,我们的系统可能仍然无法返回可靠的高质量输出。如果是这样,那么可能有必要为特定任务微调模型。

成功的例子包括:

  • Honeycomb 的自然语言查询助手:最初,“编程指南”与 n-shot 样例一起提供给提示以进行上下文理解。虽然这效果尚可,但微调模型后,在特定领域语言的语法和规则上输出更好。

  • ReChat 的 Lucy:LLM 需要以一种非常特定的格式生成响应,该格式结合了结构化和非结构化数据,以便前端正确呈现。微调对于让它一致运行至关重要。

尽管如此,微调可能有效,但它伴随着显著的成本。我们必须对微调数据进行标注、微调和评估模型,并最终自我托管它们。因此,应考虑更高的前期成本是否值得。如果提示已经让您完成了 90% 的工作,那么微调可能不值得投资。然而,如果我们决定微调,为了减少收集人工标注数据的成本,我们可以在合成数据或开源数据上进行微调。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询