The native RAG is part of thenative AI integrated into the Aurabasebackend, alongside NL2SQL: not a third-party service to be assembled on top of a general base. Prerequisites to follow this tutorial: an existing Aurabase project, a configured LLM provider (OpenAI or Google Gemini for embeddings, one of the three native providers for generation), and a project API key.
- Aurabase RAG ardışık düzeni iki çağrıdan oluşur: bir belgeyi indekslemek için
ragIngest(), sorgulamak ve bir yanıt oluşturmak içinrag(). Parçalama, yerleştirme ve vektör araması sunucu tarafında yönetilir. - Temelde standart PostgreSQL ve pgvector var: boyut sınıfı başına bir vektör sütunu (768, 1536, 3072) ve sınıf başına kısmi HNSW dizini içeren bir
embeddingstablosu. - Parçalama, büyük belgelerde yapılandırılabilir örtüşme ve patlamaya karşı koruma özelliğine sahip gerçek bir tokenizer (
tiktokeno200k) kullanır. - Alınan içerik, komut istemine eklenmeden önce etkisiz hale getirilir: sistem talimatlarını taklit etmek için etiketinden kaçmaya çalışan bir belge açıkça etkisiz hale getirilir.
- Aurabase tarafında yalnızca OpenAI ve Gemini yerleştirmeler oluşturur. Anthropic/Claude'un genel yerleştirme API'si yoktur, nihai yanıtın oluşturulması için ayrılmış olarak kalır.
Bu RAG boru hattı nasıl çalışıyor?
Boru hattı beş aşamada gerçekleşir. Alındıktan sonra metin kesilir, her bir parça toplu olarak vektörleştirilir ve ardından saklanır. Sorgulamanın ardından soru, kosinüs benzerliğine göre depolanan parçalarla karşılaştırılarak vektörleştirilir ve en yakın parçacıklar, üretim modeline gönderilen istemin içine enjekte edilir.
Parçalama (tiktoken)→Gömmeler (toplu)→pgvector depolama (HNSW)→Benzerlik arama→Artırılmış üretim
Üretimde önemli olan bir mimari ayrıntı: Yerleştirme veya oluşturma sağlayıcısına yapılan ağ çağrıları sırasında hiçbir Postgres bağlantısı yapılmaz. Veritabanı işlemi, üçüncü taraf ağ gecikmesi nedeniyle paylaşılan bir PgBouncer arka ucunu asla engellememek için harici çağrıdan önce kapanır ve sonrasında yeniden açılır.
Projeyi oluştur
Tipik bir kendi kendine barındırılan pgvektörün aksine, bu işlem hattı için CREATE EXTENSION vector çalıştırmanıza veya kendiniz bir tablo oluşturmanıza gerek yoktur. Projenin embeddings şeması, vektör sütunları ve HNSW dizinleriyle birlikte, proje oluşturulduğunda otomatik olarak sağlanır.
Yerleştirme sağlayıcısı proje tarafında bir kez yapılandırılır (Stüdyo → IA → Tedarikçiler). Vektörlerinizin etkili boyutunu belirleyen bu sağlayıcıdır, dolayısıyla embeddingstablosunda kullanılan sütun.
Belgelerinizi ragIngest() ile indeksleyin
Bir belgeyi indekslemek için bir çağrı yeterlidir: metin parçalara bölünür, her parça vektörleştirilir ve ardından istenen ad alanında saklanır. Bölme işlemi, boşluklara göre basit bir bölme değil, gerçek bir belirteç (tiktoken, kodlama o200k_base) kullanır; bu, bazı Asya dilleri gibi boşluk içermeyen metinlerde doğru kalır.
Ham HTTP'de eşdeğer yol, projenin API anahtarıyla doğrulanan POST /v1/ai/{project_id}/rag/ingestşeklindedir.
Besleme varsayılan olarak önemsizdir: bir belge tanımlayıcısı otomatik olarak türetilir (içeriğin SHA-256 karması veya siz sağlarsanız metadata.document_id). Aynı içeriğin yeniden kullanılması, onları kopyalamak yerine mevcut parçaların yerini alır ve periyodik senkronizasyon işinin yeniden oynatılmasını güvenli hale getirir.
Aslında Postgres'e ne giriyor?
Burada özel bir sihir yok: vektörlerinizi alan tablo, boyut sınıfı başına bir vector sütunu ve sütun başına kısmi bir HNSW dizini (yalnızca onu dolduran satırlarda etkin) içeren sıradan bir Postgres tablosudur. İşte basitleştirilmiş gerçek tanımı:
Her arama, vektörleri, endeksin vector_cosine_ops ve halfvec_cosine_ops operatör sınıfları tarafından hedeflenen kosinüs mesafe operatörü (<=>) ile karşılaştırır. HNSW ve IVFFlat arasındaki geri çağırma/gecikme dengelemelerinin ayrıntıları için HNSW indekslemeye adanmış makaleye bakın. Gömme boyutunun seçimi için 768 ile 1536 ile 3072 arasındaki karşılaştırmaya bakın.
Rag() ile sorgulama ve yanıt oluşturma
Sorgu tarafında, rag() sorunun vektörleştirilmesini, ad alanındaki benzerliğe göre aramayı, genişletilmiş istemin oluşturulmasını ve üretim modeline çağrıyı istemci tarafında tek bir ağ gidiş-dönüşünde zincirler.
Yanıt, oluşturulan yanıtı ve kaynaklarını, gerçekte kullanılan sağlayıcıyla birlikte taşır:
Alınan içerik hiçbir zaman sistem istemine ham olarak enjekte edilmez. Bu güvenilmez bir veridir (kullanıcı yüklemesi, indekslenmiş sayfa): örneğin bir kapanış bölümü etiketi ve ardından yanlış talimatlar içeren bir belge, montajdan önce nötrleştirilir, köşeli ayraçlar köşeli ayraçlarla değiştirilir, metin korunur ancak yapısı etkisiz hale getirilir.
Ad alanınız boş olmasa da rag() hiçbir şey bulamazsa, yanıt yanıltıcı bir sessizlik yerine açık bir uyarı taşır: derleminiz muhtemelen başka bir model veya başka bir yerleştirme boyutu altında indekslenmiştir. POST /v1/ai/{project_id}/rag/{namespace}/reindexaracılığıyla yeniden dizinleyin.
LangChain'den ve el yapımı bir pgvektörden: ne değişir?
LangChain ile PostgreSQL'de zaten bir RAG sohbet robotu oluşturduysanız, her manuel tuğlanın burada, temeldeki veritabanını değiştirmeden, sunucu tarafında yönetilen bir eşdeğeri bulunur.
| Metni parçalamak | Kendinizi ayarlamak için RecursiveCharacterTextSplitter | ragIngest(): entegre tiktoken yığınlaması, varsayılan olarak 512 token / 64 çakışma |
|---|---|---|
| Gömmeler | OpenAIEmbedddings'e manuel çağrı, parti limitlerinin yönetimi | Otomatik olarak toplu, yerleşik geçici yeniden deneme |
| Vektör depolama | Kendiniz oluşturup taşımak için pgvector tablosu + HNSW dizini | Proje başına sağlanan şema ve dizinler |
| Arama + istem | PGVector.similarity_search() ve ardından istemi manuel olarak bir araya getiriyoruz | rag(): tek çağrıda arama ve artırılmış nesil |
| Kurtarılan içerik | İstemde olduğu gibi enjekte edildi | Montajdan önce yapı etiketlerinin otomatik nötrleştirilmesi |
Supabase üzerinde kurulu mevcut bir projeyi bu tür bir manuel montajla mı taşıyorsunuz? Arka ucun geri kalanına (şema, RLS politikaları, SDK) ilişkin geçiş mantığı, Supabase'den Aurabase'e geçiş kılavuzumuzdaele alınmıştır.
Üretime geçmeden önce dikkat edilmesi gereken ayarlar ve sınırlar
Üç ayar doğrudan maliyeti ve gecikmeyi etkiler; tümü aura-aihizmet kodunda doğrulanır. Geçici bir ekleme çağrısındaki (ağ hatası, sağlayıcı hatası 429) deneme sayısı varsayılan olarak 3'tür ve temel geri çekilme 100 ms'dir. Büyük belgeler, tek bir büyük belgede hata olmadan tedarikçilerin API tavanlarına uymak için varsayılan olarak 2048 parçayla sınırlı alt gruplara yerleştirilir. Bir korkuluk (varsayılan olarak 10.000 parça, yapılandırılabilir), anormal sayıda parça üretecek bir belgenin alımını açıkça reddeder.
Arama tarafında, HNSW aday listesinin boyutu otomatik olarak max(64, top_k × 4)olarak ayarlanır: ne kadar çok sonuç talep ederseniz, dizin hatırlanmayı korumak için o kadar çok aday araştırır. Derleminizin belirli bir profili varsa, ortam değişkeni yoluyla sabit bir değer mümkün olmaya devam eder.
Farklı modellerin vektör uzayları hiçbir zaman birbiriyle karşılaştırılmaz: her arama mevcut yerleştirme modeliyle sınırlı kalır ve modelleri değiştirmek, sonuçların tutarlılığını bozacak sessiz bir geçiş yerine açık bir yeniden indeksleme gerektirir.
Dikkat edilmesi gereken mevcut sınırlar
Gömme boyutu, desteklenen üç sınıftan birine girmelidir: 768, 1536 veya 3072. Başka bir boyut döndüren bir sağlayıcı, açık bir hatayla reddedilir, hiçbir zaman kesilmez veya sessizce dönüştürülmez.
Gömme oluşturma, üç yerel sağlayıcı arasında yalnızca OpenAI veya Google Gemini aracılığıyla mümkündür: Anthropic/Claude genel bir yerleştirme API'si sunmaz, bu nedenle yalnızca bu ardışık düzende son yanıtı oluşturmak için kullanılır, asla vektörleştirme için kullanılmaz.
JavaScript SDK'sı, rag() çağrısındaki top_k ve threshold geçersiz kılmalarını henüz açığa çıkarmaz: Bunlara doğrudan HTTP'de erişilebilir kalır, sırasıyla [1, 50] ve [0, 1] ile sınırlıdır, ancak bugün olduğu gibi aura.ai.rag()'den erişilemez. Varsayılan benzerlik eşiği (0,3) kasıtlı olarak hoşgörülüdür; Bilgi isteminde alakasız kaynaklardan kaçınmak için onu yoğun bir külliyatla daraltın.
Daha ileri gitmek için
RAG, yapılandırılmamış içerik (belgeler, notlar, biletler) hakkındaki soruları kapsar. İlişkisel verilerinizle ilgili sorularınız için Aurabase'in yerel NL2SQL, soruyu doğrudan doğrulanmış SQL'e çevirir. Yukarıda belirtilen HNSW parametreleri ve boyut sınıflarının ayrıntıları için HNSW indeksleme hakkındaki makaleye ve yerleştirme boyutlarının karşılaştırması'ye bakın. Tam API referansı, RAG ve pgvector belgeleri ve AI Ağ Geçidi belgeleriolarak kalır.