π§ Day 4 β Data Ingest Pipeline: Supabase Vector Store + Edit Fields β
Minggu 2 Β· Hari 4 β Yellow Day (Integration) Topik: Pipeline ETL untuk RAG, node Edit Fields, setup Supabase (SQL, pgvector), integrasi n8n-Supabase, OpenAI Embeddings
π Daftar Isi β
- Recap RAG & Embedding
- Dua Fase Membangun RAG
- Business Challenge Minggu Ini
- Data Ingest Pipeline
- Setup Supabase
- Integrasi n8n + Supabase
- Rangkuman & Poin Penting
π Recap RAG & Embedding β
RAG dalam Satu Diagram β
User bertanya βββΆ Vectorize pertanyaan βββΆ Cari di Vector DB βββΆ Ambil teks relevan
(Embedding Model) (Similarity Search) β
βΌ
Prompt + Konteks βββΆ LLM βββΆ JawabanChunking β
Chunking = proses memecah dokumen besar menjadi potongan-potongan lebih kecil yang masing-masing akan mendapat vektor sendiri. Prinsip utamanya:
| Strategi | Deskripsi | Kapan Digunakan |
|---|---|---|
| Simple/Default | Pecah per ~1000 karakter dengan overlap | Default n8n, biasanya cukup |
| Semantic Chunking | Pecah berdasarkan kesamaan makna | Data kompleks, topik campur |
| Fixed Size | Pecah ukuran tetap (token/karakter) | Data terstruktur seragam |
| Paragraph-based | Pecah per paragraf/section | Dokumen dengan struktur jelas |
π‘ Prinsip Emas: "Satu-satunya prinsip sesungguhnya adalah β kamu harus mengujinya." Trial and error dengan pengukuran adalah kunci.
Traditional RAG vs Agentic RAG (Recap) β
- Traditional RAG: Linear β message β vector retrieval β LLM β jawaban
- Agentic RAG: LLM mengontrol workflow, punya multiple tools (vector search, SQL, API, dll.), bisa iteratif
"RAG is dead" = Red herring. Agentic RAG adalah evolusi natural, bukan pengganti.
π Dua Fase Membangun RAG β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FASE 1: DATA INGEST (Hari ini) β
β ββββββββββββββββββββββββββ β
β ββββββββββββ βββββββββββββ βββββββββββ βββββββββββββ β
β β Extract βββΆβ Transform βββΆβ Chunk βββΆβ Vectorize ββββ β
β β (Google β β (Edit β β (Split β β (OpenAI β β β
β β Sheets) β β Fields) β β Text) β β Embedding)β β β
β ββββββββββββ βββββββββββββ βββββββββββ βββββββββββββ β β
β β β
β βββββββββββββ β β
β β Load ββββ β
β β (Supabase β β
β β Vector β β
β β Store) β β
β βββββββββββββ β
β β
β FASE 2: QUESTION ANSWERING (Besok) β
β ββββββββββββββββββββββββββββββββββ β
β ββββββββββββ βββββββββββββ βββββββββββββ ββββββββββββ β
β β User βββΆβ Vectorize βββΆβ Retrieve βββΆβ LLM β β
β β Question β β Question β β from DB β β + Contextβ β
β ββββββββββββ βββββββββββββ βββββββββββββ ββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββETL (Extract, Transform, Load) + Chunking & Vectorizing β
| Tahap | Apa Yang Terjadi | Tool/Node |
|---|---|---|
| Extract | Ambil data dari sumber | Google Sheets node |
| Transform | Ubah format data sesuai kebutuhan | Edit Fields (Set) node |
| Chunk | Pecah data jadi potongan kecil | Default Document Loader |
| Vectorize | Ubah teks menjadi vektor | OpenAI Embeddings node |
| Load | Simpan ke vector database | Supabase Vector Store node |
πΌ Business Challenge Minggu Ini β
Skenario β
Klien memiliki toko online aksesoris komputer dengan 60 produk di Google Sheets. Mereka butuh expert agent yang bisa menjawab pertanyaan detail tentang produk β scalable hingga 60.000+ produk.
Data Sumber: Google Sheet β
| Column | Contoh |
|---|---|
| Name | NovaKey Tactile Keyboard |
| Category | Keyboard |
| SKU | NK-TK-001 |
| Price | 129.99 |
| Description | Premium mechanical keyboard with... |
π Kunci Pembelajaran: 60 produk hanyalah contoh. Pipeline yang sama bisa menangani 60.000 atau 600.000 produk. Itulah kekuatan RAG.
π¨ Data Ingest Pipeline β
Workflow n8n β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββββ
β Manual βββββΆβ Google βββββΆβ Supabase Vector Store β
β Trigger β β Sheets β β (Add documents) β
β β β (Get Rows) β β β
β β β β β ββββββββββββββ β
β β β 60 items β β β Edit Fieldsβ β Sub-node β
β β β β β β (Transform)β (Loader) β
ββββββββββββββββ ββββββββββββββββ β ββββββββββββββ β
β ββββββββββββββ β
β β OpenAI β β Sub-node β
β β Embeddings β (Embedding) β
β ββββββββββββββ β
ββββββββββββββββββββββββββββββββNode Edit Fields (Transform) β
Node Edit Fields (dulunya bernama "Set") adalah node krusial untuk data engineering β memetakan data dari format input ke format output yang diinginkan.
Konfigurasi Mapping β
Kita membuat dua field output:
Field 1: content (String, Expression)
Product Name: {{ $json.name }}
Category: {{ $json.Category }}
SKU: {{ $json.SKU }}
Price: ${{ $json.Price }}
Description: {{ $json.Description }}Field 2: category (String, Expression)
{{ $json.Category }}Contoh Hasil Transform β
{
"content": "Product Name: NovaKey Tactile Keyboard\nCategory: Keyboard\nSKU: NK-TK-001\nPrice: $129.99\nDescription: Premium mechanical keyboard with tactile switches...",
"category": "Keyboard"
}π‘ Mengapa format ini? Field
contentdirancang agar informatif jika diberikan ke LLM sebagai konteks. Fieldcategoryadalah metadata yang bisa digunakan untuk filtering.
ποΈ Setup Supabase β
Langkah 1: Buat Project β
- Login ke supabase.com
- Buat New Project β nama: "rag"
- Pilih compute size: Tiny (cukup untuk free tier)
- Buat database password β simpan aman di password manager
- Pilih region terdekat (atau terdekat ke n8n cloud)
- Tunggu beberapa menit hingga setup selesai
Langkah 2: Enable pgvector Extension β
- Navigasi ke Database β Extensions
- Cari "vector" β klik Enable extension
- Extension
pgvectorsekarang aktif
Langkah 3: Jalankan SQL Script β
Buka SQL Editor β paste dan jalankan script berikut:
-- Script ini membuat tabel dan fungsi yang dibutuhkan n8n
-- Bisa di-generate ulang via ChatGPT jika perlu
CREATE TABLE knowledge_base (
id BIGSERIAL PRIMARY KEY,
content TEXT,
metadata JSONB,
embedding VECTOR(1536) -- β Dimensi harus cocok dengan model!
);
CREATE FUNCTION match_documents(...)
-- Fungsi untuk similarity search yang kompatibel dengan n8n
-- Menggunakan 1 - cosine_distance untuk format yang benarβ οΈ KRITIS β Dimensi Harus Cocok!
| Embedding Model | Dimensi | Catatan |
|---|---|---|
| text-embedding-3-small (β ) | 1536 | Default choice, murah |
| text-embedding-3-large | ~3072 | Lebih powerful, sedikit mahal |
| Gemini embedding | Varies | Cek dokumentasi |
| Open source | Varies | Gratis |
Angka 1536 di SQL script harus sama persis dengan dimensi embedding model yang dipilih. Jika salah, akan error "mismatching dimensions".
π‘ Tips: Script bisa dijalankan berulang kali (akan recreate tabel). Jika ganti model, cukup update angka dimensi dan jalankan ulang.
Langkah 4: Ambil Credentials β
- Project Settings β Data API β copy URL
- Project Settings β API Keys β switch ke Legacy keys β copy service_role secret key (yang ditandai orange "secret")
β οΈ n8n belum mendukung format API key baru Supabase, jadi gunakan legacy keys.
π Integrasi n8n + Supabase β
Konfigurasi Supabase Vector Store Node β
- Cari node: "Supabase Vector Store"
- Operation: Add documents to vector store
- Credentials:
- Host: URL dari Supabase Data API
- Service Role Secret: Legacy API key
- Tekan Save β harus muncul β hijau
Sub-node 1: Embedding Model β
| Parameter | Nilai |
|---|---|
| Provider | OpenAI Embeddings |
| Model | text-embedding-3-small |
| Dimensi | 1536 (otomatis berdasarkan model) |
Sub-node 2: Document Loader (Default Data Loader) β
| Parameter | Nilai |
|---|---|
| Mode | Load Specific Data |
| Data (Expression) | {{ $json.content }} |
| Text Splitter | Simple (default) |
| Chunk Size | 1000 karakter (default) |
| Overlap | Default |
Options β Metadata:
| Property Name | Value (Expression) |
|---|---|
| category | {{ $json.category }} |
Parameter Utama Vector Store β
| Parameter | Nilai |
|---|---|
| Table Name | knowledge_base |
Eksekusi Pipeline β
Execute Workflow β 60 items loaded β 60 items transformed β 60 documents vectorized β 60 rows in Supabase β
Verifikasi di Supabase β
Navigasi ke Database β knowledge_base table:
| id | content | metadata | embedding |
|---|---|---|---|
| 1 | "Product Name: NovaKey..." | [-0.023, 0.847, -0.15, ...] | |
| 2 | "Product Name: ProType..." | [0.134, -0.562, 0.33, ...] | |
| .. | ... | ... | ... (1536 angka per row) |
Memperbaiki Kesalahan β
Jika ditemukan typo (misalnya extra dollar sign di description):
- Supabase: Select all β Delete 60 rows
- n8n: Fix expression di Edit Fields node
- Re-run: Execute workflow β 60 rows baru yang benar
π‘ Keuntungan pipeline: Bisa di-rerun kapan saja dengan cepat. Perbaikan data hanya butuh hitungan detik.
π Rangkuman β
Alur Lengkap Data Ingest β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXTRACT TRANSFORM CHUNK+VECTORIZE LOAD β
β β
β Google Sheets β Edit Fields β Default Loader β Supabase β
β (60 products) (content + (simple split (Vector β
β category) + OpenAI embed) Store) β
β β
β Node: Google Node: Edit Sub-node dalam Node: β
β Sheets (Get Fields (Set) Supabase Vector Supabase β
β Rows) Store cluster Vector Storeβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββPoin-Poin Utama β
| # | Konsep | Penjelasan |
|---|---|---|
| 1 | Edit Fields node | Node untuk data transformation/mapping (dulunya "Set") |
| 2 | Supabase setup | pgvector extension + SQL script + dimensi harus cocok |
| 3 | Legacy API keys | n8n belum dukung format baru Supabase |
| 4 | Node Cluster | Supabase Vector Store = cluster (embedding + loader sub-nodes) |
| 5 | Dimensi 1536 | text-embedding-3-small β 1536 dimensi β SQL harus match |
| 6 | Pipeline reusable | Bisa di-trigger ulang, diubah trigger-nya (schedule, event) |
Teknologi Hari Ini β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β Teknologi β Peran β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββ€
β Google Sheets β Sumber data produk (Extract) β
β n8n β Orchestration pipeline ETL β
β Edit Fields β Data transformation (Transform) β
β OpenAI Embed β Vectorization (text β 1536 dim) β
β Supabase β Vector database (Load & Store) β
β PostgreSQL β Database engine di balik Supabaseβ
β pgvector β Extension untuk vector operations β
βββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββπ Pencapaian β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
Membangun data ingest pipeline end-to-end β
β β
Menguasai Edit Fields node (data transformation) β
β β
Setup Supabase: project, pgvector, SQL script β
β β
Integrasi n8n β Supabase credentials β
β β
60 produk ter-vectorize & tersimpan di Supabase β
β β
Memahami dimensi embedding & konfigurasi β
β β
β π Progress Kursus: 60% ββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββSelanjutnya: Membangun Agentic RAG Question Answering + Voice Agent dengan ElevenLabs β proyek akhir Week 2!