0Pricing
AI Engineering Academy · Pelajaran

Memulai dengan Pinecone

Buat indeks Pinecone, masukkan vektor beserta metadata, lakukan kueri kesamaan dengan penyaring, dan kelola namespace untuk memisahkan berbagai koleksi data.

Memulai dengan Pinecone adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa Itu Pinecone?

Pinecone adalah basis data vektor yang sepenuhnya terkelola dan secara otomatis menangani infrastruktur, penskalaan, serta pencadangan. Anda berinteraksi dengannya melalui SDK Python, dengan mengirimkan vektor dan metadata melalui panggilan API. Pinecone menyimpannya di servernya dan menjawab kueri kemiripan dengan latensi rendah, bahkan untuk miliaran vektor.

Pinecone menawarkan tingkat gratis yang memadai untuk pembelajaran dan beban kerja produksi kecil.

Memasang SDK Pinecone

Pasang klien Pinecone dan inisialisasikan dengan kunci API Anda. Simpan kunci API dalam variabel lingkungan — jangan pernah menulis rahasia secara langsung di file sumber. Kelas Pinecone adalah titik masuk utama untuk semua operasi.

# 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)

Membuat Index Pinecone

Index Pinecone adalah koleksi yang menyimpan vektor Anda. Saat membuat Index, Anda harus menentukan dimension (harus sesuai dengan model embedding Anda) dan metric untuk menghitung kemiripan. Untuk embedding OpenAI, gunakan dimension=1536 dan metric='cosine'.

Pembuatan Index bersifat idempoten: spesifikasi tanpa server membuat Index sesuai kebutuhan tanpa mengalokasikan kapasitas terlebih dahulu.

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)

Melakukan Upsert Vektor dengan Metadata

Pinecone menggunakan operasi upsert (menyisipkan atau memperbarui). Setiap vektor memerlukan string id yang unik, values (embedding sebagai daftar float), dan metadata opsional (dict berisi bidang yang dapat difilter). Jika Anda melakukan upsert dengan id yang sudah ada, vektor lama akan digantikan.

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')

Melakukan Kueri pada Index Pinecone

Untuk mencari, sematkan kueri Anda lalu panggil index.query() dengan vektor kueri dan top_k untuk menentukan jumlah hasil yang dikembalikan. Atur include_metadata=True untuk mendapatkan kembali metadata yang tersimpan bersama id dan skor kecocokan.

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}')

Memfilter berdasarkan Metadata

Pinecone mendukung pra-penyaringan — mempersempit pencarian ke vektor yang cocok dengan kondisi metadata sebelum menjalankan ANN. Gunakan parameter filter dengan operator bergaya MongoDB: $eq, $in, $gt, $lt, $and, $or.

Selalu Index bidang metadata yang akan Anda gunakan untuk penyaringan saat membuat Index guna memastikan performa penyaringan.

# 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]}')

Ruang Nama untuk Isolasi Data

Ruang nama Pinecone mempartisi satu Index menjadi segmen-segmen terisolasi. Kueri dalam satu ruang nama tidak pernah mengembalikan hasil dari ruang nama lain, sehingga ruang nama ideal untuk sistem RAG multitenan ketika setiap pelanggan hanya boleh mencari dokumen mereka sendiri.

Baik upsert maupun kueri menerima string namespace opsional. Ruang nama bawaan adalah string kosong.

# 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"])}')

Upsert Batch untuk Korpus Besar

Saat mengindeks ribuan dokumen, bagi vektor Anda ke dalam batch yang masing-masing berisi hingga 100 vektor per panggilan upsert (ukuran batch yang direkomendasikan Pinecone). Batch yang lebih besar dapat mencapai batas ukuran karena batas ukuran muatan sekitar 4MB per permintaan.

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)

Memeriksa Statistik Index

Gunakan index.describe_index_stats() untuk memeriksa jumlah vektor yang tersimpan di setiap ruang nama dan jumlah total vektor. Ini berguna untuk memverifikasi bahwa upsert berhasil diselesaikan dan untuk memantau pertumbuhan Index dari waktu ke waktu.

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')

Menghapus dan Memperbarui Vektor

Gunakan index.delete(ids=[...]) untuk menghapus vektor tertentu berdasarkan id. Untuk memperbarui vektor (misalnya ketika dokumen direvisi), cukup lakukan upsert dengan id yang sama — Pinecone akan menimpa entri yang ada.

Untuk menghapus semua vektor dalam ruang nama (misalnya untuk mengindeks ulang setelah penyegaran penuh), gunakan index.delete(delete_all=True, namespace='...').

# 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')

Harga dan Tingkat Gratis Pinecone

Pinecone menawarkan tingkat tanpa server gratis dengan penyimpanan 2GB, cukup untuk sekitar 300.000 vektor berdimensi 1536. Setelah itu, harga tanpa server mengenakan biaya berdasarkan unit baca dan unit tulis yang digunakan.

Untuk beban kerja produksi, perkirakan biaya bulanan Anda dengan menghitung: (kueri per hari × 30 × biaya per kueri) + (total vektor × biaya penyimpanan). Tanpa server sering kali lebih hemat biaya daripada paket berbasis pod untuk beban kerja dengan lalu lintas yang berubah-ubah.

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Rekayasa AI dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda telah mempelajari: Index Pinecone memerlukan dimensi dan metrik yang sesuai dengan model embedding Anda, operasi upsert menggunakan id unik sehingga pembaruan dokumen cukup dilakukan dengan upsert ulang menggunakan id yang sama, dan ruang nama mengisolasi koleksi vektor dalam satu Index untuk kasus penggunaan multitenan. Selanjutnya, kita akan menjelajahi pgvector, yang menghadirkan pencarian vektor langsung ke PostgreSQL.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memulai dengan Pinecone” gratis?

Ya — teks lengkap “Memulai dengan Pinecone” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memulai dengan Pinecone”?

Buat indeks Pinecone, masukkan vektor beserta metadata, lakukan kueri kesamaan dengan penyaring, dan kelola namespace untuk memisahkan berbagai koleksi data. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?

Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Memulai dengan Pinecone” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Anda Membutuhkan Basis Data Vektor
  2. Memulai dengan Pinecone
  3. pgvector: Penyematan dalam PostgreSQL
  4. Memilih dan Mengukur Kinerja Penyimpanan Vektor
← Kembali ke AI Engineering Academy