Files
n8n-compose/n8n-workflows/workflow-c-kb-update.json

989 lines
24 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"name": "Workflow C Knowledge Base Auto-Update",
"description": "Triggered by Workflow B when solution is executed. Generates embeddings, inserts new KB entries, updates existing entry frequencies, and logs all operations.",
"nodes": [
{
"id": "uuid-webhook-trigger-c-1",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
250,
200
],
"parameters": {
"path": "workflow-c",
"httpMethod": "POST",
"options": {}
},
"webhookId": "workflow-c-webhook-id"
},
{
"id": "uuid-validate-payload-c-1",
"name": "Validate Payload",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
450,
200
],
"parameters": {
"conditions": {
"number": [
{
"comparator": "exists",
"value1": "={{ $json.ticket_id }}",
"value2": ""
},
{
"comparator": "exists",
"value1": "={{ $json.ai_suggestion }}",
"value2": ""
}
]
},
"combineOperation": "AND"
}
},
{
"id": "uuid-parse-suggestion-c-1",
"name": "Parse AI Suggestion",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
650,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "ticket_id",
"value": "={{ $json.ticket_id }}",
"type": "string"
},
{
"name": "conversation_id",
"value": "={{ $json.conversation_id }}",
"type": "string"
},
{
"name": "ai_suggestion_parsed",
"value": "={{ typeof $json.ai_suggestion === 'string' ? JSON.parse($json.ai_suggestion) : $json.ai_suggestion }}",
"type": "object"
},
{
"name": "execution_type",
"value": "={{ $json.execution_type }}",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ $json.timestamp || new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-extract-kb-fields-c-1",
"name": "Extract KB Fields",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
850,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "problem_text",
"value": "={{ $json.ai_suggestion_parsed.problem_text || $json.ai_suggestion_parsed.problem || $json.subject || 'Unknown problem' }}",
"type": "string"
},
{
"name": "kategorie",
"value": "={{ $json.ai_suggestion_parsed.kategorie || $json.ai_suggestion_parsed.category || 'Uncategorized' }}",
"type": "string"
},
{
"name": "lösung",
"value": "={{ $json.ai_suggestion_parsed.lösung || $json.ai_suggestion_parsed.solution || 'No solution provided' }}",
"type": "string"
},
{
"name": "embedding_input",
"value": "={{ $json.kategorie + ' | ' + $json.problem_text }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-litellm-embedding-c-1",
"name": "LiteLLM Generate Embedding",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
1050,
200
],
"parameters": {
"authentication": "none",
"url": "={{ $env.LITELLM_API_URL || 'http://litellm:4000' }}/v1/embeddings",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ {\n \"model\": \"text-embedding-3-small\",\n \"input\": $json.embedding_input\n} }}"
}
},
{
"id": "uuid-extract-embedding-c-1",
"name": "Extract Embedding Vector",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
1250,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "embedding_vector",
"value": "={{ $json.data[0].embedding }}",
"type": "object"
},
{
"name": "embedding_dim",
"value": "={{ $json.data[0].embedding.length }}",
"type": "number"
}
]
}
}
},
{
"id": "uuid-milvus-insert-c-1",
"name": "Milvus Insert New KB Entry",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
1450,
200
],
"parameters": {
"authentication": "none",
"url": "={{ $env.MILVUS_API_URL || 'http://milvus:19530' }}/v1/vector_db/knowledge_base/insert",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ {\n \"entries\": [\n {\n \"id\": \"kb_\" + $json.ticket_id + \"_\" + Date.now(),\n \"problem_text\": $json.problem_text,\n \"kategorie\": $json.kategorie,\n \"lösung\": $json.lösung,\n \"häufigkeit\": 1,\n \"embedding\": $json.embedding_vector,\n \"timestamp\": new Date().toISOString(),\n \"ticket_id\": $json.ticket_id,\n \"conversation_id\": $json.conversation_id,\n \"source\": \"workflow-c\",\n \"status\": \"ACTIVE\"\n }\n ]\n} }}"
}
},
{
"id": "uuid-extract-insert-result-c-1",
"name": "Extract Insert Result",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
1650,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "kb_entry_id",
"value": "={{ $json.ids ? $json.ids[0] : 'kb_' + $json.ticket_id + '_' + Date.now() }}",
"type": "string"
},
{
"name": "insert_status",
"value": "={{ $json.status || 'SUCCESS' }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-milvus-query-similar-c-1",
"name": "Milvus Query Similar Entries",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
1850,
200
],
"parameters": {
"authentication": "none",
"url": "={{ $env.MILVUS_API_URL || 'http://milvus:19530' }}/v1/vector_db/knowledge_base/search",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ {\n \"vector\": $json.embedding_vector,\n \"limit\": 5,\n \"params\": {\n \"nprobe\": 10\n },\n \"expr\": \"status == 'ACTIVE' AND kategorie == '\" + $json.kategorie + \"'\"\n} }}",
"options": {
"otherOptions": {
"allowUnauthorizedCerts": true
}
}
}
},
{
"id": "uuid-filter-similar-high-score-c-1",
"name": "Filter Similar > 0.85",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
2050,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "similar_entries",
"value": "={{ ($json.results || []).filter(r => r.distance >= 0.85) }}",
"type": "object"
}
]
}
}
},
{
"id": "uuid-check-similar-entries-c-1",
"name": "Check If Similar Exist",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
2250,
200
],
"parameters": {
"conditions": {
"number": [
{
"comparator": "gt",
"value1": "={{ $json.similar_entries.length }}",
"value2": "0"
}
]
}
}
},
{
"id": "uuid-milvus-update-frequency-c-1",
"name": "Milvus Update Frequency",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
2450,
100
],
"parameters": {
"authentication": "none",
"url": "={{ $env.MILVUS_API_URL || 'http://milvus:19530' }}/v1/vector_db/knowledge_base/update",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ {\n \"updates\": $json.similar_entries.map(entry => ({\n \"id\": entry.id,\n \"häufigkeit\": (entry.häufigkeit || 1) + 1,\n \"last_updated\": new Date().toISOString()\n }))\n} }}"
}
},
{
"id": "uuid-extract-frequency-update-c-1",
"name": "Extract Frequency Update Result",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
2650,
100
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "frequency_update_count",
"value": "={{ $json.modified_count || $json.similar_entries.length || 0 }}",
"type": "number"
}
]
}
}
},
{
"id": "uuid-postgres-insert-audit-c-1",
"name": "PostgreSQL Insert Audit Log",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2,
"position": [
2850,
200
],
"parameters": {
"operation": "insert",
"schema": "public",
"table": "knowledge_base_updates",
"columns": {
"columns": [
{
"column": "ticket_id",
"type": "string",
"value": "={{ $json.ticket_id }}"
},
{
"column": "conversation_id",
"type": "string",
"value": "={{ $json.conversation_id }}"
},
{
"column": "problem_text",
"type": "string",
"value": "={{ $json.problem_text }}"
},
{
"column": "kategorie",
"type": "string",
"value": "={{ $json.kategorie }}"
},
{
"column": "lösung",
"type": "string",
"value": "={{ $json.lösung }}"
},
{
"column": "kb_entry_id",
"type": "string",
"value": "={{ $json.kb_entry_id }}"
},
{
"column": "embedding_dim",
"type": "number",
"value": "={{ $json.embedding_dim }}"
},
{
"column": "frequency_updates_count",
"type": "number",
"value": "={{ $json.frequency_update_count || 0 }}"
},
{
"column": "status",
"type": "string",
"value": "EXECUTED"
},
{
"column": "source",
"type": "string",
"value": "workflow-c"
},
{
"column": "created_at",
"type": "string",
"value": "={{ new Date().toISOString() }}"
},
{
"column": "updated_at",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"credentials": {
"postgres": "PostgreSQL Connection"
}
},
{
"id": "uuid-success-response-c-1",
"name": "Success Response",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
3050,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "success",
"value": true,
"type": "boolean"
},
{
"name": "message",
"value": "Knowledge base entry created and frequencies updated successfully",
"type": "string"
},
{
"name": "kb_entry_id",
"value": "={{ $json.kb_entry_id }}",
"type": "string"
},
{
"name": "similar_entries_updated",
"value": "={{ $json.frequency_update_count || 0 }}",
"type": "number"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-skip-frequency-update-c-1",
"name": "Skip Frequency Update",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
2450,
350
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "frequency_update_count",
"value": "0",
"type": "number"
}
]
}
}
},
{
"id": "uuid-merge-frequency-result-c-1",
"name": "Merge Frequency Result",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
2650,
250
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "frequency_update_count",
"value": "={{ $json.frequency_update_count || 0 }}",
"type": "number"
}
]
}
}
},
{
"id": "uuid-error-log-embedding-c-1",
"name": "Error: Embedding Generation Failed",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
1050,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "error_type",
"value": "EMBEDDING_GENERATION_FAILED",
"type": "string"
},
{
"name": "error_message",
"value": "={{ $error.message }}",
"type": "string"
},
{
"name": "ticket_id",
"value": "={{ $json.ticket_id }}",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-error-log-milvus-c-1",
"name": "Error: Milvus Insert Failed",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
1450,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "error_type",
"value": "MILVUS_INSERT_FAILED",
"type": "string"
},
{
"name": "error_message",
"value": "={{ $error.message }}",
"type": "string"
},
{
"name": "ticket_id",
"value": "={{ $json.ticket_id }}",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-error-log-postgres-c-1",
"name": "Error: PostgreSQL Audit Log Failed",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
2850,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "error_type",
"value": "POSTGRES_AUDIT_FAILED",
"type": "string"
},
{
"name": "error_message",
"value": "={{ $error.message }}",
"type": "string"
},
{
"name": "ticket_id",
"value": "={{ $json.ticket_id }}",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-postgres-error-handler-c-1",
"name": "PostgreSQL Insert Error Handler",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2,
"position": [
3050,
500
],
"parameters": {
"operation": "insert",
"schema": "public",
"table": "knowledge_base_errors",
"columns": {
"columns": [
{
"column": "ticket_id",
"type": "string",
"value": "={{ $json.ticket_id }}"
},
{
"column": "error_type",
"type": "string",
"value": "={{ $json.error_type }}"
},
{
"column": "error_message",
"type": "string",
"value": "={{ $json.error_message }}"
},
{
"column": "workflow",
"type": "string",
"value": "workflow-c"
},
{
"column": "created_at",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"credentials": {
"postgres": "PostgreSQL Connection"
}
},
{
"id": "uuid-error-response-c-1",
"name": "Error Response",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
3250,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "success",
"value": false,
"type": "boolean"
},
{
"name": "error_type",
"value": "={{ $json.error_type }}",
"type": "string"
},
{
"name": "error_message",
"value": "={{ $json.error_message }}",
"type": "string"
},
{
"name": "ticket_id",
"value": "={{ $json.ticket_id }}",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
},
{
"id": "uuid-validation-failed-c-1",
"name": "Validation Failed",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
450,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "success",
"value": false,
"type": "boolean"
},
{
"name": "error_type",
"value": "VALIDATION_FAILED",
"type": "string"
},
{
"name": "error_message",
"value": "Missing required fields: ticket_id or ai_suggestion",
"type": "string"
},
{
"name": "timestamp",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
}
}
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Validate Payload",
"index": 0
}
]
]
},
"Validate Payload": {
"main": [
[
{
"node": "Parse AI Suggestion",
"index": 0
}
],
[
{
"node": "Validation Failed",
"index": 0
}
]
]
},
"Parse AI Suggestion": {
"main": [
[
{
"node": "Extract KB Fields",
"index": 0
}
]
]
},
"Extract KB Fields": {
"main": [
[
{
"node": "LiteLLM Generate Embedding",
"index": 0
}
]
]
},
"LiteLLM Generate Embedding": {
"main": [
[
{
"node": "Extract Embedding Vector",
"index": 0
}
],
[
{
"node": "Error: Embedding Generation Failed",
"index": 0
}
]
]
},
"Extract Embedding Vector": {
"main": [
[
{
"node": "Milvus Insert New KB Entry",
"index": 0
}
]
]
},
"Milvus Insert New KB Entry": {
"main": [
[
{
"node": "Extract Insert Result",
"index": 0
}
],
[
{
"node": "Error: Milvus Insert Failed",
"index": 0
}
]
]
},
"Extract Insert Result": {
"main": [
[
{
"node": "Milvus Query Similar Entries",
"index": 0
}
]
]
},
"Milvus Query Similar Entries": {
"main": [
[
{
"node": "Filter Similar > 0.85",
"index": 0
}
]
]
},
"Filter Similar > 0.85": {
"main": [
[
{
"node": "Check If Similar Exist",
"index": 0
}
]
]
},
"Check If Similar Exist": {
"main": [
[
{
"node": "Milvus Update Frequency",
"index": 0
}
],
[
{
"node": "Skip Frequency Update",
"index": 0
}
]
]
},
"Milvus Update Frequency": {
"main": [
[
{
"node": "Extract Frequency Update Result",
"index": 0
}
]
]
},
"Extract Frequency Update Result": {
"main": [
[
{
"node": "Merge Frequency Result",
"index": 0
}
]
]
},
"Skip Frequency Update": {
"main": [
[
{
"node": "Merge Frequency Result",
"index": 0
}
]
]
},
"Merge Frequency Result": {
"main": [
[
{
"node": "PostgreSQL Insert Audit Log",
"index": 0
}
]
]
},
"PostgreSQL Insert Audit Log": {
"main": [
[
{
"node": "Success Response",
"index": 0
}
],
[
{
"node": "Error: PostgreSQL Audit Log Failed",
"index": 0
}
]
]
},
"Success Response": {
"main": [
[]
]
},
"Error: Embedding Generation Failed": {
"main": [
[
{
"node": "PostgreSQL Insert Error Handler",
"index": 0
}
]
]
},
"Error: Milvus Insert Failed": {
"main": [
[
{
"node": "PostgreSQL Insert Error Handler",
"index": 0
}
]
]
},
"Error: PostgreSQL Audit Log Failed": {
"main": [
[
{
"node": "PostgreSQL Insert Error Handler",
"index": 0
}
]
]
},
"PostgreSQL Insert Error Handler": {
"main": [
[
{
"node": "Error Response",
"index": 0
}
]
]
},
"Error Response": {
"main": [
[]
]
},
"Validation Failed": {
"main": [
[]
]
}
}
}