쿼리 엔진

쿼리 엔진 (Query Engine)

쿼리 엔진은 Retriever(검색기)와 ResponseSynthesizer(응답 합성기)를 하나의 파이프라인으로 감싼 것이에요. 질문 문자열로 관련 노드를 가져온 뒤 LLM에 보내 응답을 생성하게 해주죠. 데이터를 대상으로 질문하고 싶을 때 만나는 대표적인 통로예요.

출처: 공식문서

기본 사용법

인덱스에서 바로 쿼리 엔진을 만들 수 있어요.

const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({ query: "query string" });

query 함수는 스트리밍도 지원해요. stream: true 옵션만 추가하면 됩니다.

const stream = await queryEngine.query({ query: "query string", stream: true });
for await (const chunk of stream) {
  process.stdout.write(chunk.response);
}

하위 질문 쿼리 엔진 (Sub Question Query Engine)

하위 질문 쿼리 엔진의 기본 아이디어는 이래요. 하나의 질문을 여러 질문으로 쪼개고, 각 질문의 답을 얻은 뒤, 이 답들을 하나의 일관된 응답으로 합칩니다. "단계별로 차근차근 생각해봐"라고 하는 프롬프트 기법을 생각하면 되는데, 차이점은 데이터 소스를 반복해서 살핀다는 거예요!

시작하기

가장 쉽게 시험해보는 방법은 examples 저장소subquestion.ts 파일을 실행하는 거예요.

npx ts-node subquestion.ts

도구 (Tools)

SubQuestionQueryEngine은 도구(Tools)로 구현돼 있어요. 도구의 기본 아이디어는 LLM이 "실행할 수 있는 선택지"라는 거예요. 여기서는 SubQuestionQueryEngineQueryEngineTool에 의존하는데, 이름처럼 쿼리 엔진에 대한 질의를 실행하는 도구예요. 덕분에 모델이 예를 들어 서로 다른 문서에 대해 각각 다른 질문을 실행할 수 있게 해줘요. 웹에서 무언가를 검색하거나 Wolfram Alpha로 답을 얻는 도구를 쓰는 형태로도 확장할 수 있겠죠.

도구에 대해 더 자세히 보려면 LlamaIndex Python 문서를 참고할 수 있어요: https://gpt-index.readthedocs.io/en/latest/core_modules/agent_modules/tools/root.html

더 알아보기