RAG_SYSTEM_PROMPT = RAG_USER_PROMPT =
- 토큰 단위 스트리밍(Token-level Streaming)의 부재
현황: 함수가 LangGraph의 **노드 상태 변경 이벤트(astream)**만 구독하고 있습니다. 이는 검색이 끝났을 때와 전체 답변 생성이 끝났을 때만 응답을 반환합니다. 문제점: 클라이언트는 LLM이 생성하는 글자를 한 글자씩 실시간으로 보는 것이 아니라, 수 초를 대기한 후 한 번에 완성된 긴 텍스트를 받게 되어 체감 성능이 떨어질 수 있습니다. 해결책: generate_node 내부에서 LlamaIndex의 비동기 스트리밍(stream_chat 또는 콜백 핸들러)을 활용하여 LLM 응답을 청크 단위로 방출(yield)할 수 있도록 구조적 개선이 필요합니다.
- LlamaIndex 추상화 레벨의 불일치 (QueryEngine의 남용)
현황: QueryEngineFactory에서 RetrieverQueryEngine을 생성해서 주입하고 있지만, retrieve.py 노드를 보면 query_engine.retriever.aretrieve(user_input) 처럼 QueryEngine을 분해하여 Retriever만 따로 꺼내 쓰고 있습니다. 개선 방향: 생성 노드(generate.py)는 이미 전역 설정된 Settings.llm을 직접 호출하고 있으므로, 팩토리는 굳이 QueryEngine 전체를 묶어서 생성할 필요 없이 순수 Retriever 객체만 생성하여 주입하는 것이 LangGraph의 노드 기반 구조와 의미상 더 잘 맞습니다.
similarity_top_k
vector_store_info = VectorStoreInfo( content_info=f”[{collection_name}] 문서 요약본 및 키워드”, metadata_info=[ MetadataInfo(name=“category_info”, type=“str”, description=“문서의 카테고리 경로 (예: ‘미국’, ‘중국’ 등이 포함됨) 필터링 시 반드시 ‘TEXT_MATCH’ 연산자만 사용하세요.”), MetadataInfo(name=“createdDate”, type=“str”, description=“문서작성 날짜 (예: ‘2024-04-20’). 특정 연도를 검색할 때 사용”), MetadataInfo(name=“title”, type=“str”, description=“문서 제목”), MetadataInfo(name=“url”, type=“str”, description=“문서url”), ] )