Mi diccionario_Complejo
Este es unPersonal Productivity, Multimodal AIflujo de automatización del dominio deautomatización que contiene 22 nodos.Utiliza principalmente nodos como If, Set, Code, Webhook, Supabase. Crear un diccionario literario inglés-alemán-chino utilizando GPT-4o-mini y Supabase
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •URL y Clave de API de Supabase
- •Clave de API de OpenAI
Nodos utilizados (22)
Categoría
{
"id": "6tW6bM6XI6pqrQgn",
"meta": {
"instanceId": "91e9d2c12dbfcdc2cb30d3665a714f8a4ee901c9fd6527015006b21570a93b53",
"templateCredsSetupCompleted": true
},
"name": "My dictionary_complext",
"tags": [],
"nodes": [
{
"id": "87575fd4-3eda-4e20-8d6b-82a1ec37f1d5",
"name": "Agentee de IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-600,
-360
],
"parameters": {
"text": "={{ $json.body.word }}",
"options": {
"systemMessage": "Purpose:\nYou are a bilingual dictionary assistant that helps users understand English and German words in the context of literature. It provides Chinese definitions and three literary-style sentence examples for each word, helping users deepen their vocabulary and reading comprehension.\n\nBehavior Guidelines:\n\nInput Handling:\n\nAccept single words in either English or German.\n\nDetect the language automatically.\n\nIf ambiguous, ask the user to clarify.\n\nResponse Format:\n\nLanguage: State the input language.\n\nWord: Bold the input word.\n\nPart of Speech: Indicate (e.g., noun, verb, adjective, etc.).\n\nChinese Meaning: Provide a concise and literary-relevant translation in Simplified Chinese.\n\nExamples:\n\nProvide three example sentences.\n\nThe sentences should be literary in tone or style (poetic, novelistic, expressive).\n\nProvide translations of the examples in Simplified Chinese beneath each.\n\nFocus on Literary Use:\n\nPrioritize literary, archaic, or metaphorical meanings when available.\n\nIf a word has multiple meanings, emphasize the one most relevant to literature.\n\nTone:\n\nKeep responses clear, elegant, and not overly academic.\n\nIf a word has rich etymology or symbolism, briefly mention it.\n\n🧪 Example Interaction\nUser Input: serenity\n\nYour Response:\n\nLanguage: English\nWord: serenity\nPart of Speech: Noun\nChinese Meaning: 宁静;安详;心灵的平和(常用于描写自然或人物的内心状态)\n\nExamples:\n\nThe serenity of the moonlit lake whispered secrets to the wind.\n月光湖面的宁静向微风低语着秘密。\n\nShe wore her serenity like a veil, untouched by the chaos around her.\n她带着一种宁静的气质,如面纱般将纷乱隔绝在外。\n\nIn the quiet of dawn, serenity settled over the forest like a benediction.\n黎明的静谧中,宁静如祝福般洒落在森林之上。"
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "4547dfac-fb63-4950-8413-c93d4560f05e",
"name": "Supabase",
"type": "n8n-nodes-base.supabase",
"position": [
-360,
420
],
"parameters": {
"tableId": "Dict",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "Words",
"fieldValue": "={{ $json.body.word }}"
},
{
"fieldId": "chineseMeaning",
"fieldValue": "={{ $json.body.chineseMeaning }}"
},
{
"fieldId": "Examples",
"fieldValue": "={{ $json.body.examples }}"
}
]
}
},
"credentials": {
"supabaseApi": {
"id": "ot0Q4Due2nUmSxKx",
"name": "Supabase account"
}
},
"typeVersion": 1
},
{
"id": "e21676fe-0d24-4b15-8121-f6b0285cc5f4",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
-140,
-360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "71dec079-93c3-44c1-a798-a2c9df48cff5",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('AI Agent').first().json.output }}",
"rightValue": "It seems "
},
{
"id": "52f131e5-69c7-4862-864f-76f336cf46a4",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('AI Agent').first().json.output }}",
"rightValue": "unclear"
},
{
"id": "bc103838-6de4-4f72-bd67-03ea710c607f",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('AI Agent').first().json.output }}",
"rightValue": "please provide"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "eb58c75b-d4f3-4597-8b93-cd769a7e880d",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2240,
-660
],
"parameters": {
"width": 540,
"height": 1120,
"content": "# Literary Dictionary Assistant \n\nThis n8n template creates a sophisticated bilingual dictionary that provides literary-style definitions and examples for English and German words with Chinese translations.\n\nUse cases are many: Language learning apps, reading comprehension tools, literary analysis, translation assistance, and vocabulary building for creative writing!\n\n## How it works\n\n* Input word is received via webhook and processed by the AI Agent with a specialized literary dictionary prompt.\n* OpenAI GPT-4o-mini generates comprehensive definitions with part of speech, Chinese meanings, and three literary-style example sentences.\n* Response formatting extracts structured data (word, meaning, examples with translations) from the AI output.\n* Quality control checks for unclear responses and returns appropriate error messages for invalid inputs.\n* Valid responses are simultaneously returned to the user and saved to Supabase database.\n* The workflow provides clean JSON API responses perfect for integration with apps or websites.\n\n## Good to know\n\n* The workflow automatically detects input language (English/German) and handles error cases gracefully.\n* All lookups are saved to Supabase database for building a personal vocabulary collection over time.\n\n## Requirements\n\n* OpenAI account with API access for GPT-4o-mini\n* Supabase account for database storage\n* Basic understanding of webhook APIs for integration\n\n## Customizing this workflow\n\n* Modify the system prompt to support additional languages or change the literary style (academic, casual, business-focused).\n* Add user authentication to create personalized vocabulary collections.\n* Integrate with reading apps, language learning platforms, or writing tools."
},
"typeVersion": 1
},
{
"id": "7300514a-b5ea-40d0-8a29-02a1586cd124",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1140,
-600
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 1. Webhook Receiver\n\nReceives word requests via HTTP POST. It captures the input word to be processed and triggers the entire workflow chain.\n\n**I use this Webhook to receive word input by user from a HTML web app**"
},
"typeVersion": 1
},
{
"id": "a8b8f6f8-9dd3-465c-8a30-66132144e2e3",
"name": "Openai traducir y dar ejemplos",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-580,
-180
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "sOk8ZfXyjEGfWIno",
"name": "OpenAi account "
}
},
"typeVersion": 1.2
},
{
"id": "3b794b96-5195-4771-bb5f-ea0ea99762a2",
"name": "Responder al usuario",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
820,
-500
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "6c4ce691-a8c5-4ff4-8cd5-1103af2d34ad",
"name": "Responder al usuario1",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
820,
-300
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={{ JSON.stringify($('Format response').first().json) }}"
},
"typeVersion": 1.2
},
{
"id": "2e551b35-2292-4f47-ab5d-d1e658d18adc",
"name": "Formatear mensaje de error",
"type": "n8n-nodes-base.set",
"position": [
400,
-500
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "{\n \"error\": true,\n \"message\": \"Please provide a specific word in English or German. The input was not recognized as a valid word.\",\n \"word\": \"{{ $('Webhook').first().json.body.word }}\"\n}"
},
"typeVersion": 3.4
},
{
"id": "69ca7f02-6991-4ef9-bc1e-f900507838ab",
"name": "Formatear respuesta",
"type": "n8n-nodes-base.code",
"position": [
400,
-300
],
"parameters": {
"jsCode": "// Get the AI response from the previous node\nconst aiResponse = $('AI Agent').first().json.output;\n\n// Split the response into lines for parsing\nconst lines = aiResponse.split('\\n').filter(line => line.trim() !== '');\n\nlet word = '';\nlet chineseMeaning = '';\nlet examples = [];\n\n// Parse each line to extract the needed information\nlet inExamples = false;\nlet currentExample = '';\nlet currentTranslation = '';\n\nfor (let i = 0; i < lines.length; i++) {\n const trimmedLine = lines[i].trim();\n \n // Extract the word (looking for \"Word: **word**\" format)\n if (trimmedLine.startsWith('Word:')) {\n // Remove \"Word:\" and extract text between ** markers\n word = trimmedLine.replace('Word:', '').trim();\n // Remove bold markdown formatting if present\n word = word.replace(/\\*\\*/g, '').trim();\n }\n \n // Extract Chinese meaning\n if (trimmedLine.startsWith('Chinese Meaning:')) {\n chineseMeaning = trimmedLine.replace('Chinese Meaning:', '').trim();\n }\n \n // Check if we've reached the Examples section\n if (trimmedLine === 'Examples:' || trimmedLine.startsWith('Examples:')) {\n inExamples = true;\n continue;\n }\n \n // Parse examples when we're in the examples section\n if (inExamples && trimmedLine) {\n // Check if this line is an English sentence (not a Chinese translation)\n // Chinese translations typically start with Chinese characters\n const isChineseTranslation = /^[\\u4e00-\\u9fff]/.test(trimmedLine);\n \n if (!isChineseTranslation && trimmedLine.length > 10) {\n // This is likely an English example sentence\n // Save the previous example if we have both parts\n if (currentExample && currentTranslation) {\n examples.push({\n sentence: currentExample,\n translation: currentTranslation\n });\n }\n \n // Start a new example\n currentExample = trimmedLine;\n currentTranslation = '';\n } else if (isChineseTranslation && currentExample) {\n // This is the Chinese translation for the current example\n currentTranslation = trimmedLine;\n }\n }\n}\n\n// Don't forget to add the last example if it exists\nif (currentExample && currentTranslation) {\n examples.push({\n sentence: currentExample,\n translation: currentTranslation\n });\n}\n\n// Return the structured data\nreturn {\n word: word,\n chineseMeaning: chineseMeaning,\n examples: examples\n};"
},
"typeVersion": 2
},
{
"id": "6c366b3a-fb16-468a-8615-a86c58398378",
"name": "Disparador Webhook para obtener la entrada de palabra del usuario",
"type": "n8n-nodes-base.webhook",
"position": [
-940,
-360
],
"webhookId": "e50639d5-af5b-4523-864a-cb123250887f",
"parameters": {
"path": "e50639d5-af5b-4523-864a-cb123250887f",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "47059065-9d8c-40a0-8728-84e7030bab73",
"name": "Disparador Webhook para guardar palabras en Supabase",
"type": "n8n-nodes-base.webhook",
"position": [
-940,
420
],
"webhookId": "e50639d5-af5b-4523-864a-cb123250887f",
"parameters": {
"path": "e50639d5-af5b-4523-864a-cb123250887f",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "6c098436-bbee-416d-9838-b57bb6bf71b7",
"name": "Mensaje de respuesta",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
120,
420
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={\n \"success\": true,\n \"message\": \"Word saved successfully\"\n}"
},
"typeVersion": 1.2
},
{
"id": "92eff8ea-f97e-44dc-b902-f384d89ebe92",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-680,
-20
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 2. AI Agent\n\nI use specialized literary dictionary prompt. It will auto-detect language (English/German) and then generate comprehensive definitions. It will also create 3 literary-style example sentences."
},
"typeVersion": 1
},
{
"id": "62945248-fb2d-4a4c-8479-6f7f3d6b1d75",
"name": "Nota adhesiva3",
"type": "n8n-nodes-base.stickyNote",
"position": [
300,
-140
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 4. Data Structure Parser\n\nIt extracts structured data from AI output and organizes: word, part of speech, meanings\nFormats examples with translations\n"
},
"typeVersion": 1
},
{
"id": "9b3eb8d6-9210-466e-885f-3015c1c97854",
"name": "Nota adhesiva4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-300,
-640
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 3. Error Handler \n\nThis if node checks for unclear or invalid responses and returns appropriate error messages\n"
},
"typeVersion": 1
},
{
"id": "8a7c23e1-d537-491d-b4c8-e7b933e3709d",
"name": "Nota adhesiva5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1620,
420
],
"parameters": {
"color": 3,
"width": 440,
"height": 100,
"content": "\n\n## Workflow for data storage"
},
"typeVersion": 1
},
{
"id": "55d3c004-cb9a-41cc-884e-829785a8ffe4",
"name": "Nota adhesiva6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1620,
-360
],
"parameters": {
"color": 3,
"width": 440,
"height": 100,
"content": "\n\n## Workflow for looking up words\n"
},
"typeVersion": 1
},
{
"id": "07bc4443-1d63-4c29-8cbd-386522c73ed2",
"name": "Nota adhesiva7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-520,
620
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 2. Supabase Integration\n\nIt saves all valid lookups to database and builds personal structured dictionary data.\n"
},
"typeVersion": 1
},
{
"id": "75a5c8ec-f15c-48dd-b140-2eaee66cd85b",
"name": "Nota adhesiva8",
"type": "n8n-nodes-base.stickyNote",
"position": [
380,
400
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 3. Webhook Response Node\n\nIt completes the workflow by sending the final response back to the requesting user: \"Word saved successfully\".\n"
},
"typeVersion": 1
},
{
"id": "a05d401b-792f-437d-bdd1-f08285e5ee9f",
"name": "Nota adhesiva9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1120,
620
],
"parameters": {
"color": 4,
"width": 440,
"height": 220,
"content": "\n\n## 1. Save Words Trigger\n\nWhen the user clicks the \" Save to vocabulary list\" button, it will trigger this workflow and the word will be saved to Supabase.\n"
},
"typeVersion": 1
},
{
"id": "27e60f98-b4ea-4b29-a2d2-c53b6b786d96",
"name": "Nota adhesiva10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-500
],
"parameters": {
"color": 4,
"width": 440,
"height": 320,
"content": "\n\n## 5. Webhook Response Node\n\nIt completes this workflow by sending the final response back to the requesting user. It is either\n\n* includes the complete dictionary data (word, definitions, examples, translations).\n\nor\n\n* \"Please provide a specific word in English or German. The input was not recognized as a valid word.\"\n\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "03878a15-0672-4cd3-baf8-40b47c357052",
"connections": {
"e21676fe-0d24-4b15-8121-f6b0285cc5f4": {
"main": [
[
{
"node": "2e551b35-2292-4f47-ab5d-d1e658d18adc",
"type": "main",
"index": 0
}
],
[
{
"node": "69ca7f02-6991-4ef9-bc1e-f900507838ab",
"type": "main",
"index": 0
}
]
]
},
"Agente de IA": {
"main": [
[
{
"node": "e21676fe-0d24-4b15-8121-f6b0285cc5f4",
"type": "main",
"index": 0
}
]
]
},
"4547dfac-fb63-4950-8413-c93d4560f05e": {
"main": [
[
{
"node": "6c098436-bbee-416d-9838-b57bb6bf71b7",
"type": "main",
"index": 0
}
]
]
},
"69ca7f02-6991-4ef9-bc1e-f900507838ab": {
"main": [
[
{
"node": "6c4ce691-a8c5-4ff4-8cd5-1103af2d34ad",
"type": "main",
"index": 0
}
]
]
},
"6c4ce691-a8c5-4ff4-8cd5-1103af2d34ad": {
"main": [
[]
]
},
"2e551b35-2292-4f47-ab5d-d1e658d18adc": {
"main": [
[
{
"node": "3b794b96-5195-4771-bb5f-ea0ea99762a2",
"type": "main",
"index": 0
}
]
]
},
"a8b8f6f8-9dd3-465c-8a30-66132144e2e3": {
"ai_languageModel": [
[
{
"node": "Agente de IA",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Webhook para obtener la entrada de palabra del usuario": {
"main": [
[
{
"node": "Agente de IA",
"type": "main",
"index": 0
}
]
]
},
"Webhook para guardar palabras en Supabase": {
"main": [
[
{
"node": "4547dfac-fb63-4950-8413-c93d4560f05e",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Productividad personal, IA Multimodal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Xiaoyuan Zhang
@xyzhangCompartir este flujo de trabajo