{
 "name": "[노드 한 장] Vector Store Retriever · 근거 문서 Limit 1과 2 비교",
 "nodes": [
  {
   "id": "m",
   "name": "Run manually",
   "type": "n8n-nodes-base.manualTrigger",
   "typeVersion": 1,
   "position": [
    0,
    0
   ],
   "parameters": {}
  },
  {
   "id": "p",
   "name": "Three new sample policies",
   "type": "n8n-nodes-base.code",
   "typeVersion": 2,
   "position": [
    220,
    0
   ],
   "parameters": {
    "jsCode": "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}}];"
   }
  },
  {
   "id": "i",
   "name": "Insert own new store",
   "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
   "typeVersion": 1.3,
   "position": [
    440,
    0
   ],
   "parameters": {
    "mode": "insert",
    "memoryKey": {
     "__rl": true,
     "mode": "id",
     "value": "TEST_RETRIEVER_STORE"
    },
    "clearStore": false
   }
  },
  {
   "id": "q",
   "name": "One identical question",
   "type": "n8n-nodes-base.code",
   "typeVersion": 2,
   "position": [
    660,
    0
   ],
   "parameters": {
    "jsCode": "return [{json:{sample:true,question:\"회의실을 못 쓰게 되면 언제 취소하고, 외근 교통비 서류는 언제 내야 하죠?\"}}];"
   }
  },
  {
   "id": "q1",
   "name": "QA Limit 1",
   "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
   "typeVersion": 1.7,
   "position": [
    900,
    -150
   ],
   "parameters": {
    "promptType": "define",
    "text": "={{ $json.question }}",
    "options": {
     "systemPromptTemplate": "교육용 가상 정책의 근거만 사용하세요. 질문 중 근거가 없는 부분은 근거 없다고 쓰세요. 한국어 80자 이내 한 문장으로 답하세요. 실제 회사 규정으로 표현하지 마세요.\n근거 문서:\n{context}"
    }
   }
  },
  {
   "id": "q2",
   "name": "QA Limit 2",
   "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
   "typeVersion": 1.7,
   "position": [
    900,
    180
   ],
   "parameters": {
    "promptType": "define",
    "text": "={{ $json.question }}",
    "options": {
     "systemPromptTemplate": "교육용 가상 정책의 근거만 사용하세요. 질문 중 근거가 없는 부분은 근거 없다고 쓰세요. 한국어 80자 이내 한 문장으로 답하세요. 실제 회사 규정으로 표현하지 마세요.\n근거 문서:\n{context}"
    }
   }
  },
  {
   "id": "d",
   "name": "Default Data Loader",
   "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
   "typeVersion": 1.1,
   "position": [
    440,
    240
   ],
   "parameters": {
    "dataType": "binary",
    "binaryMode": "specificField",
    "binaryDataKey": "data",
    "loader": "jsonLoader",
    "textSplittingMode": "simple",
    "options": {
     "pointers": "/policy"
    }
   }
  },
  {
   "id": "e",
   "name": "Embeddings OpenAI",
   "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
   "typeVersion": 1.2,
   "position": [
    660,
    430
   ],
   "parameters": {
    "model": "text-embedding-3-small",
    "options": {}
   }
  },
  {
   "id": "r1",
   "name": "Retriever Limit 1",
   "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
   "typeVersion": 1,
   "position": [
    1150,
    -100
   ],
   "parameters": {
    "topK": 1
   }
  },
  {
   "id": "r2",
   "name": "Retriever Limit 2",
   "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
   "typeVersion": 1,
   "position": [
    1150,
    230
   ],
   "parameters": {
    "topK": 2
   }
  },
  {
   "id": "s",
   "name": "Own store provider",
   "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
   "typeVersion": 1.3,
   "position": [
    1350,
    100
   ],
   "parameters": {
    "mode": "retrieve",
    "memoryKey": {
     "__rl": true,
     "mode": "id",
     "value": "TEST_RETRIEVER_STORE"
    }
   }
  },
  {
   "id": "c",
   "name": "OpenAI Chat Model",
   "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
   "typeVersion": 1.3,
   "position": [
    900,
    430
   ],
   "parameters": {
    "model": {
     "__rl": true,
     "mode": "list",
     "value": "gpt-4.1-mini",
     "cachedResultName": "gpt-4.1-mini"
    },
    "responsesApiEnabled": false,
    "options": {
     "temperature": 0
    }
   }
  }
 ],
 "connections": {
  "Run manually": {
   "main": [
    [
     {
      "node": "Three new sample policies",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Three new sample policies": {
   "main": [
    [
     {
      "node": "Insert own new store",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Insert own new store": {
   "main": [
    [
     {
      "node": "One identical question",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "One identical question": {
   "main": [
    [
     {
      "node": "QA Limit 1",
      "type": "main",
      "index": 0
     },
     {
      "node": "QA Limit 2",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Default Data Loader": {
   "ai_document": [
    [
     {
      "node": "Insert own new store",
      "type": "ai_document",
      "index": 0
     }
    ]
   ]
  },
  "Embeddings OpenAI": {
   "ai_embedding": [
    [
     {
      "node": "Insert own new store",
      "type": "ai_embedding",
      "index": 0
     },
     {
      "node": "Own store provider",
      "type": "ai_embedding",
      "index": 0
     }
    ]
   ]
  },
  "Retriever Limit 1": {
   "ai_retriever": [
    [
     {
      "node": "QA Limit 1",
      "type": "ai_retriever",
      "index": 0
     }
    ]
   ]
  },
  "Retriever Limit 2": {
   "ai_retriever": [
    [
     {
      "node": "QA Limit 2",
      "type": "ai_retriever",
      "index": 0
     }
    ]
   ]
  },
  "Own store provider": {
   "ai_vectorStore": [
    [
     {
      "node": "Retriever Limit 1",
      "type": "ai_vectorStore",
      "index": 0
     },
     {
      "node": "Retriever Limit 2",
      "type": "ai_vectorStore",
      "index": 0
     }
    ]
   ]
  },
  "OpenAI Chat Model": {
   "ai_languageModel": [
    [
     {
      "node": "QA Limit 1",
      "type": "ai_languageModel",
      "index": 0
     },
     {
      "node": "QA Limit 2",
      "type": "ai_languageModel",
      "index": 0
     }
    ]
   ]
  }
 },
 "settings": {
  "executionOrder": "v1",
  "timezone": "Asia/Seoul"
 },
 "meta": {
  "templateCredsSetupCompleted": false,
  "source": "datapopcorn.ai/workflow/nodes"
 }
}