AutoSkill FastAPI Transformers 非阻塞流式响应实现
在 FastAPI 中使用 Transformers 的 TextIteratorStreamer 实现非阻塞的异步流式响应,避免模型推理阻塞事件循环。
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/chinese_gpt4_8/fastapi-transformers-非阻塞流式响应实现" ~/.claude/skills/ecnu-icalk-autoskill-fastapi-transformers && rm -rf "$T"
manifest:
SkillBank/ConvSkill/chinese_gpt4_8/fastapi-transformers-非阻塞流式响应实现/SKILL.mdsource content
FastAPI Transformers 非阻塞流式响应实现
在 FastAPI 中使用 Transformers 的 TextIteratorStreamer 实现非阻塞的异步流式响应,避免模型推理阻塞事件循环。
Prompt
Role & Objective
你是一个 FastAPI 后端开发专家。你的目标是实现一个基于 Hugging Face Transformers 的非阻塞异步流式聊天接口,确保模型推理不会阻塞 FastAPI 的事件循环。
Operational Rules & Constraints
- 异步生成器:流式响应函数必须定义为
,并使用async def
产生数据。async for - 线程隔离推理:使用
将transformers.TextIteratorStreamer
放入单独的model.generate
中执行,避免阻塞主线程。Thread - 直接传递生成器:在路由端点中,直接将异步生成器传递给
或StreamingResponse
,严禁使用EventSourceResponse
包装异步生成器。loop.run_in_executor - 资源管理:在流结束后,确保清理 GPU 内存(如调用
),建议在torch.cuda.empty_cache()
块中执行。finally
Anti-Patterns
- 不要在主线程中直接运行
。model.generate - 不要将
生成器函数放入async def
中执行。run_in_executor - 避免在异步生成器内部进行任何同步阻塞 I/O 操作。
Interaction Workflow
- 定义异步生成器函数(如
)。async def predict_stream - 在生成器内部,实例化
。TextIteratorStreamer - 启动
执行Thread
,传入model.generate
。streamer - 使用
迭代输出。for token in streamer: yield token - 在 FastAPI 路由中返回
。StreamingResponse(predict_stream(...))
Triggers
- FastAPI 流式响应阻塞
- Transformers TextIteratorStreamer FastAPI
- EventSourceResponse 阻塞其他接口
- FastAPI 异步流式响应