Spring Boot ve RAG ile Adım Adım Vektör Arama (2026)
Spring Boot ve Spring AI kullanarak RAG (Retrieval-Augmented Generation) sistemlerini, vektör aramayı ve embedding işlemlerini adım adım bu rehberle keşfedin.
Yapay zeka teknolojilerinin baş döndürücü bir hızla geliştiği günümüzde, işletmeler kendi özel verilerini kullanarak akıllı asistanlar geliştirmek istiyor. Ancak, Büyük Dil Modelleri (Large Language Models – LLM) genel internet verileriyle eğitildiği için şirketinizin güncel stok bilgisine, özel müşteri politikalarına veya tescilli dökümanlarına doğrudan erişemez. İşte bu noktada, RAG (Retrieval-Augmented Generation – Bilgi Geri Çağırma ile Güçlendirilmiş Üretim) mimarisi imdadımıza yetişiyor. Bu makalede, Java ekosisteminin en güçlü yazılım çerçevesi (framework) olan Spring Boot ile adım adım profesyonel bir RAG sistemini nasıl kuracağımızı inceleyeceğiz.
RAG (Retrieval-Augmented Generation) Nedir ve Neden Önemlidir?
Öncelikle, geleneksel yapay zeka modellerinin sınırlarını anlamak RAG mimarisinin önemini kavramamıza doğrudan yardımcı olur. Büyük dil modelleri, eğitim süreçleri tamamlandıktan sonra statik hale gelirler. Bu durum, modellerin güncel olaylar veya kurum içi özel veriler hakkında bilgi sahibi olmasını tamamen engeller. Eğer modele doğrudan bilmediği bir soru sorarsanız, büyük olasılıkla “halüsinasyon (hallucination)” adı verilen tamamen uydurma cevaplar üretecektir. Bu nedenle, işletmelerin kendi verilerini güvenli, doğru ve güncel bir şekilde yapay zeka modellerine beslemesi kritik bir zorunluluktur.
RAG, bu sorunu kökten çözmek amacıyla geliştirilmiş yenilikçi bir mimaridir. Temel olarak, kullanıcının sorduğu soruyu alır, şirket içi bir veri havuzunda (genellikle bir vektör veritabanında) arama yapar ve ilgili bilgi parçalarını bulur. Ardından, bu bilgi parçalarını orijinal soruyla birleştirerek dil modeline gönderir. Sonuç olarak, dil modeli kendisine sunulan bu bağlamı (context) kullanarak son derece doğru, güncel ve şirket standartlarına uygun bir yanıt üretir. Bu sayede model, bilmediği konularda uydurmak yerine, kendisine verilen kaynak dökümanlara sadık kalarak cevap verir.
Bununla birlikte, RAG mimarisi sadece doğruluğu artırmakla kalmaz, aynı zamanda üst düzey veri güvenliği de sağlar. Hassas verilerinizi dil modelini yeniden eğitmek (fine-tuning) için harici sunuculara göndermek zorunda kalmazsınız. Verileriniz kendi güvenli yerel veritabanınızda kalır ve sadece ilgili küçük parçalar anlık olarak modele iletilir. Dolayısıyla, 2026 yılında kurumsal Java dünyasında Spring Boot ile RAG uygulamaları geliştirmek, güvenli ve ölçeklenebilir yapay zeka çözümleri üretmenin en standart yolu haline gelmiştir.
Embedding (Vektör Dönüşümü) ve Vektör Veritabanları Nasıl Çalışır?
RAG sistemlerinin kalbinde, metinlerin bilgisayarların anlayabileceği matematiksel ifadelere dönüştürülmesi süreci yatar. Bu işleme “embedding (vektör dönüşümü)” adını veriyoruz. Bilgisayarlar kelimeleri doğrudan bizim gibi algılayamazlar. Bu yüzden, her bir kelimeyi veya paragrafı yüzlerce hatta binlerce boyuttan oluşan birer sayı dizisine (vektöre) dönüştürürüz. Örneğin, “kedi” ve “köpek” kelimelerinin vektörleri, anlamsal yakınlıklarından dolayı uzayda birbirine çok yakın konumlanırken, “bilgisayar” kelimesi bu iki kelimeden çok daha uzak bir noktada yer alır.
Öte yandan, bu devasa sayı dizilerini geleneksel ilişkisel veritabanlarında (SQL) saklamak ve bunlar üzerinde hızlı aramalar yapmak oldukça zordur. İşte bu ihtiyacı karşılamak amacıyla “Vektör Veritabanları (Vector Databases)” geliştirilmiştir. Vektör veritabanları, verileri anlamsal yakınlıklarına göre indeksler. Bir kullanıcı soru sorduğunda, sistem bu soruyu da anında bir vektöre dönüştürür. Ardından, kosinüs benzerliği (cosine similarity) gibi matematiksel yöntemler kullanarak veritabanındaki en yakın vektörleri bulur.
Böylece, kelime birebir eşleşmese bile anlamca en yakın olan belgeler saniyeler içinde tespit edilir. Örneğin, kullanıcı “Cihazım çalışmıyor” yazdığında, sistem “Arıza giderme kılavuzu” belgesini bulabilir. Çünkü her iki ifadenin anlamsal vektörleri birbirine son derece yakındır. Günümüzde PGvector, Milvus, Pinecone ve Qdrant gibi çözümler bu alanda lider konumdadır. Spring AI ise tüm bu veritabanlarıyla tek bir ortak arayüz üzerinden konuşabilmemizi sağlar.
Spring Boot ile RAG Projesi Nasıl Hazırlanır?
Spring Boot ekosistemi, Spring AI projesinin olgunlaşmasıyla birlikte yapay zeka entegrasyonlarında devrim yaratmıştır. Artık Python kullanmadan, tamamen Java dünyasında kalarak güçlü RAG uygulamaları geliştirebiliyoruz. İlk olarak, projemizi oluştururken gerekli olan bağımlılıkları (dependencies) belirlememiz gerekiyor. Spring Initializr kullanarak bir Maven veya Gradle projesi başlatabiliriz.
Bu projede Spring Boot 3.x sürümünü ve Spring AI kütüphanelerini kullanacağız. Gerekli olan temel bağımlılıkları pom.xml dosyamıza ekleyerek işe başlıyoruz. Aşağıdaki kod bloğunda, OpenAI ve PGvector entegrasyonu için gerekli olan bağımlılık tanımlarını görebilirsiniz:
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI OpenAI Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<!-- Spring AI PGvector Store Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
</dependency>
</dependencies>
Bağımlılıkları ekledikten sonra, uygulamamızın harici servislerle nasıl iletişim kuracağını yapılandırmamız gerekir. Bunun için application.yml dosyamıza API anahtarlarımızı ve veritabanı bağlantı bilgilerimizi ekliyoruz. Spring AI, bu yapılandırmaları otomatik olarak okur ve arka planda gerekli olan ChatModel ve VectorStore nesnelerini bizim için oluşturur. Bu sayede, karmaşık bağlantı kodları yazmak zorunda kalmadan doğrudan iş mantığımıza odaklanabiliriz.
Spring AI ile Vektör Veritabanı Entegrasyonu Nasıl Yapılır?
Uygulamamızın veritabanı bağlantılarını tamamladıktan sonra, belgelerimizi vektör veritabanına yükleme aşamasına geçebiliriz. Bu süreç üç temel adımdan oluşur: Belgeleri okumak, bunları küçük parçalara (chunks) ayırmak ve son olarak embedding modellerini kullanarak vektör veritabanına kaydetmek. Spring AI, bu adımların her biri için hazır bileşenler sunar.
Öncelikle, büyük belgeleri doğrudan sisteme yüklemek verimsizdir. Çünkü dil modellerinin belirli bir token sınırı vardır. Bu nedenle, belgeleri daha küçük, anlamlı parçalara bölmeliyiz. Spring AI içerisinde yer alan TokenTextSplitter sınıfı bu işlemi bizim yerimize otomatik olarak gerçekleştirir. Ardından, VectorStore arayüzünü kullanarak bu parçaları veritabanına kaydederiz. Aşağıdaki örnek Java kodunda, bu sürecin nasıl uygulandığını inceleyebilirsiniz:
@Service
public class DocumentService {
private final VectorStore vectorStore;
public DocumentService(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
public void ingestDocument(String content) {
// Metni döküman nesnesine dönüştürüyoruz
Document document = new Document(content);
// Büyük metinleri 500 token'lık parçalara ayırıyoruz
TokenTextSplitter splitter = new TokenTextSplitter(500, 100, 5, 10000, true);
List<Document> splitDocuments = splitter.apply(List.of(document));
// Parçalanmış dökümanları vektör veritabanına kaydediyoruz
this.vectorStore.accept(splitDocuments);
}
}
Bu kod bloğu sayesinde, gönderdiğimiz herhangi bir metin otomatik olarak küçük parçalara ayrılır. Sonrasında Spring AI, arka planda OpenAI’ın embedding servisini çağırarak bu metinlerin vektör karşılıklarını üretir ve PGvector veritabanımıza kaydeder. Sonuç olarak, anlamsal arama yapmaya hazır, son derece güçlü bir veri tabanına sahip oluruz.
Gerçek Dünya Senaryosu: Yerel Bir E-Ticaret SSS Sistemi Nasıl Kurulur?
Konuyu daha iyi pekiştirmek için Türkiye pazarında faaliyet gösteren “HızlıMarket” adında kurgusal bir e-ticaret sitesini ele alalım. Bu firmanın en büyük sorunu, müşterilerden gelen iade ve kargo sorularına anında ve doğru yanıt verememektir. Müşteri temsilcileri sürekli aynı soruları yanıtlamaktan yorulmaktadır. Biz de bu sorunu çözmek için Spring Boot tabanlı bir RAG SSS (Sıkça Sorulan Sorular) botu geliştireceğiz.
Öncelikle, Türkçe dil yapısı sondan eklemeli olduğu için geleneksel arama motorları “iadem”, “iadeye”, “iademiz” gibi kelimeleri eşleştirmekte zorlanır. Ancak embedding modelleri kelimelerin köklerine ve anlamsal değerlerine odaklandığı için bu sorunu tamamen ortadan kaldırır. Firmanın iade politikasını içeren bir metnimiz olduğunu varsayalım: “HızlıMarket üzerinden satın alınan elektronik ürünler, ambalajı açılmadığı sürece 14 gün içinde ücretsiz iade edilebilir. Gıda ürünlerinde ise iade süresi hijyen kuralları gereği 3 gündür.” Bu metni yukarıda yazdığımız DocumentService aracılığıyla vektör veritabanımıza kaydediyoruz.
Bir müşteri sisteme girip “Aldığım kulaklığı iade etmek istiyorum, kaç günüm var?” diye sorduğunda süreç şu şekilde işler:
1. Sistem, kullanıcının sorusunu alır ve vektör araması yapar.
2. Vektör veritabanı, “elektronik ürünler 14 gün içinde iade edilebilir” bilgisini içeren döküman parçasını bulur.
3. Spring Boot, bu bilgiyi (bağlamı) ve kullanıcının sorusunu birleştirerek bir prompt (yönerge) hazırlar.
4. Dil modeli, bu bağlama dayanarak “Kulaklık bir elektronik ürün olduğu için, ambalajını açmadıysanız 14 gün içinde ücretsiz olarak iade edebilirsiniz.” şeklinde harika bir Türkçe yanıt üretir.
Geleneksel kelime araması ile modern vektör araması arasındaki farkları daha net görmek için aşağıdaki karşılaştırma tablosunu inceleyebilirsiniz:
| Özellik | Geleneksel Kelime Araması (SQL LIKE) | Vektör Araması (Spring AI + RAG) |
|---|---|---|
| Arama Mantığı | Birebir kelime eşleşmesine dayanır. | Anlamsal ve kavramsal yakınlığa dayanır. |
| Eş anlamlı Kelimeler | “İade” yazıldığında “geri gönderim” kelimesini bulamaz. | “İade” ile “geri gönderim” arasındaki bağı anlar. |
| Hata Toleransı | Yazım hatalarında sonuç üretemez. | Yazım hatalarını kolayca tolere eder. |
| Yanıt Kalitesi | Sadece ilgili dökümanı listeler. | Doğal ve akıcı bir cevap üretir. |
Bu tablo, RAG sistemlerinin müşteri deneyimini ne kadar kökten değiştirebileceğini açıkça göstermektedir. Dolayısıyla, yerel pazardaki e-ticaret firmaları bu teknolojiyi entegre ederek müşteri memnuniyetini artırırken operasyonel maliyetlerini de ciddi oranda düşürebilirler.
Spring AI ve RAG Sistemlerinde Performans Nasıl Optimize Edilir?
RAG sistemlerini yayına aldıktan sonra, gerçek kullanıcı yükü altında performans sorunları yaşanabilir. Bu nedenle, sistemimizi optimize etmek için bazı ileri düzey teknikleri uygulamamız gerekir. Her şeyden önce, dökümanları parçalama (chunking) stratejimiz çok kritiktir. Parça boyutu (chunk size) çok küçük olursa anlamsal bütünlük kaybolur; çok büyük olursa da dil modeline gereksiz bilgi göndererek maliyetleri artırırız ve modelin kafasını karıştırırız. Genellikle 500 ila 1000 token arasındaki parça boyutları en ideal performansı sunar.
Buna ek olarak, “Metadata Filtering (Metaveri Filtreleme)” tekniğini mutlaka kullanmalıyız. Örneğin, sadece “elektronik” kategorisindeki belgelerde arama yapmak istiyorsak, vektör araması yaparken bunu bir filtre olarak belirtebiliriz. Spring AI, metaveri filtrelerini destekler ve bu sayede arama uzayını daraltarak çok daha hızlı sonuçlar elde etmemizi sağlar. Aşağıdaki kod örneğinde, filtreleme işleminin nasıl yapıldığını görebilirsiniz:
public List<Document> searchWithFilter(String query, String category) {
return this.vectorStore.similaritySearch(
SearchRequest.query(query)
.withTopK(3)
.withFilterExpression("category == '" + category + "'")
);
}
Sonuç olarak, sadece vektör aramasına güvenmek yerine, geleneksel arama yöntemleriyle vektör aramasını birleştiren “Hybrid Search (Hibrit Arama)” modellerini de düşünebiliriz. Bu yöntem, hem kelime eşleşmelerinde hem de anlamsal sorgularda en yüksek doğruluğu elde etmemizi sağlar. Spring Boot ve Spring AI’ın sunduğu bu esnek yapı sayesinde, kurumsal seviyedeki projelerinizi geleceğe hazır hale getirebilirsiniz.
Sıkça Sorulan Sorular (SSS)
Aşağıda, Spring Boot ile RAG ve vektör arama süreçleri hakkında en çok merak edilen soruları ve yanıtlarını bulabilirsiniz:
- Spring AI hangi vektör veritabanlarını destekliyor?
Spring AI; PGvector, Milvus, Pinecone, Qdrant, Redis, Neo4j, Chroma ve Weaviate gibi sektörde popüler olan neredeyse tüm vektör veritabanlarını desteklemektedir. - RAG sistemlerinde veri güvenliği nasıl sağlanır?
Verileriniz kendi yerel veritabanınızda saklanır. Harici dil modellerine sadece kullanıcının sorusuyla eşleşen küçük döküman parçaları gönderilir. Bu sayede tüm veritabanınızı dışarıya açmamış olursunuz. - Embedding üretimi için her zaman harici API’ler mi kullanılmalı?
Hayır, zorunlu değildir. Transformers kütüphaneleri veya yerel olarak barındırdığınız (Ollama gibi) modeller aracılığıyla tamamen yerel (on-premise) embedding üretimi gerçekleştirebilirsiniz. - Token maliyetlerini düşürmek için ne yapmalıyım?
Etkin bir döküman parçalama stratejisi uygulamalı, metaveri filtreleri kullanmalı ve dil modeline gönderilen maksimum döküman sayısını (Top-K parametresini) optimize etmelisiniz.
#Teknoloji #WebGeliştirme #SpringBoot #YapayZeka #RAG