Mimari (Vibe Coder Rehberi)
Nasıl çalıştığını anlamak isteyen geliştiriciler için RAG pipeline'ına derinlemesine bakış.
RAG Pipeline Genel Bakış
LaunchChat, belgelerinize dayalı soruları yanıtlamak için Retrieval Augmented Generation (RAG) kullanır.
1. Alım
Ayrıştır → Parçala → Gömme → Depola
2. Getirme
Sorgu → Vektör Arama → Sıralama
3. Üretim
Bağlam → LLM → Yanıt + Kaynaklar
Alım Pipeline'ı
1. Ayrıştırma
İçerik çeşitli kaynaklardan düz metne ayrıştırılır:
- Notion: Hiyerarşiyi koruyan blok blok ayrıştırma
- DOCX: mammoth.js ile çıkarılır
- Markdown: remark/unified ile ayrıştırılır
- Website: Web Sitesi: Taranır ve navigasyon/altbilgi temizlenir
2. Parçalama
Metin, optimal getirme için örtüşen parçalara bölünür:
{
targetSize: 400, // tokens per chunk
overlap: 50, // token overlap between chunks
preserveHeadings: true, // keep heading context
minChunkSize: 100 // minimum viable chunk
}Her parça, bağlam için üst başlık hiyerarşisini korur.
3. Gömme
Parçalar 1536 boyutlu vektörlere dönüştürülür:
Model: text-embedding-3-small
Dimensions: 1536
Provider: OpenAI (via OpenRouter)4. Depolama
Vektörler pgvector uzantısıyla PostgreSQL'de depolanır:
-- content_chunks table
id: uuid
knowledge_base_id: uuid
page_id: string
page_title: string
content: text
embedding: vector(1536)
parent_heading: stringGetirme Stratejisi
Hibrit Arama
İki aşamalı bir getirme süreci kullanıyoruz:
- Vector Search: Vektör Arama: pgvector'ün <=> operatörünü kullanan kosinüs benzerliği
- Keyword Fallback: Anahtar Kelime Yedekleme: Vektör sonuçları düşük benzerliğe sahipse anahtar kelime eşleşmeli parçalar eklenir
Benzerlik Puanlama
-- Vector similarity query
SELECT *, 1 - (embedding <=> query_embedding) as similarity
FROM content_chunks
WHERE knowledge_base_id = $1
ORDER BY embedding <=> query_embedding
LIMIT 5Yanıt Üretimi
Güven Puanlama
Üretmeden önce bir güven puanı hesaplıyoruz:
confidence = bestSimilarity + (hasMultipleChunks ? 0.1 : 0) + 0.2
// Capped at 1.0
if (confidence < threshold) {
return refusalMessage; // Don't hallucinate
}Kaynak Çıkarma
LLM'e [Source N] formatını kullanması talimatı verilir. Bunları ayrıştırıp orijinal sayfalara bağlarız:
// Extract citations from answer
const citationPattern = /\[Source (\d+)\]/g;
const matches = answer.matchAll(citationPattern);
// Map to original pages
citations = matches.map(m => chunks[m[1] - 1])Dokümantasyon En İyi Uygulamaları
Belgelerinizi optimal AI getirmesi için yapılandırın:
Yapın
- Açık, tanımlayıcı başlıklar kullanın
- Bölümleri tek bir konuya odaklı tutun
- Örnekler ve kod parçacıkları ekleyin
- Terimleri ve kısaltmaları tanımlayın
- Özellikler değiştiğinde belgeleri güncelleyin
Kaçının
- Yapısız çok uzun sayfalar
- Sayfalar arasında yinelenen içerik
- Güncel olmayan veya çelişkili bilgiler
- Alt metin olmadan yoğun görsel kullanımı
- Yalnızca navigasyon içeren sayfalar
AI İstem Şablonu
LaunchChat entegrasyonuna yardımcı olmak için bu istemi Cursor, Windsurf veya Claude Code'a kopyalayın:
I'm integrating LaunchChat, an AI-powered support widget.
Widget Setup:
1. Add to HTML: <script>window.LaunchChatConfig = {widgetId: "ID"}</script>
<script src="https://domain.com/widget.js" async></script>
2. For React/Next.js, create a client component that:
- Sets window.LaunchChatConfig
- Dynamically loads widget.js
- Cleans up on unmount
API Reference:
- window.LaunchChatWidget.open() - Open chat
- window.LaunchChatWidget.close() - Close chat
- window.LaunchChatWidget.on(event, callback) - Listen to events
- Events: 'open', 'close', 'message', 'escalate', 'feedback'
Help me integrate this into my [FRAMEWORK] app.