AutomationFlowsAI & RAG › AI Chat Agent with Long-Term Memory

AI Chat Agent with Long-Term Memory

Original n8n title: Long Term Memory Demo

Long Term Memory Demo. Uses chatTrigger, agent, lmChatOpenAi, airtableTool. Chat trigger; 8 nodes.

Chat trigger trigger★★★☆☆ complexityAI-powered8 nodesChat TriggerAgentOpenAI ChatAirtable ToolAirtableMemory Buffer Window
AI & RAG Trigger: Chat trigger Nodes: 8 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow follows the Agent → Airtable recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Long Term Memory Demo",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        80,
        -40
      ],
      "id": "76da89fb-11ce-4030-aa38-cf436afecbbc",
      "name": "When chat message received"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "=# ROLE\nYou are a friendly AI assistant.\nYou are currently talking to Leon.\n\n# RULES\nWhen a user sends a new message, decide if the user provided any noteworthy information that should be stored in memory. If so, call the Save Memory tool to store this information in memory. DO NOT inform the user that this information was stored in memory.  Simply continue to answer the question or executing the next tasks.\n\n# Tools\n## Save Memory\nUse this tool to store information about the user. Extract and summarize interesting information from the user message and pass it to this tool.\n\n# Memories\nHere are the last noteworthy memories that you've collected from the user, including the date and time this information was collected.\n!! IMPORTANT!\nThink carefully about your responses and take the user's preferences into account!\nAlso consider the date and time that a memory was shared in order to respond with the most up to date information.\n\n{{ $json.memories.toJsonString() }}"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        800,
        -20
      ],
      "id": "8c867c28-6514-4869-be8d-752738941f07",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        740,
        200
      ],
      "id": "3e8c5070-9060-41dd-87a8-8e8c88735c6a",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": {
          "__rl": true,
          "value": "appMej2JQwZJz80ME",
          "mode": "list",
          "cachedResultName": "Memory",
          "cachedResultUrl": "https://airtable.com/appMej2JQwZJz80ME"
        },
        "table": {
          "__rl": true,
          "value": "tblbloLzD6LHNuvxh",
          "mode": "list",
          "cachedResultName": "Memory",
          "cachedResultUrl": "https://airtable.com/appMej2JQwZJz80ME/tblbloLzD6LHNuvxh"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Memory": "={{ $fromAI('memory', 'Summary of memory') }}",
            "User": "Leon"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Memory",
              "displayName": "Memory",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "User",
              "displayName": "User",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "Created",
              "displayName": "Created",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.airtableTool",
      "typeVersion": 2.1,
      "position": [
        1020,
        200
      ],
      "id": "7c1f5d5b-7ff6-4b14-b7f1-569c18ffa7c7",
      "name": "Save Memory",
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "search",
        "base": {
          "__rl": true,
          "value": "appMej2JQwZJz80ME",
          "mode": "list",
          "cachedResultName": "Memory",
          "cachedResultUrl": "https://airtable.com/appMej2JQwZJz80ME"
        },
        "table": {
          "__rl": true,
          "value": "tblbloLzD6LHNuvxh",
          "mode": "list",
          "cachedResultName": "Memory",
          "cachedResultUrl": "https://airtable.com/appMej2JQwZJz80ME/tblbloLzD6LHNuvxh"
        },
        "filterByFormula": "({User} = 'Leon')",
        "options": {
          "fields": [
            "Memory",
            "Created"
          ]
        },
        "sort": {
          "property": [
            {
              "field": "Created"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2.1,
      "position": [
        260,
        100
      ],
      "id": "23dd8996-4d3f-454f-8e41-e084ad7812a1",
      "name": "Get Memories",
      "alwaysOutputData": true,
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "memories",
        "include": "specifiedFields",
        "fieldsToInclude": "createdTime, Memory",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        420,
        100
      ],
      "id": "d15e2921-0c03-4208-95dd-036f4b36f838",
      "name": "Aggregate"
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineAll",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        620,
        -20
      ],
      "id": "d8c80615-c1d0-4ce9-9133-d7fa4d5bc3a6",
      "name": "Merge"
    },
    {
      "parameters": {
        "contextWindowLength": 50
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        880,
        200
      ],
      "id": "cb4d0556-7e88-47af-9ac2-04cca44b586d",
      "name": "Window Buffer Memory"
    }
  ],
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "Get Memories",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Save Memory": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Get Memories": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7c2391c9-f24d-41fe-ade5-4931f168527a",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "L563aWxIUBWmrdAd",
  "tags": []
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Long Term Memory Demo. Uses chatTrigger, agent, lmChatOpenAi, airtableTool. Chat trigger; 8 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

✨ Intro This workflow shows how to go beyond a “plain” AI chatbot by:

Telegram, OpenAI, OpenAI Chat +13
AI & RAG

법정동코드 생성기. Uses chatTrigger, agent, lmChatOpenAi, memoryBufferWindow. Chat trigger; 15 nodes.

Chat Trigger, Agent, OpenAI Chat +6
AI & RAG

Build an MCP server with Airtable. Uses chatTrigger, agent, memoryBufferWindow, mcpClientTool. Chat trigger; 13 nodes.

Chat Trigger, Agent, Memory Buffer Window +4
AI & RAG

Build an MCP server with Airtable. Uses chatTrigger, agent, memoryBufferWindow, mcpClientTool. Chat trigger; 13 nodes.

Chat Trigger, Agent, Memory Buffer Window +4
AI & RAG

This template is designed for anyone who wants to integrate MCP with their AI Agents using Airtable. Whether you're a developer, a data analyst, or an automation enthusiast, if you're looking to lever

Chat Trigger, Agent, Memory Buffer Window +4