← 노드 한 장 전체#59 · Vector Store Retriever

Vector Store Retriever

회의실 취소·교통비, AI가 받은 근거는?

이 글은 이런 분께AI에 넘기는 검색 근거 문서 수가 실제로 어떻게 달라지는지 확인하고 싶은 분
Vector Store Retriever 영상 표지

1분 영상은 @workflow.hanjang 에 순서대로 공개돼요

JSON 받기

회의실을 못 쓰게 되면 언제 취소하고, 외근 교통비 서류는 언제 내야 할까요?

직접 쓴 가상 문서 3개를 새 고유 메모리 저장소에 넣고, 같은 질문에 Retriever의 Limit만 1과 2로 나눠 비교했습니다. 실제 회사 규정이나 개인정보가 아닌 교육용 샘플입니다.

먼저 결과부터

새 고유 메모리 저장소에 직접 쓴 서로 다른 샘플 문서 3개를 등록하고, 같은 질문을 Vector Store Retriever Limit 1·2로 실행했습니다. 실제 벡터 조회 k=1의 response는 교통비 E2 1개, k=2는 교통비 E2+회의실 M1 2개였어요. 모델에 전달된 실제 context도 각각 1개·2개로 원본 전체와 일치했습니다. Retriever는 문서를 찾아 AI에 넘기는 역할이며 답변 생성 자체는 Q&A Chain과 Chat Model이 했습니다. 최대 개수가 늘면 항상 더 정확하다는 뜻은 아닙니다. 두 설정 확인에 모델 노드 2회(417토큰), 임베딩 노드 3회가 기록됐습니다. 실제 회사 정보가 아닌 교육용 샘플입니다. (실제 실행 #74873)
우리가 실제로 돌린 기록 · 실행 #74873 · 2026-10-30

따라 하기

실제로 실행한 워크플로우를 바탕으로 정리했어요. 계정·식별자는 공개용 값으로 치환했고, 그 밖의 차이는 아래 주의사항에 표시했어요. n8n 캔버스에서 +를 눌러 노드를 순서대로 추가하고 같은 값을 넣으면 돼요. 빨간 제목이 이번 편의 주인공 노드예요. 표 왼쪽은 n8n 편집기에 보이는 칸 이름, 오른쪽은 다운로드 JSON의 설정값이에요. 직접 입력하기 번거로우면 JSON을 받아 ⋯ → Import from File로 가져오세요.

Step 1. Manual Trigger 노드 추가이름: Run manually

설정 없이 그대로 추가해요.

Step 2. Code 노드 추가이름: Three new sample policies

JavaScript
const policies=["[샘플정책 M1: 회의실] 실제 회사 규정이 아닌 교육용 가상 문서입니다. 회의실 예약 취소는 이용 시작 60분 전까지 신청합니다. 그 이후에는 시설 담당 역할에게 알려야 합니다.","[샘플정책 E2: 교통비] 실제 회사 규정이 아닌 교육용 가상 문서입니다. 외근 교통비는 영수증과 목적을 적어 다음 영업일까지 제출합니다. 영수증이 없으면 검토가 보류됩니다.","[샘플정책 D3: 공용 장비] 실제 회사 규정이 아닌 교육용 가상 문서입니다. 공용 태블릿은 사용 전 배터리를 확인합니다. 돌려줄 때는 전원을 끄고 보관함 충전 선을 연결합니다."];const data=await this.helpers.prepareBinaryData(Buffer.from(JSON.stringify(policies.map(policy=>({policy}))),"utf8"),"retriever-samples.json","application/json");return [{json:{sample:true,policyCount:3},binary:{data}}];

Step 3. Simple Vector Store 노드 추가이름: Insert own new store

Operation ModeInsert Documents
Memory KeyTEST_RETRIEVER_STORE
Clear Store꺼짐

Step 4. Default Data Loader 노드 추가이름: Default Data Loader

Type of DataBinary
ModeLoad Specific Data
Input Data Field Namedata
Data FormatJSON
Text SplittingSimple
Options › JSON Pointers/policy

Step 5. Embeddings OpenAI 노드 추가이름: Embeddings OpenAI

Modeltext-embedding-3-small

Step 6. Code 노드 추가이름: One identical question

JavaScriptreturn [{json:{sample:true,question:"회의실을 못 쓰게 되면 언제 취소하고, 외근 교통비 서류는 언제 내야 하죠?"}}];

Step 7. Question and Answer Chain 노드 추가이름: QA Limit 1

Source for Prompt (User Message)Define below
Prompt (User Message){{ $json.question }}
Options › System Prompt Template
교육용 가상 정책의 근거만 사용하세요. 질문 중 근거가 없는 부분은 근거 없다고 쓰세요. 한국어 80자 이내 한 문장으로 답하세요. 실제 회사 규정으로 표현하지 마세요.
근거 문서:
{context}

Step 8. OpenAI Chat Model 노드 추가이름: OpenAI Chat Model

Modelgpt-4.1-mini
Use Responses API꺼짐
Options › Sampling Temperature0

Step 9. Vector Store Retriever 노드 추가이름: Retriever Limit 1

Limit1

Step 10. Question and Answer Chain 노드 추가이름: QA Limit 2

Source for Prompt (User Message)Define below
Prompt (User Message){{ $json.question }}
Options › System Prompt Template
교육용 가상 정책의 근거만 사용하세요. 질문 중 근거가 없는 부분은 근거 없다고 쓰세요. 한국어 80자 이내 한 문장으로 답하세요. 실제 회사 규정으로 표현하지 마세요.
근거 문서:
{context}

Step 11. Vector Store Retriever 노드 추가이름: Retriever Limit 2

Limit2

Step 12. Simple Vector Store 노드 추가이름: Own store provider

Operation ModeRetrieve Documents (As Vector Store for Chain/Tool)
Memory KeyTEST_RETRIEVER_STORE

가져와서 쓸 때 확인할 것

노드의 모든 옵션은 n8n 공식 문서에서 볼 수 있어요.