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

Agent开发——Day 04 async/await 异步编程

Day 04 案例分析:async/await 异步编程

案例一:LLM 并发调用(最贴近 Agent 开发的场景)

场景描述

你在开发一个 Agent,用户问了一个复杂问题,你需要同时调用 3 个 LLM:

  • LLM-A:生成初稿
  • LLM-B:检查事实
  • LLM-C:评估语气

同步写法(慢):

result_a=call_llm_a(prompt)# 等 2 秒result_b=call_llm_b(prompt)# 等 2 秒result_c=call_llm_c(prompt)# 等 2 秒# 总共等 6 秒

异步写法(快):

result_a,result_b,result_c=awaitasyncio.gather(call_llm_a(prompt),call_llm_b(prompt),call_llm_c(prompt),)# 总共等 2 秒(最慢的那个)

结论:asyncio.gather()是 Agent 开发中最常用的并发工具。


案例二:FastAPI 的本质(理解"为什么框架要求 async")

FastAPI、LangGraph 的 Server 模式,都要求你写async def。原因是:

# FastAPI 路由(必须是 async def)@app.post("/chat")asyncdefchat(request:ChatRequest):# 当这里在等 LLM 响应时,FastAPI 可以去处理其他用户的请求response=awaitcall_llm(request.message)return{"reply":response}

如果用同步def,服务器处理一个用户时,其他用户的请求全部排队等待。
async def,等待 IO 的时候 CPU 可以去处理其他请求,吞吐量大幅提升。


案例三:Day 3 代码的异步改造

原始同步版本

importrequestsdefcall_api_with_auth(api_key:str,prompt:str)->str:url="https://httpbin.org/post"headers={"Authorization":f"Bearer{api_key}","Content-Type":"application/json"}body={"model":"some-model","messages":[{"role":"user","content":prompt}]}response=requests.post(url,headers=headers,json=body,timeout=10)response.raise_for_status()echo=response.json()print("服务器收到的 headers:",echo["headers"].get("Authorization"))return"调用成功"

异步改造版本(见 day004.py)

关键变化:

同步异步
import requestsimport httpximport aiohttp
defasync def
requests.post()await client.post()
直接调用函数asyncio.run(main())

关键概念速查

async def— 声明一个协程函数

asyncdefmy_function():return"结果"

调用它不会立刻执行,而是返回一个"协程对象"(承诺将来会执行)。

await— 等待协程完成

result=awaitmy_function()# 挂起当前函数,等 my_function 完成

await只能在async def函数内部使用。

asyncio.run()— 启动事件循环(程序入口)

if__name__=="__main__":asyncio.run(main())# 在同步代码中运行异步函数的唯一正确方式

asyncio.gather()— 并发执行多个协程

results=awaitasyncio.gather(task1(),task2(),task3())# results 是一个列表,顺序与传入顺序一致

asyncio.sleep()— 异步等待(不阻塞其他任务)

awaitasyncio.sleep(1)# 等1秒,但期间其他协程可以运行# 对比:time.sleep(1) 会阻塞整个程序
http://www.jsqmd.com/news/1082524/

相关文章:

  • 「简记往来」开发历程系列:API设计——RESTful接口在礼账场景中的实践
  • 4G+LoRa远程土壤监测系统设计与实现
  • 2026年自动化运维产品深度对比:破解异构架构与合规高效双重挑战
  • 创建vue3项目(使用vite) + 配置路由router
  • Windows热键侦探:快速定位热键冲突的完整解决方案
  • 2025年最强网盘直链下载工具:LinkSwift全面使用手册
  • 告别文献管理噩梦:WPS-Zotero插件如何让你的科研写作效率提升10倍
  • 计算机Java毕设实战-基于 SpringBoot 的智慧旅游推荐平台的设计与实现 基于 SpringBoot 的旅游信息推荐系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机毕业设计之基于微信小程序的校园订餐配送系统的设计与实现
  • 【Ultra-Fusion】一套后端通吃轮式/四足/无人机:因子级退化调度+在线时空校准,60+系统对比全SOTA
  • 如何快速掌握STDF-Viewer:半导体测试数据可视化的终极指南
  • 树莓派5搭载Hailo NPU部署本地大语言模型实战指南
  • MetaboAnalystR 代谢组学分析终极指南:从入门到精通
  • 从零搭建Fastjson 1.2.24反序列化漏洞靶场:原理、实战与深度避坑
  • 4G MQTT物联网气象监测终端设计与优化
  • GARbro终极指南:5个简单步骤掌握视觉小说资源提取神器
  • 系统高可用架构实战:从原理到实践构建安全岛保障业务连续性
  • ExtractorSharp深度解析:3个秘诀掌握游戏资源编辑核心技术
  • TQVaultAE:泰坦之旅终极物品管理工具完整使用指南
  • 如何彻底改造宝可梦游戏:Universal Pokemon Randomizer ZX完全指南
  • MetaboAnalystR 4.0终极指南:3步掌握代谢组学数据分析神器
  • 如何在浏览器中快速实现PDF扫描效果?LookScanned.io终极指南
  • unity资源 鱼类 海鸥 飞鸟 蝴蝶 荷花池塘
  • Deceive完全指南:5分钟掌握游戏隐身技术,轻松保护你的在线隐私
  • Android Studio中文界面5分钟速成指南:让开发回归母语舒适区
  • pytest框架---fixture固件
  • CORS安全配置实战:从漏洞原理到Nginx与Spring Boot修复指南
  • Cura 3D切片软件:为什么它是开源3D打印的最佳选择
  • STM32F103冗余电阻设计:提升系统可靠性的关键细节
  • Paperxie 图书专著智能写作:三步搭建长篇著作,破解十万字学术创作瓶颈