Pinecone ile Başlangıç
Bir Pinecone dizini oluşturun, vektörleri üst verilerle birlikte ekleyin veya güncelleyin, süzgeçlerle benzerlik sorguları gerçekleştirin ve farklı veri koleksiyonlarını ayırmak için ad alanlarını yönetin.
Pinecone ile Başlangıç, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Pinecone Nedir
Pinecone, altyapıyı, ölçeklemeyi ve yedeklemeleri otomatik olarak yöneten, tamamen yönetilen bir vektör veritabanıdır. Verileri ve üst verileri API çağrıları aracılığıyla göndererek onunla bir Python SDK üzerinden etkileşim kurarsınız. Pinecone bunları kendi sunucularında depolar ve milyarlarca vektör olsa bile benzerlik sorgularını düşük gecikmeyle yanıtlar.
Öğrenme ve küçük ölçekli üretim iş yükleri için yeterli olan ücretsiz bir katman sunar.
Pinecone SDK'sını Kurma
Pinecone istemcisini kurun ve API anahtarınızla başlatın. API anahtarını bir ortam değişkeninde saklayın — gizli bilgileri kaynak dosyalarına asla sabit olarak yazmayın. Pinecone sınıfı, tüm işlemler için ana giriş noktasıdır.
# pip install pinecone-client
import os
from pinecone import Pinecone
pc = Pinecone(api_key=os.environ['PINECONE_API_KEY'])
# List existing indexes to verify connection
existing = pc.list_indexes().names()
print('Existing indexes:', existing)Pinecone Dizini Oluşturma
Pinecone index, vektörlerin depolandığı koleksiyondur. Bir index oluştururken dimension değerini (gömme modelinizle eşleşmelidir) ve benzerlik hesaplamasında kullanılacak metric değerini belirtmeniz gerekir. OpenAI gömmeleri için dimension=1536 ve metric='cosine' kullanın.
Index oluşturma işlemi eşdurumludur: sunucusuz belirtim, kapasiteyi önceden ayırmadan index'i gerektiğinde oluşturur.
from pinecone import Pinecone, ServerlessSpec
import os
pc = Pinecone(api_key=os.environ['PINECONE_API_KEY'])
index_name = 'my-rag-index'
if index_name not in pc.list_indexes().names():
pc.create_index(
name=index_name,
dimension=1536, # text-embedding-3-small dimension
metric='cosine',
spec=ServerlessSpec(
cloud='aws',
region='us-east-1'
)
)
print(f'Created index: {index_name}')
else:
print(f'Index already exists: {index_name}')
index = pc.Index(index_name)Üst Verilerle Vektörleri Upsert Etme
Pinecone, upsert (ekleme veya güncelleme) işlemlerini kullanır. Her vektör için benzersiz bir id dizesi, values (kayan noktalı sayıların listesi olarak gömme) ve isteğe bağlı metadata (filtrelenebilir alanları içeren bir sözlük) gerekir. Mevcut bir id ile upsert yaparsanız eski vektör değiştirilir.
from openai import OpenAI
oai = OpenAI()
documents = [
{'id': 'doc-001', 'text': 'What is RAG and how does it work?', 'category': 'faq'},
{'id': 'doc-002', 'text': 'Pinecone is a managed vector database.', 'category': 'docs'},
{'id': 'doc-003', 'text': 'OpenAI embeddings have 1536 dimensions.', 'category': 'docs'}
]
texts = [d['text'] for d in documents]
resp = oai.embeddings.create(model='text-embedding-3-small', input=texts)
vectors = [
{
'id': doc['id'],
'values': resp.data[i].embedding,
'metadata': {'text': doc['text'], 'category': doc['category']}
}
for i, doc in enumerate(documents)
]
index.upsert(vectors=vectors)
print(f'Upserted {len(vectors)} vectors')Pinecone Dizinini Sorgulama
Arama yapmak için sorgunuzu gömün ve sorgu vektörüyle birlikte kaç sonuç döndürüleceğini belirtmek üzere top_k kullanarak index.query() işlevini çağırın. Eşleşme kimlikleri ve puanlarının yanında depolanan üst verileri de almak için include_metadata=True ayarlayın.
from openai import OpenAI
oai = OpenAI()
query = 'How many dimensions do OpenAI embeddings have?'
q_resp = oai.embeddings.create(model='text-embedding-3-small', input=query)
q_vec = q_resp.data[0].embedding
results = index.query(
vector=q_vec,
top_k=3,
include_metadata=True
)
for match in results['matches']:
score = match['score']
text = match['metadata']['text']
print(f'{score:.4f}: {text}')Üst Verilere göre Filtreleme
Pinecone, ANN çalıştırılmadan önce aramayı bir üst veri koşuluyla eşleşen vektörlerle daraltan ön filtrelemeyi destekler. MongoDB tarzı işleçlerle filter parametresini kullanın: $eq, $in, $gt, $lt, $and, $or.
Filtre performansını güvence altına almak için index'i oluştururken filtrelemeyi planladığınız üst veri alanlarını her zaman dizinleyin.
# Filter to only 'docs' category results
results = index.query(
vector=q_vec,
top_k=5,
filter={
'category': {'$eq': 'docs'}
},
include_metadata=True
)
print(f'Filtered results: {len(results["matches"])}')
for m in results['matches']:
print(f' [{m["metadata"]["category"]}] {m["metadata"]["text"][:60]}')Veri Yalıtımı için Ad Alanları
Pinecone namespaces, tek bir index'i yalıtılmış bölümlere ayırır. Bir ad alanındaki sorgular hiçbir zaman başka bir ad alanından sonuç döndürmez. Bu nedenle ad alanları, her müşterinin yalnızca kendi belgelerinde arama yapması gereken çok kiracılı RAG sistemleri için idealdir.
Hem upsert hem de query isteğe bağlı bir namespace dizesi kabul eder. Varsayılan ad alanı boş bir dizedir.
# Upsert into a specific namespace
index.upsert(
vectors=[{'id': 'doc-001', 'values': q_vec, 'metadata': {'text': 'Tenant A doc'}}],
namespace='tenant-a'
)
# Query only tenant-a's documents
results = index.query(
vector=q_vec,
top_k=5,
namespace='tenant-a',
include_metadata=True
)
print(f'Tenant-A results: {len(results["matches"])}')Büyük Derlemeler için Toplu Upsert
Binlerce belgeyi dizinlerken vektörlerinizi, her upsert çağrısında en fazla 100 vektör olacak şekilde gruplara ayırın (Pinecone'un önerdiği grup boyutu). İstek başına yaklaşık 4 MB olan yük boyutu kısıtı nedeniyle daha büyük gruplar boyut sınırlarına takılabilir.
def batch_upsert(index, vectors, batch_size=100):
total = len(vectors)
for start in range(0, total, batch_size):
batch = vectors[start:start + batch_size]
index.upsert(vectors=batch)
print(f'Upserted {min(start + batch_size, total)}/{total}')
# Usage:
# batch_upsert(index, all_vectors, batch_size=100)Dizin İstatistiklerini Denetleme
Her ad alanında kaç vektör depolandığını ve toplam vektör sayısını denetlemek için index.describe_index_stats() kullanın. Bu, bir upsert işleminin başarıyla tamamlandığını doğrulamak ve index'in zaman içindeki büyümesini izlemek için yararlıdır.
stats = index.describe_index_stats()
print(f'Total vectors: {stats["total_vector_count"]}')
print(f'Namespaces:')
for ns, info in stats.get('namespaces', {}).items():
print(f' {ns!r}: {info["vector_count"]} vectors')Vektörleri Silme ve Güncelleme
Belirli vektörleri kimliklerine göre kaldırmak için index.delete(ids=[...]) kullanın. Bir vektörü güncellemek için (örneğin bir belge gözden geçirildiğinde) aynı kimlikle upsert yapmanız yeterlidir — Pinecone mevcut girdinin üzerine yazar.
Bir ad alanındaki tüm vektörleri silmek için (örneğin tam yenilemeden sonra yeniden dizinleme amacıyla) index.delete(delete_all=True, namespace='...') kullanın.
# Delete specific vectors by id
index.delete(ids=['doc-001', 'doc-002'])
# Update a vector (upsert overwrites by id)
index.upsert(vectors=[{
'id': 'doc-003',
'values': q_vec, # new embedding
'metadata': {'text': 'Updated content.'}
}])
# Delete all vectors in a namespace
# index.delete(delete_all=True, namespace='tenant-a')Pinecone Fiyatlandırması ve Ücretsiz Katman
Pinecone, 2 GB depolama içeren ve 1536 boyutlu yaklaşık 300.000 vektör için yeterli olan ücretsiz bir sunucusuz katman sunar. Bunun ötesinde sunucusuz fiyatlandırma, kullanılan okuma ve yazma birimleri başına ücretlendirilir.
Üretim iş yükleri için aylık maliyetinizi şu hesabı yaparak tahmin edin: (günlük sorgu sayısı × 30 × sorgu başına maliyet) + (toplam vektör sayısı × depolama maliyeti). Değişken trafiğe sahip iş yüklerinde sunucusuz seçenek, pod tabanlı planlardan genellikle daha uygun maliyetlidir.
Kısa Test
Bu dersteki yapay zekâ mühendisliği kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: Pinecone dizinlerinin gömme modelinizle eşleşen bir boyut ve ölçüm gerektirmesi, upsert işlemlerinde benzersiz bir id kullanılması sayesinde bir belgeyi güncellemenin aynı id ile yeniden upsert etmekten ibaret olması ve ad alanlarının, çok kiracılı kullanım senaryoları için tek bir index içindeki vektör koleksiyonlarını yalıtması. Sırada, vektör aramasını doğrudan PostgreSQL'e getiren pgvector'ı inceleyeceğiz.
Sıkça Sorulan Sorular
“Pinecone ile Başlangıç” dersi ücretsiz mi?
Evet — “Pinecone ile Başlangıç” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Pinecone ile Başlangıç” dersinde ne öğreneceğim?
Bir Pinecone dizini oluşturun, vektörleri üst verilerle birlikte ekleyin veya güncelleyin, süzgeçlerle benzerlik sorguları gerçekleştirin ve farklı veri koleksiyonlarını ayırmak için ad alanlarını yö… AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Pinecone ile Başlangıç” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Neden Vektör Veritabanına İhtiyacınız Var
- Pinecone ile Başlangıç
- pgvector: PostgreSQL'de Gömme
- Vektör Depolarını Seçme ve Karşılaştırmalı Ölçme