자동화된 문서 규정 준수 검증
고급
이것은AI RAG, Multimodal AI분야의자동화 워크플로우로, 22개의 노드를 포함합니다.주로 Code, Webhook, HttpRequest, Code, Agent 등의 노드를 사용하며. AI와 벡터 데이터베이스를 결합한 자동화된 문서 규정 준수 검증
사전 요구사항
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •대상 API의 인증 정보가 필요할 수 있음
- •Qdrant 서버 연결 정보
사용된 노드 (22)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "3fe077479b444bdcfece7286c569713d43d4aa028a4ec663ca89692157527a79",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "22c5f212-aeca-46d1-a684-41147efc6547",
"name": "감사 문서 업로드",
"type": "n8n-nodes-base.webhook",
"position": [
-464,
-272
],
"webhookId": "ede6ddb4-91a5-4a3c-9f91-5600939bf5a8",
"parameters": {
"path": "creatorhub/audit-document-upload",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2
},
{
"id": "bf8f5941-db69-4db3-b344-183e23b010ca",
"name": "절차 제출",
"type": "n8n-nodes-base.webhook",
"position": [
-464,
288
],
"webhookId": "9bbf9e5b-1582-40c2-9324-6927f62ca31d",
"parameters": {
"path": "creatorhub/procedure-validate",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "35b34dc7-27f0-446d-b052-1bf7eb990ce2",
"name": "문서 가져오기 (Microsoft Graph)",
"type": "n8n-nodes-base.httpRequest",
"position": [
-256,
-272
],
"parameters": {
"url": "={{$env.GRAPH_BASE_URL || \"https://graph.microsoft.com\"}}/v1.0/drives/{{$json.body.spDriveId}}/items/{{$json.body.spDocumentId}}/content",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "a9520145-7f98-4f22-a477-cb24caa599b2",
"name": "이전 문서 벡터 삭제",
"type": "@n8n/n8n-nodes-langchain.code",
"position": [
0,
-272
],
"parameters": {
"code": {
"execute": {
"code": "const { QdrantVectorStore } = require(\"@langchain/qdrant\");\nconst { OllamaEmbeddings } = require(\"@langchain/community/embeddings/ollama\");\n\nconst OLLAMA_BASE_URL = $env.OLLAMA_BASE_URL || \"http://localhost:11434\";\nconst QDRANT_BASE_URL = $env.QDRANT_BASE_URL || \"http://localhost:6333\";\nconst QDRANT_COLLECTION = $env.QDRANT_COLLECTION || \"audit-docs\";\nconst EMBED_MODEL = $env.OLLAMA_EMBED_MODEL || \"nomic-embed-text\";\n\nconst embeddings = new OllamaEmbeddings({ model: EMBED_MODEL, baseUrl: OLLAMA_BASE_URL });\nconst vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, { url: QDRANT_BASE_URL, collectionName: QDRANT_COLLECTION });\n\nconst items = this.getInputData();\nconst fileIdToDelete = items[0].json.body.spDocumentId;\n\nconst filter = { must: [ { key: \"metadata.file_id\", match: { value: fileIdToDelete } } ] };\n\ntry {\n if (vectorStore?.client?.delete) {\n await vectorStore.client.delete(QDRANT_COLLECTION, { filter });\n }\n} catch (e) {\n // Non-fatal: continue import/index even if delete fails\n this.logger?.warn?.(`Qdrant delete skipped/failed: ${e?.message || e}`);\n}\n\nreturn items.map(item => ({ json: { ...item.json, file_id: fileIdToDelete }, binary: item.binary }));"
}
},
"inputs": {
"input": [
{
"type": "main",
"required": true
}
]
},
"outputs": {
"output": [
{
"type": "main"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": false
},
{
"id": "a0be08c7-54b0-41ad-9b8a-326601c0e6b8",
"name": "PDF 텍스트 추출",
"type": "n8n-nodes-base.extractFromFile",
"position": [
416,
-272
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "=data"
},
"executeOnce": true,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "c8a629c8-80d6-484f-ade6-e3a969c1a353",
"name": "문서 임베딩 생성",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
560,
-80
],
"parameters": {
"model": "={{ $env.OLLAMA_EMBED_MODEL || \"nomic-embed-text:latest\" }}"
},
"credentials": {
"ollamaApi": {
"id": "FLDXCk6C8NH00TJu",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "0e2b9829-03bf-4dfb-b557-94d79f13c5d7",
"name": "벡터 Qdrant에 삽입",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
656,
-272
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "={{ $env.QDRANT_COLLECTION || \"audit-docs\" }}",
"cachedResultName": "audit-docs"
}
},
"credentials": {
"qdrantApi": {
"id": "efX2OG1ibQmRYvUA",
"name": "QdrantApi account"
}
},
"typeVersion": 1.3
},
{
"id": "250e006a-d815-475e-a0f6-daa88c0b2a71",
"name": "문서 메타데이터 로드",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
768,
-96
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "documentId",
"value": "={{ $('Delete Old Document Vectors').item.json.body.spDocumentId }}"
},
{
"name": "documentName",
"value": "={{ $('Delete Old Document Vectors').item.json.body.fileName }}"
}
]
}
},
"textSplittingMode": "custom"
},
"typeVersion": 1.1
},
{
"id": "53151c0a-7fbe-4a35-a9a9-9d082842f05f",
"name": "텍스트 청크로 분할",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
880,
48
],
"parameters": {
"options": {},
"chunkOverlap": 10
},
"typeVersion": 1
},
{
"id": "1970eb10-01aa-4108-b686-47e6fa955cf8",
"name": "절차 페이로드 형식화",
"type": "n8n-nodes-base.code",
"position": [
-224,
288
],
"parameters": {
"jsCode": "const {procedures, spDocumentId, description} = $input.first().json.body;\nconst result = procedures.map(procedure => ({ json: { spDocumentId, procedure, description } }));\nreturn result;"
},
"typeVersion": 2
},
{
"id": "a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa",
"name": "AI 준수성 검증기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
112,
288
],
"parameters": {
"text": "=# Role\nYou are an expert internal auditor with extensive experience in compliance analysis, document review, and gap identification. Your analytical skills, attention to detail, and ability to extract relevant information from complex documents are unmatched in the industry.\n\n# Inputs\n\n**Procedure**\n{{ $json.procedure }}\n \n**spDocumentId**\n{{ $json.spDocumentId }}\n \n**description**\n{{ $json.description }}\n\n# Task\nAnalyze the provided procedure and related documents by following these steps:\n\n1. Carefully review the procedure and description text to understand all requirements and compliance standards.\n2. With the spDocumentId passed in, generate effective search queries based on key requirements in the procedure.\n3. Use these queries to retrieve relevant text from the Qdrant datastore that relates to compliance requirements.\n4. Systematically analyze the retrieved documents to:\n - Identify sections that meet the procedure's requirements\n - Identify gaps where requirements are not met\n - Document specific citations for both compliant and non-compliant findings\n5. Organize your findings into a structured JSON response with clear summaries and supporting evidence.\n6. Assign an appropriate confidence level to your analysis based on the quality and relevance of the evidence found.\n\n# Specifics\n- This compliance analysis is critically important to our organization's regulatory standing, and your thorough evaluation will directly impact our business operations.\n- When generating search queries, focus on specific requirements, standards, and action items mentioned in the procedure.\n- For each compliance or non-compliance finding, provide specific text citations including page numbers or section references.\n- Your expertise in identifying subtle compliance gaps is greatly valued and will help protect our organization from potential regulatory issues.\n- If certain requirements have no corresponding evidence in the documents, clearly indicate this as a gap in the non-compliance summary.\n- Ensure your confidence level accurately reflects the strength of evidence found in the documents.\n\n# Context\nYou are conducting an internal audit for a regulated organization that must demonstrate compliance with specific procedures. The Qdrant vector datastore contains the full text of all relevant documents that need to be evaluated against the procedure requirements. Your analysis will be used by compliance officers and management to address any gaps and prepare for potential external audits. The procedure document contains the standards against which all other documents must be measured, and your task is to determine whether these standards are being met based on the evidence in the documents.\n\n# Examples\n## Example 1\nQ:\n{\n \"output\": {\n \"procedure\": \"Analyze financial and operational highlights, identify key issues, and develop strategic recommendations.\",\n \"spDocumentId\": \"SP123456\",\n \"confidenceLevel\": 40,\n \"summaryOfCompliance\": \"The meeting transcript provided detailed insights into Apollo's financial performance and operational strategies. The summary of compliance includes a thorough analysis of sales trends, pricing adjustments, R&D projects, cost-saving measures, marketing efforts, and legal considerations.\",\n \"summaryOfNonCompliance\": \"There are no specific non-compliances noted in the provided transcript; however, potential risks such as market research gaps, cost-cutting strategies impacting innovation, and pending litigation pose challenges that need to be addressed.\",\n \"supportingTextCitations\": \"Based on the meeting transcript, key financial highlights include decreased sales of premium shoes, increased product prices by approximately 10%, cessation of the Phoneshoe project, labor reallocation, reduced postage and phone expenses, Superbowl commercial costs increase, and pending litigation.\"\n }\n}\n\n## Example 2\nQ:\n[\n {\n \"output\": {\n \"procedure\": \"Implement all recommendations from Charter for Corporate Responsibility in Environmental Protection (CREP) related to cement plants.\",\n \"spDocumentId\": \"SP-DOC-00123\",\n \"confidenceLevel\": 40,\n \"summaryOfCompliance\": \"All commitments made during the Public Hearing on July 18, 2012, will be satisfactorily implemented. A separate budget has been allocated for this purpose and progress reports will be submitted to the Ministry's Regional Office in Bangalore.\",\n \"summaryOfNonCompliance\": \"None were found.\",\n \"supportingTextCitations\": \"citation on page 3\"\n }\n }\n]\n\n# Notes\n- Return only a structured JSON response matching the required schema.\n- If any fields would be empty, provide \"No Additional Feedback\" as the value.\n- Place special emphasis on the accuracy of citations to ensure traceability of your findings.\n- Ensure your confidence level (0-100) accurately reflects the quality and completeness of evidence found.\n- Remember that both compliance and non-compliance findings are equally important for a comprehensive audit.",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"executeOnce": false,
"typeVersion": 2.1
},
{
"id": "d2cef8a0-0e15-4e06-9c5c-3eae0aa2fc93",
"name": "언어 모델 (AI 에이전트)",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
16,
496
],
"parameters": {
"model": "={{ $env.OLLAMA_CHAT_MODEL || \"qwen2.5:7b\" }}",
"options": {
"numCtx": 2048
}
},
"credentials": {
"ollamaApi": {
"id": "FLDXCk6C8NH00TJu",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "26ff7b08-8fd3-4ea6-baee-ca215382cffb",
"name": "관련 문서 청크 검색",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
192,
496
],
"parameters": {
"mode": "retrieve-as-tool",
"topK": 8,
"options": {
"searchFilterJson": "={\n \"should\": [\n {\n \"key\": \"metadata.documentId\",\n \"match\": { \"value\": \"{{ $('Format Procedure Payload').first().json.spDocumentId }}\" }\n }\n ]\n}"
},
"toolDescription": "Query document text from uploaded documents.",
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "={{ $env.QDRANT_COLLECTION || \"audit-docs\" }}",
"cachedResultName": "audit-docs"
}
},
"credentials": {
"qdrantApi": {
"id": "efX2OG1ibQmRYvUA",
"name": "QdrantApi account"
}
},
"typeVersion": 1.3
},
{
"id": "b5f941e6-699f-4146-9ac5-98881a6e350c",
"name": "쿼리 임베딩 생성",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
256,
640
],
"parameters": {
"model": "={{ $env.OLLAMA_EMBED_MODEL || \"nomic-embed-text:latest\" }}"
},
"credentials": {
"ollamaApi": {
"id": "FLDXCk6C8NH00TJu",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "0f05420f-46ff-4388-9ac4-1873769b27fa",
"name": "언어 모델 (구조화 출력)",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
560,
640
],
"parameters": {
"model": "={{ $env.OLLAMA_CHAT_MODEL || \"qwen2.5:7b\" }}",
"options": {}
},
"credentials": {
"ollamaApi": {
"id": "FLDXCk6C8NH00TJu",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "cc4d8ab4-4fb6-43e1-bac2-608d7cde44b9",
"name": "AI 응답 구문 분석",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
496,
496
],
"parameters": {
"autoFix": true,
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"required\": [\"confidenceLevel\",\"summaryOfCompliance\",\"summaryOfNonCompliance\",\"supportingTextCitations\"],\n \"properties\": {\n \"procedure\": {\"type\": \"string\"},\n \"spDocumentId\": {\"type\": \"string\"},\n \"confidenceLevel\": {\"type\": \"integer\"},\n \"summaryOfCompliance\": {\"type\": \"string\"},\n \"summaryOfNonCompliance\": {\"type\": \"string\"},\n \"supportingTextCitations\": {\"type\": \"string\"}\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "d67b5769-ef38-4e94-b0eb-9052c43dd113",
"name": "준수성 보고서 반환",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
608,
288
],
"parameters": {
"options": {},
"respondWith": "allIncomingItems"
},
"typeVersion": 1.4
},
{
"id": "a07e2a08-6304-4abf-81b0-d2ab0ae90c5d",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-464,
-480
],
"parameters": {
"content": "### 1. Start: Upload Document\n* Via Webhook: Audit Document Upload\n* Accepts PDF/DOCX file\n* Optionally fetches from Microsoft Graph"
},
"typeVersion": 1
},
{
"id": "5bfb1299-0b6b-4c45-abce-f2c725c22581",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
-480
],
"parameters": {
"content": "### 2. Document Preprocessing\n* Clear Old Vectors (remove previous embeddings for same file)\n* Extract PDF Text\n* Split into chunks for embedding\n* Generate embeddings → Insert into Qdrant"
},
"typeVersion": 1
},
{
"id": "3b49fd17-f85d-4ad4-9ad3-e8274faf9fef",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-464,
80
],
"parameters": {
"content": "### 3. Procedure Submission\n* Webhook: Procedure Submission\n* Accepts JSON payload (procedure, description, spDocumentId)\n* Payload formatted → passed to AI"
},
"typeVersion": 1
},
{
"id": "cb5b5349-47d3-4c01-ac2a-ea7a9b596503",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
80
],
"parameters": {
"content": "### 4. AI Compliance Validation\n* Retrieve Relevant Document Chunks from Qdrant\n* AI Compliance Validator uses LLM + embeddings\n* Output parsed & structured into JSON"
},
"typeVersion": 1
},
{
"id": "d6b8d7c6-d14d-4625-97de-ac6fdd792156",
"name": "스티키 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
80
],
"parameters": {
"content": "### 5. Return Results\n* Structured compliance report returned to webhook caller"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"a0be08c7-54b0-41ad-9b8a-326601c0e6b8": {
"main": [
[
{
"node": "0e2b9829-03bf-4dfb-b557-94d79f13c5d7",
"type": "main",
"index": 0
}
]
]
},
"cc4d8ab4-4fb6-43e1-bac2-608d7cde44b9": {
"ai_outputParser": [
[
{
"node": "a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"bf8f5941-db69-4db3-b344-183e23b010ca": {
"main": [
[
{
"node": "1970eb10-01aa-4108-b686-47e6fa955cf8",
"type": "main",
"index": 0
}
]
]
},
"22c5f212-aeca-46d1-a684-41147efc6547": {
"main": [
[
{
"node": "35b34dc7-27f0-446d-b052-1bf7eb990ce2",
"type": "main",
"index": 0
}
]
]
},
"250e006a-d815-475e-a0f6-daa88c0b2a71": {
"ai_document": [
[
{
"node": "0e2b9829-03bf-4dfb-b557-94d79f13c5d7",
"type": "ai_document",
"index": 0
}
]
]
},
"53151c0a-7fbe-4a35-a9a9-9d082842f05f": {
"ai_textSplitter": [
[
{
"node": "250e006a-d815-475e-a0f6-daa88c0b2a71",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa": {
"main": [
[
{
"node": "d67b5769-ef38-4e94-b0eb-9052c43dd113",
"type": "main",
"index": 0
}
]
]
},
"1970eb10-01aa-4108-b686-47e6fa955cf8": {
"main": [
[
{
"node": "a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa",
"type": "main",
"index": 0
}
]
]
},
"b5f941e6-699f-4146-9ac5-98881a6e350c": {
"ai_embedding": [
[
{
"node": "26ff7b08-8fd3-4ea6-baee-ca215382cffb",
"type": "ai_embedding",
"index": 0
}
]
]
},
"d2cef8a0-0e15-4e06-9c5c-3eae0aa2fc93": {
"ai_languageModel": [
[
{
"node": "a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"a9520145-7f98-4f22-a477-cb24caa599b2": {
"main": [
[
{
"node": "a0be08c7-54b0-41ad-9b8a-326601c0e6b8",
"type": "main",
"index": 0
}
]
]
},
"c8a629c8-80d6-484f-ade6-e3a969c1a353": {
"ai_embedding": [
[
{
"node": "0e2b9829-03bf-4dfb-b557-94d79f13c5d7",
"type": "ai_embedding",
"index": 0
}
]
]
},
"35b34dc7-27f0-446d-b052-1bf7eb990ce2": {
"main": [
[
{
"node": "a9520145-7f98-4f22-a477-cb24caa599b2",
"type": "main",
"index": 0
}
]
]
},
"26ff7b08-8fd3-4ea6-baee-ca215382cffb": {
"ai_tool": [
[
{
"node": "a9d11ff6-6cf0-4efa-a120-b7d86ecb48fa",
"type": "ai_tool",
"index": 0
}
]
]
},
"0f05420f-46ff-4388-9ac4-1873769b27fa": {
"ai_languageModel": [
[
{
"node": "cc4d8ab4-4fb6-43e1-bac2-608d7cde44b9",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - AI RAG, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Gmail, GPT-4 및 벡터 지식 베이스를 사용한 자동화된 고객 지원 시스템
Gmail, GPT-4 및 벡터 지식 베이스를 사용한 자동화된 고객 지원 시스템
If
Set
Code
+
If
Set
Code
32 노드Khair Ahammed
AI RAG
컨텍스트 혼합 RAG AI 콘텐츠
Google Drive에서 Supabase 상황 벡터 데이터베이스로 동기화, RAG 애플리케이션 사용
If
Set
Code
+
If
Set
Code
76 노드Michael Taleb
AI RAG
dian-memo_03 내보내기
AI 음성 및 텍스트 메모 - LINE 메시지, Supabase 벡터 데이터베이스 및 Gmail 통합
If
Set
Code
+
If
Set
Code
30 노드kote2
AI RAG
[템플릿] AI 반려동물 가게 v8
🐶 AI 펫 샵 어시스턴트 - GPT-4o, Google 캘린더 및 WhatsApp/Instagram/Facebook 통합
If
N8n
Set
+
If
N8n
Set
244 노드Amanda Benks
영업
AI 대리인 레스토랑 [템플릿]
🤖 WhatsApp, 인스타그램, 메신저의 AI 레스토랑 도우미
If
N8n
Set
+
If
N8n
Set
239 노드Amanda Benks
기타
콘텐츠 분석 및 통찰력을 위한 GPT-4, Claude 및 Apify를 사용한 웹 연구 자동화
GPT-4, Claude 및 Apify를 사용한 콘텐츠 분석 및 인사이트를 위한 웹 리서치 자동화
If
Set
Code
+
If
Set
Code
42 노드Peter Zendzian
시장 조사