LlamaIndex 스트리밍
LlamaIndex 스트리밍 (Streaming)
LLM 응답은 생성되는 대로 전부 기다리지 않고 받을 수 있어요. LlamaIndex는 응답이 생성되는 동안 스트리밍하는 걸 지원해요. 이렇게 하면 전체 응답이 끝나기 전에 응답의 앞부분부터 출력·처리할 수 있어서, 사용자가 느끼는 쿼리 지연 시간을 크게 줄여줘요.
설정
스트리밍을 쓰려면 스트리밍을 지원하는 LLM을 사용해야 해요. 현재 OpenAI, HuggingFaceLLM, 그리고 대부분의 LangChain LLM(LangChainLLM 경유)이 스트리밍을 지원해요.
⚠️ 참고: 선택한 LLM이 스트리밍을 지원하지 않으면
NotImplementedError가 발생해요.
하이레벨 API로 쿼리 엔진을 스트리밍하도록 설정하려면, 쿼리 엔진을 만들 때 streaming=True를 설정하면 돼요.
query_engine = index.as_query_engine(streaming=True, similarity_top_k=1)
로우레벨 API로 쿼리 엔진을 조립하고 있다면, Response Synthesizer를 만들 때 streaming=True를 넘겨줘요.
from llama_index.core import get_response_synthesizer
synth = get_response_synthesizer(streaming=True, ...)
query_engine = RetrieverQueryEngine(response_synthesizer=synth, ...)
스트리밍 응답
LLM과 쿼리 엔진을 제대로 설정한 뒤에는, query를 호출하면 StreamingResponse 객체가 반환돼요.
streaming_response = query_engine.query(
"What did the author do growing up?",
)
LLM 호출이 시작되는 순간, 전체 완료를 기다리지 않고 응답이 즉시 반환돼요.
⚠️ 참고: 쿼리 엔진이 LLM을 여러 번 호출하는 경우, 마지막 LLM 호출만 스트리밍되고, 그 마지막 호출이 시작될 때 응답이 반환돼요.
스트리밍 응답에서 Generator를 얻어 토큰이 도착하는 대로 순회할 수 있어요.
for text in streaming_response.response_gen:
# do something with text as they arrive.
pass
도착하는 텍스트를 그냥 출력하고 싶다면:
streaming_response.print_response_stream()
출처: 공식문서