用途:指导用户在 DSPy 中以 async/await 非阻塞方式运行模块,用于 Web 框架、并发处理和高吞吐应用。每个 DSPy 模块都支持异步执行,通过 aforward() 和 acall() 返回可等待协程,从而兼容 FastAPI、Starlette、aiohttp,并可用 asyncio.gather() 并发调用 LM。
主要能力:module.aforward(**kwargs) 是 forward() 的异步版本;module.acall(**kwargs) 是调用模块的异步便捷别名。可用 asyncio.gather 并发执行多个独立 LM 调用;可用 asyncio.Semaphore 限制并发数,避免压垮 LM 提供商。支持与流式输出结合(streamify、StreamListener、StreamingResponse),支持自定义模块实现 aforward,也支持带异步工具的 ReAct 智能体用 acall() 自动处理异步工具。
使用方式:基本用法为 result = await qa.aforward(question=question),并用 asyncio.run() 运行。批量并发时先构造任务列表,再 await asyncio.gather(*tasks)。限流示例中设置 semaphore = asyncio.Semaphore(10),在 async with semaphore 内调用 aforward。FastAPI 中可定义 async def classify(text: str) 并 await classifier.aforward(text=text)。自定义模块需实现 async def aforward。
适用场景:FastAPI/Starlette 后端服务、实时 API、并发 LM 调用、与异步数据库或缓存集成、异步流式输出。单次输入、脚本或 notebook、优化与评估、简单 CLI、无事件循环的应用宜用同步。
限制与注意事项:在异步函数内同步调用模块会阻塞事件循环,应始终使用 aforward() 或 acall();不能在已有事件循环内调用 asyncio.run(),否则报 RuntimeError,应直接 await;大批量处理务必加信号量;自定义模块被 await 调用时必须实现 aforward(),DSPy 不会自动包装 forward();若某一步是异步(如 MCP 工具),整条调用链都须为异步,不能在同步 forward() 中 await。安装方式:npx skills add lebsral/DSPy-Programming-not-prompting-LMs-skills --skill <name>。API 细节与示例见 reference.md、examples.md;相关主题见 /ai-serving-apis、/dspy-parallel、/dspy-streaming、/dspy-mcp、/dspy-utils、/ai-do。