n8n ile Kendi Belgelerinizden RAG Soru-Cevap Botu

AgentRoost · May 7, 2026 · 5 dk okuma · Markdown olarak görüntüle
AgentRoost — n8n Automation

Büyük dil modelleri bilgilerini eğitim kesim tarihine kadar bilirler; sizin iç belgelerinizi, teknik kılavuzlarınızı ya da şirket politikalarınızı bilmezler. Modele her seferinde belgeleri yapıştırmak ise hem pratik değil hem de bağlam penceresi hızla dolar.

Çözüm RAG (Retrieval-Augmented Generation): belgelerinizi önce küçük parçalara böler, her parçanın anlamsal vektörünü hesaplayarak bir vektör deposuna yazarsınız. Kullanıcı soru sorduğunda sisteminiz ilgili parçaları çeker, bunları AI düğümüne bağlam olarak verir ve model sadece belgelerinizde ne varsa onu yanıtlar — uydurma olmaz, kaynak alıntılanabilir.

Bu rehberde bu akışı n8n üzerinde sıfırdan kuracaksınız.


Mimariye Genel Bakış

Akış iki bölümden oluşur:

  1. Belge yükleme (Ingestion) akışı — bir kez (veya belge değiştiğinde) çalışır.
  2. Soru-cevap (Query) akışı — her kullanıcı sorusunda tetiklenir.
[Ingestion]
Dosya → Extract Text → Text Splitter → Embeddings → Vektör Deposu

[Query]
Kullanıcı sorusu → Embeddings → Vektör Deposu (similarity search) → AI Chat → Yanıt

1. Ingestion Akışı: Belgelerinizi Parçalayın ve Gömün

Adım 1 — Tetikleyici: Manual Trigger veya Webhook

Tek seferlik yükleme için Manual Trigger düğümü yeterli. Yeni belge geldiğinde otomatik çalışmasını istiyorsanız bir Webhook ya da Schedule Trigger ekleyebilirsiniz.

Adım 2 — Belgeyi Okuyun: HTTP Request veya Read Binary File

PDF'iniz bir URL'deyse:

  • Düğüm: HTTP Request
  • Method: GET
  • URL: https://ornek.com/kilavuz.pdf
  • Response Format: File

Yerel bir dosyaysa n8n'nin dosya sistemine koyup Read Binary File düğümüyle okuyun.

Adım 3 — Metni Çıkarın: Extract From File

Extract From File düğümünü ekleyin:

  • Input Binary Field: data
  • Operation: PDF (ya da DOCX, Text — n8n çoğu formatı destekler)

Çıktı: ham metin, text alanında.

Adım 4 — Parçalayın: Recursive Character Text Splitter

Recursive Character Text Splitter düğümü metni anlamlı parçalara böler:

Parametre Önerilen Değer
Chunk Size 800
Chunk Overlap 150
Separator \n\n önce, \n, sonra

Neden overlap? Bir cümlenin anlamı chunk sınırında ikiye bölünmesin diye. 150 karakterlik örtüşme bu kopuşu önler.

Çıktı: her biri bağımsız bir JSON nesnesi olan chunk listesi. Örnek:

{ "text": "Ürün garantisi 2 yıldır. Hasar görmüş ürünlerde..." }

Adım 5 — Gömün ve Saklayın: Embeddings + Vector Store

n8n'nin AI düğümleri panelinden sırasıyla ekleyin:

Embeddings Modeli (sub-node):

  • Düğüm: Embeddings OpenAI (ya da desteklenen herhangi bir provider)
  • Model: text-embedding-3-small
  • Credential: AgentRoost'ta dahili — ayrıca API anahtarı girmeniz gerekmez

Vektör Deposu (ana düğüm):

  • Düğüm: Pinecone Vector Store veya Supabase Vector Store veya In-Memory Vector Store (test için)
  • Operation: Insert
  • Index / Table: belgelerim
  • Metadata'ya kaynak bilgisi ekleyin: { "source": "kilavuz-v2.pdf", "page": 3 }

Akışı çalıştırın. Birkaç saniyede tüm chunk'lar vektör deposuna yazılır.


2. Soru-Cevap Akışı: Soruları Yanıtlayın

Adım 1 — Tetikleyici: Webhook

Kullanıcıdan gelen soruyu almak için bir Webhook düğümü:

  • HTTP Method: POST
  • Path: /rag-soru
  • Response Mode: Last Node

Webhook URL'niz n8n instance'ınızda otomatik oluşur:
https://<id>.agentroost.app/webhook/rag-soru

Adım 2 — Soruyu Göm: Embeddings

Gelen body.question değerini yukarıdaki aynı embedding modeliyle vektörleştirin. Modeli tutarlı tutmak şart — farklı model farklı vektör uzayı üretir, aramalar anlamsızlaşır.

Adım 3 — Benzer Parçaları Çekin: Vector Store Retrieve

  • Düğüm: Pinecone Vector Store (Operation: Query)
  • Top K: 4 (en benzer 4 chunk genellikle yeterlidir)
  • Index: belgelerim

Çıktı: score ve pageContent içeren 4 nesne.

Adım 4 — Bağlamı Birleştirin: Set veya Code Düğümü

Chunk'ları tek bir metin bloğuna dönüştürün:

// Code düğümü (JavaScript)
const chunks = $input.all().map(i => i.json.pageContent);
const context = chunks.join('\n\n---\n\n');

return [{ json: { context, question: $('Webhook').item.json.body.question } }];

Adım 5 — AI'ya Sorun: Basic LLM Chain

  • Düğüm: Basic LLM Chain
  • Model (sub-node): OpenAI Chat Model — GPT-4o mini veya seçtiğiniz herhangi bir model
  • Prompt (System):
Sen bir belgeden bilgi aktaran asistansın.
Sana verilen BAĞLAM bölümündeki bilgileri kullanarak soruyu yanıtla.
Eğer cevap bağlamda yoksa "Bu bilgi belgelerimde yer almıyor." de.
Asla tahmin etme.

BAĞLAM:
{{ $json.context }}
  • Prompt (Human / User Message): {{ $json.question }}

Adım 6 — Kaynak Bilgisiyle Döndürün: Respond to Webhook

{
  "answer": "{{ $json.text }}",
  "sources": ["kilavuz-v2.pdf, sayfa 3", "politika-2024.pdf, sayfa 7"]
}

Kaynak bilgisini metadata'dan çekmek için ingestion adımında her chunk'a source alanı yazdığınızdan emin olun.


Dikkat Edilmesi Gereken Yaygın Hatalar

  • Chunk size çok büyükse bağlam penceresi dolar ve model ilk birkaç chunk'tan sonrasını görmez.
  • Chunk size çok küçükse parçalar anlamsız hale gelir ("Madde 3.1:" gibi kopuk metinler).
  • Embedding modeli değişirse tüm vektör deposunu sıfırlayıp yeniden indekslemeniz gerekir.
  • Top K çok yüksek seçilirse alakasız chunk'lar modeli yanıltır. 4–6 arası çoğu kullanım için idealdir.
  • Webhook'u herkese açtıysanız basit bir API key kontrolü için IF düğümü ve Header Auth eklemeyi unutmayın.

AgentRoost'ta Bu Akışı Çalıştırmak

Yukarıdaki akışın çalışması için iki kritik şey gerekir: n8n instance'ınız ve AI/embedding modellerine erişim. Normalde bunlar ayrı ayrı düzenlemeniz gereken şeylerdir — n8n'yi bir sunucuya kurmak, OpenAI API anahtarı almak, fatura ödemek, sunucuyu izlemek.

AgentRoost'ta bu ikisi tek abonelikte gelir:

  1. agentroost.app adresinden kayıt olun (e-posta, Google, Microsoft veya Discord ile).
  2. n8n framework'ünü seçin ve instance'ınıza bir isim verin.
  3. Yaklaşık 2 dakika içinde https://<id>.agentroost.app adresinde kendi n8n editörünüz açılır — veriler, iş akışları, erişim tamamen size ait.
  4. Embeddings ve LLM düğümlerini oluşturduğunuzda credential girmeniz istenmez — AI kredileri aboneliğe dahildir.

Akışı oluşturun, webhook URL'nizi paylaşın, bitti. 7/24 çalışır, SSL hazırdır, siz sadece iş mantığına odaklanırsınız.

Fiyat $19.99/ay'dan başlar. Karşılaştırmak için: bir VPS + n8n kurulumu + LLM API kredileri + SSL sertifikası topladığınızda hem daha pahalıya gelir hem de saatlerinizi alır. 14 gün para iade garantisi var, iptal etmek bir tık.

Planları karşılaştırn8n instance'ı başlat


Özet

RAG, LLM'i gerçek bilgi kaynağına bağlamanın en güvenilir yoludur. n8n bu akışı görsel olarak kurmanıza izin verir: belgeyi oku, parçala, göm, depola, sorgula, yanıtla — her adım ayrı bir düğüm, her düğüm görünür ve değiştirilebilir. Kendi belgelerinizden kaynaklı yanıtlar veren bir bot için bu mimari, bir hafta içinde üretime alınabilecek sağlam bir standarttır.

Sıkça sorulan sorular

Hangi vektör deposunu kullanmalıyım?

Test ve küçük projeler için n8n'nin In-Memory Vector Store'u yeterlidir — kurulum gerekmez, ancak instance yeniden başlayınca veriler sıfırlanır. Kalıcı çözüm için Pinecone veya Supabase (pgvector) tercih edin. Her ikisi de n8n'de hazır entegrasyonla gelir.

AI düğümleri için ayrıca API anahtarı girmem gerekiyor mu?

AgentRoost'ta hayır. AI kredileri aboneliğe dahildir; Embeddings ve LLM düğümlerini oluşturduğunuzda credential girmeniz istenmez. Kendi API anahtarınızı (örneğin Anthropic veya başka bir provider) kullanmak isterseniz bunu da yapabilirsiniz — tercih sizin.

Kaç belge yükleyebilirim?

n8n tarafında belge sayısı için bir kısıtlama yoktur; asıl sınır seçtiğiniz vektör deposunun kapasitesiyle belirlenir. Küçük-orta ölçekli bir bilgi tabanı için Pinecone veya Supabase pgvector her ikisi de pratikte yeterlidir.

Webhook URL'sini nasıl güvende tutarım?

n8n'de Webhook düğümüne Header Auth ekleyin: Authorization: Bearer <gizli-token>. İstekte bu header yoksa IF düğümüyle akışı durdurun. Bunu n8n'nin yerleşik Webhook Authentication özelliğiyle birkaç tıkta yapabilirsiniz.

AgentRoost aboneliğini iptal etmek nasıl işliyor?

Aboneliğinizi dilediğiniz an iptal edebilirsiniz; iptal sonrası mevcut dönem sonuna kadar erişiminiz devam eder. Ayrıca ilk 14 gün içinde para iade talebinde bulunabilirsiniz — herhangi bir şart yok.