当前位置: 首页 > news >正文

【智能体开发】怎样提升AI智能体的运行速度?

我们在开发AI智能体时,通常会先花时间让智能体(Agent)能够正常运行,但接着我们会注意力到速度和成本面临挑战,大模型的调用次数越多,程序运行越慢,用户等待时间越长,Token消耗越多。我们如何提升智能体执行速度并降低运行成本呢?

以下是实际开发中经常采取的几种做法:

  • 找出延迟的来源
  • 改变用户体验,以降低“感知到的”延迟
  • 减少 LLM 调用次数
  • 加快 LLM 调用速度
  • 并行进行 LLM 调用

1.识别延迟的来源

这是很朴素的逻辑,问题的第一步是如何识别性能瓶颈。减少延迟的方法完全取决于你具体的瓶颈是什么?延迟是来自一次耗时很长的 LLM 调用?还是来自多次较短的调用累积起来的结果?在尝试加速之前,你需要先诊断清楚这些问题。

你可以借助一些工具(如LangSmith或自建埋点监控系统)。监控能为你提供智能体每次交互的完整可视化。你可以跟踪代理每一步的延迟,方便你轻松识别哪些步骤对整体延迟的影响最大。

2.通过改变交互来减少“感知到的”延迟

有时候,减少延迟的最简单方式……其实并不是减少延迟本身。

虽然这听起来可能有点反直觉,但如果我们思考一下降低延迟为什么重要,通常是因为人们担心,如果智能体运行得太慢,用户就不愿意继续使用。这种情况下,往往可以通过更新智能体的用户体验来解决。目前主要通过以下两种方式来做到这一点:

  • 流式返回结果

    流式输出在大多数 LLM 应用中已经非常常见,这是目前主流的做法。它能够向用户传达LLM 正在工作,展示中间状态或者部分中间结果,降低用户等待的焦虑感从而降低用户离开页面的可能性。
    除了流式传输最终的响应 token,你还可以流式传输更多内容,例如:代理正在执行的计划步骤、检索到的结果、甚至推理过程中的“思考 token”。Perplexity 在他们的搜索界面中就在这方面做得非常好。他们发现,仅仅通过在 UI 中展示这些中间步骤,就能显著提升用户满意度——即使总的完成时间没有任何缩短。

  • 在后台运行代理

    让代理在后台运行。比如我的邮件助手,我根本不需要知道它处理一封邮件具体花了多少时间,因为它是由事件(收到邮件)触发的,只有在卡住时我才会收到通知。通过这种方式,我把延迟完全隐藏在用户之外,让代理在后台静默地工作。

3.减少 LLM 调用次数

在用户交互过程中,并不是所有事情都必须通过 LLM 调用来完成。如果你能用其他方式来实现,而不必调用LLM,那就更好!目前我们看到的许多智能体(Agent)都是由 LLM 调用和代码组合而成的,即“代码 + LLM 调用”的混合方式。

我们常看到的一个发展路径是:“单次 LLM 调用” → “ReAct Agent” → “多代理(Multi Agent)” 。

从简单开始,人们一开始通常从单次 LLM 调用做起,但很快会遇到一些限制,于是升级为一个智能体。这种方式一开始运作还不错,但当他们想给代理增加更多工具时,就会发现单个代理能支持的工具数量有限。接着就会尝试使用“多Agent”架构,比如通过一个主管Agent(supervisor)或集群(swarm)架构来协调多个智能体。

但问题在于,这些架构会产生大量的 LLM 调用,而且在不同代理之间的通信效率并不高。这其实是设计使然——它们是通用架构,因此不会针对你的特定场景进行优化。

没有银弹,通用的框架不能在所有业务场景下都高效运行,我们需要针对特定的业务做调整,最好的的方式允许你精确指定各个Agent之间的通信方式(或者明确什么时候只需要一次 LLM 调用)。在很多情况下,这可以显著减少 LLM 调用次数,让代理运行得更快、成本更低(而且往往更稳定可靠)。

4.加快 LLM 调用速度

提升模型的调用速度也同样重要,我们通常用两种方式来加快 LLM 调用:

  • 使用更快的模型

    有些模型本身就比其他模型更快。比如 Google 提供的 Gemini Flash 就非常快速。OpenAI 和 Anthropic 也都有更小、更快的模型。开源模型托管平台,例如 Groq 和 Fireworks,也在不断努力让最好的开源模型越来越快。
    注意:这通常是一个权衡,因为更快的模型往往更小,所以准确率也会相应下降,所以我们需在实际切换的过程中需要做能力评测,防止产品能力退化。

  • 减少上下文(context)长度

    LLM 的响应时间与输入的长度成正比。为了更快获得结果,你可以减少输入内容!这就是为什么你需要对每一次 LLM 调用中传入的内容拥有完全的控制权和可见性。如果一个框架会隐藏这些细节(或者不方便控制),那就不是一个好选择,你要对调用过程中的一切都能完全掌控。

5.并行进行 LLM 调用

虽然这并不适用于所有使用场景,但如果你的场景可以用上,那你绝对应该考虑这么做。我们请求处理中往往涉及多步操作,如:

  • 同时进行安全/质量检测(guardrail check)和内容生成
  • 并行处理多个文档的内容抽取
  • 并行调用多个模型,然后将输出结果合并

6.总结

这篇文章介绍了提升智能体运行效率的一些方式,希望对你构建智能体有所帮助。想要让你的AI Agent跑得更快,归根结底是在性能、成本和能力之间做出战略性的权衡。首先要弄清楚你具体的性能瓶颈在哪里,然后再根据你的使用场景,有选择地应用这些优化方法。而有时候,最有效的方式可能根本不是技术手段,而是重新思考用户与 Agent 交互的体验。

http://www.dtcms.com/a/363843.html

相关文章:

  • 重新审视信任基石:公网IP证书对网络安全生态的影响
  • 多态——面向对象编程的 “灵活密码”
  • p049基于Flask的医疗预约与诊断系统
  • Linux 安装docker-compose安装方法(安装docker compose安装)
  • Android Activity 任务栈详解
  • 一种简单而有效的融合时空特征嵌入的城区多变量长序列风速预测模型
  • 基于Springboot和Vue的前后端分离项目
  • MD5加密算法详解与实现
  • Python-Flask企业网页平台深度Q网络DQN强化学习推荐系统设计与实现:结合用户行为动态优化推荐策略
  • Dockerfile 自动化构建容器镜像
  • OpenStack:典型的面向服务架构(Service-Oriented Architecture, SOA)
  • Java Bitmap 去重:原理、代码实现与应用
  • 广东省省考备考(第九十二天9.2)——言语(刷题巩固第一节课)
  • 从全栈开发到微服务架构:一次真实的Java全栈面试经历
  • 子进程、父进程
  • 高效数据传输的秘密武器:Protobuf
  • Linux系统:进程信号的处理
  • TKDE-2022《Low-Rank Linear Embedding for Robust Clustering》
  • 【机器学习深度学习】向量模型与重排序模型:RAG 的双引擎解析
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • keycloak中对接oidc协议时设置prompt=login
  • 机器学习回顾——决策树详解
  • SOL中转转账教程
  • Android Binder 驱动 - Media 服务启动流程
  • TiDB v8.5.3 单机集群部署指南
  • rocketmq启动与测试
  • 数据结构--跳表(Skip List)
  • playwright+python UI自动化测试中实现图片颜色和像素对比
  • 便携式显示器怎么选?:6大关键指标全解析
  • 【三班网】初三大事件