LLamaIndex中经常使用的三个模块
from aiostream import stream
from fastapi import Request
from fastapi.responses import StreamingResponse
from llama_index.core.chat_engine.types import StreamingAgentChatResponse
这四个模块每一个都很实用,在实际开发中经常用到,下面我就详细 一 一 介绍
✅ 1. from aiostream import stream
💡说人话:
这是个第三方库(aiostream
),专门用来处理 异步的流式操作,比如你要边接收消息边处理,或者边生成数据边发送给前端,就可以用它。
🎯主要用途:
组合多个异步生成器(async generator),做异步流的数据处理(像 async 的 RxPy)
✅ 举例:
from aiostream import streamasync def gen1():yield 1yield 2async def gen2():yield 3yield 4# 把两个异步生成器合并成一个流
merged = stream.merge(gen1(), gen2())async for item in merged:print(item)
📦 场景:
你要把多个聊天流合并起来(比如 RAG + tool result),就可以用它。
✅ 2. from fastapi import Request
这是 FastAPI 中的一个请求对象类,用来拿前端发来的 HTTP 请求里的内容,比如 headers、body、query 参数等。
🎯主要用途:
- 获取客户端传来的信息
- 比如你要判断是谁发的消息、拿到请求体里的参数等
✅ 举例:
from fastapi import Request@app.post("/chat")
async def chat(request: Request):data = await request.json()print(data)return {"msg": "ok"}
📦 场景:
前端调用你的聊天接口 /chat
,你就用这个 Request
拿到它传来的聊天内容。
✅ 3. from fastapi.responses import StreamingResponse
这是 FastAPI 提供的一个 边处理边返回响应流 的工具,比如你在聊天时一个字一个字地流式返回,就靠它了。
🎯主要用途:
- 把一个异步生成器(或者普通生成器)当成“流式响应体”
- 前端就可以边收边展示,不用等处理完
✅ 举例:
from fastapi.responses import StreamingResponseasync def fake_stream():yield b"hello"yield b"world"@app.get("/stream")
async def stream_data():return StreamingResponse(fake_stream(), media_type="text/plain")
📦 场景:
AI 聊天接口,字一个一个蹦出来返回,就靠它。
✅ 4. from llama_index.core.chat_engine.types import StreamingAgentChatResponse
这是 LlamaIndex
框架里定义的一个类,表示“一个聊天响应的流式版本”。
🎯主要用途:
如果你用的是 Agent
方式的聊天,它会把结果分阶段、分段以异步流的形式生成,就用这个类来接收。
✅ 举例:
response: StreamingAgentChatResponse = await chat_engine.stream_chat("你是谁?")async for chunk in response.async_response_gen():print(chunk.response)
📦 场景:
当你使用 LlamaIndex 的 Agent
聊天,想要边回答边显示,而不是等全部生成完,就会返回这个类型。
🔚 总结对比表:
模块 | 用途 | 举个场景 |
---|---|---|
aiostream.stream | 异步流处理工具库 | 多个 async generator 合并 |
fastapi.Request | 获取 HTTP 请求内容 | 获取用户发来的 prompt |
StreamingResponse | 把响应变成流式 | 前端聊天字一个个显示 |
StreamingAgentChatResponse | LlamaIndex 的流式聊天响应对象 | 边调用边 yield 响应内容 |