Yazılım Mimarileri ve Tasarım Desenleri Üzerine

.NET’te PgVector İle Basit Vector Search İşlemi

.NET'te PgVector İle Basit Vector Search İşlemi
Merhaba,

Bu içeriğimizde, PostgreSQL veritabanına vektör (embedding) saklama ve benzerlik arama (similarity search) yeteneği kazandıran open source bir eklenti olan PgVector’ü, .NET kapsamında Aspire teknolojisi üzerinden ve Ollama eşliğinde inceleyecek ve deneyimleyeceğiz.

PgVector Ne İşe Yarar?

PgVector, PostgreSQL veritabanını yalnızca verileri saklayan klasik bir veritabanı olmaktan çıkarıp, verilerin anlamlarını da karşılaştırabilen bir yapıya dönüştüren eklentidir. Özellikle yapay zeka uygulamalarında, anlamsal aramaların (semantic search) PostgreSQL ile gerçekleştirilebilmesi için tercih edilmekte ve böylece chatbot’lar da, RAG sistemlerinde, akıllı arama motorlarında veya öneri sistemlerinin büyük kısmında bu amaçla kullanılmaktadır.

Şimdi bu kullanım noktalarına tek tek odaklanırsak eğer;

PostgreSQL İçin Aspire İle Nasıl Altyapı Sağlanır?

Şimdi PgVector’ü Aspire altyapısıyla nasıl yapılandırabileceğimizi tam teferruatlı bir şekilde inceleyelim istiyorum. Bunun için içeriğimizin ilk satırlarında bahsedildiği gibi Ollama platformundan istifade edeceğiz. Tabi bu platformu bilgisayarımıza kurabileceğimiz gibi docker ortamında da ayağa kaldırabiliriz. Hatta Aspire’daki Ollama (bknz : CommunityToolkit.Aspire.Hosting.Ollama) kütüphanesinden de istifade edebiliriz. Malum… Bizler Aspire ile temelleri atacağımızdan dolayı tüm servislerin sorumluluğunu haliyle Aspire’a verecek ve onun üzerinden yapılandırıyor olacağız. Ayrıca embedding sürecinde Ollama platformu üzerinde ayağa kaldıracağımız qwen3-embedding modelini kullanacağız.

Şimdi bunun için boş bir Aspire projesi oluşturalım ve aşağıdaki adımları sıralı bir şekilde seyrediyor olalım…

İşte bu kadar… 🙂
Böylece yaptığımız çalışma neticesinde PgVector eşliğinde Vector Search davranışını rahatlıkla uygulayabildiğimizi pratik bir şekilde tecrübe etmiş bulunuyoruz.

Nihai olarak;
İçerik boyunca görüldüğü üzere, uygulamalarımıza anlamsal arama (semantic search) davranışını eklemek için özel bir vektör veritabanına ihtiyacımız bulunmamaktadır. PosgreSQL, PgVector ile yeni bir altyapıya gerek duyulmaksızın vektör depolama ve similarity search davranışını rahatlıkla sağlamaktadır. Üstelik bu yetkinliği, mevcut ilişkisel verilerimizle aynı ortamda, aynı sorgu diliyle ve Dapper/EF Core gibi alışkın olduğumuz araçları kullanarak, operasyonel karmaşıklığı büyük ölçüde azaltarak sağlamaktadır. Bunların yanında Aspire’ın sunduğu orkestrasyon yeteneği sayesinde Ollama ve PostgreSQL altyapısını tek bir merkezden ayağa kaldırabilmekte, HNSW indeksleme ve kosinüs benzerliği gibi güçlü vektör operasyonlarını oldukça hızlı ve tereddütsüz bir şekilde devreye alabilmekteyiz.

Kısacası; PgVector, RAG sistemlerinden chatbot hafızasına, öneri motorlarından görsel benzerlik aramaya kadar geniş bir yelpazede, mevcut PostgreSQL yatırımımızı ziyan etmeden yapay zeka destekli uygulamalar geliştirmemizin en pratik ve sağlam yollarından biri olarak karşımıza çıkmaktadır. Şayet sizler de ekosistemde yeni teknolojiler arayışındaysanız, özellikle mevcut PostgreSQL altyapınızın ne kadar ileriye gidebildiğini PgVector ile bir kez daha değerlendirmenizi tavsiye etmekteyim.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Örnek çalışmaya aşağıdaki GitHub reposundan erişebilirsiniz.
https://github.com/gncyyldz/Vector.Search.With.PgVector
Bu repository, ilgili konuya dair örnek çalışmanın kaynak kodlarını ve mimari yapısını içermektedir. Detaylar için GitHub üzerinden incelemede bulunabilirsiniz.


GitHub’da Görüntüle →

Mobil sürümden çık