從YT上看到,於是就來實作看看。
Vector是向量,在應用上把「輸入」做成具有768或是1536個次元的向量。而我們在搜尋時,則會用輸入去轉換成向量,比較資料庫中的哪些向量最接近,然後回傳。
能把輸入資料變成向量的為embedding模型,而輸出的向量的次元數則取決於embedding模型。
如果初次使用supabase,想要作為向量資料庫,需要做一點操作。
以下使用到的API,皆為「免費」!請自行去其官網註冊帳號。
N8N架構
上半部為輸入進Supabase Vector Store中。
下半部為依據Supabase Vector Store去回答問題。

Enbeddings model使用HuggingFace,可以免費調用,模型使用「sentence-transformers/all-mpnet-base-v2」,這是sentence-transformers網站上顯示綜合效能最好的。 ※記得API Key需要勾選用途,不然預設沒勾的話,API是調不出來的。
此模型相關資訊如下
all-mpnet-base-v2 | |
Description: | All-round model tuned for many use-cases. Trained on a large and diverse dataset of over 1 billion training pairs. |
---|---|
Base Model: | microsoft/mpnet-base |
Max Sequence Length: | 384 |
Dimensions: | 768 |
Normalized Embeddings: | true |
Suitable Score Functions: | dot-product (util.dot_score ), cosine-similarity (util.cos_sim ), euclidean distance |
Size: | 420 MB |
Pooling: | Mean Pooling |
Training Data: | 1B+ training pairs. For details, see model card. |
Model Card: | https://huggingface.co/sentence-transformers/all-mpnet-base-v2 |
Chat Model使用Groq,也是可以免費調用,模型並無特別指定,除了View模型外,請隨意使用。這種問答只需要能快速回答,所以我選擇8B模型。
一般來說,照著架構圖做,就能輕鬆搭建出來。
輸入資料我使用「生日」與一些資料,作為預先輸入到向量資料庫中。

Supabase
參考文章
https://community.n8n.io/t/supabase-vector-store-issue/34885/2
根據參考文章的提供的程式碼
Supabase一開始是沒有啟用embedding向量,在SQL Editor中,把以下輸入,就能一口氣完成。
會建立一個名為documents的資料表,到時到n8n中可以看到。
-- Enable the pgvector extension to work with embedding vectors
create extension vector;
-- Create a table to store your documents
create table documents (
id bigserial primary key,
content text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector(768) -- 1536 works for OpenAI embeddings, change if needed
);
-- Create a function to search for documents
create function match_documents (
query_embedding vector(1536),
match_count int DEFAULT null,
filter jsonb DEFAULT '{}'
) returns table (
id bigint,
content text,
metadata jsonb,
embedding jsonb,
similarity float
)
language plpgsql
as $$
#variable_conflict use_column
begin
return query
select
id,
content,
metadata,
(embedding::text)::jsonb as embedding,
1 - (documents.embedding <=> query_embedding) as similarity
from documents
where metadata @> filter
order by documents.embedding <=> query_embedding
limit match_count;
end;
$$;
完成後,照著n8n的Supabase串接API文件去完成n8n與Supabase串接。
測試
首先先把資料輸入到Supabase中,按下Supabase Vector Store的開始鍵,等待完成。

準備了三個問題,接著在對話欄依序輸入以下問題:
- JN的生日是?
- JN是什麼會員?
- JN的興趣是?

測試有依照輸入資料去回答,如果沒有搜尋到的就會回覆不知道。