Um in N8N einen AI Agenten mit Gedächtnis (RAG) zu verwenden wird ein Speicher benötigt, dazu bieten sich Datenbanken an. Damit das Large Language Modell auch effizient in den Dateien suchen zu können wird eine Vector-Datenbank benötigt. PostgreSQL bietet dafür eine Erweiterung.
Die folgende Konfigurationsdatei für Docker Compose legt einen Container samt Tabelle und aktivierter Erweiterung an.
services:
postgres:
image: ankane/pgvector
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: <adminuser>
POSTGRES_PASSWORD: <adminpassword>
POSTGRES_DB: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgres/schema.sql:/docker-entrypoint-initdb.d/schema.sql
volumes:
postgres_data:
Zusätzlich muss im unterverzeichnis postgres noch die Datei schma.sql mit folgendem Inhalt angelegt werden.
-- Enable pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
-- Create a table to store your documents
create table documents (
id bigserial primary key,
text text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector(3072) -- 1536 works for OpenAI embeddings, change if needed
);
-- Create a function to search for documents
create function match_documents (
query_embedding vector(3072),
match_count int default null,
filter jsonb DEFAULT '{}'
) returns table (
id bigint,
text text,
metadata jsonb,
similarity float
)
language plpgsql
as $$
#variable_conflict use_column
begin
return query
select
id,
text,
metadata,
1 - (documents.embedding <=> query_embedding) as similarity
from documents
where metadata @> filter
order by documents.embedding <=> query_embedding
limit match_count;
end;
$$;
Die Datenbank kann in N8N dann mit den Knoten Postgres Chat Memory und Postgres PGVector Store verwendet werden. Die Vector-Datenbank funktioniert z.B. mit Ollama asl KI-Model.
