Skip to content

RAG: Embedding + Rerank

RAG (Retrieval-Augmented Generation), modele kendi dokümanlarınızı "okutarak" daha doğru yanıtlar almanın yoludur. Bu rehberde Qevron'un embedding, rerank ve chat modellerini birlikte kullanarak basit bir RAG hattı kuracağız.

Mantık

Kullanıcı sorusu

   ├─▶ 1. Embedding: soru + dokümanlar vektöre çevrilir
   ├─▶ 2. Arama: en yakın dokümanlar bulunur (vektör benzerliği)
   ├─▶ 3. Rerank: adaylar alaka düzeyine göre sıralanır
   └─▶ 4. Chat: en iyi dokümanlar + soru modele verilir → yanıt

1. Dokümanları embedding'e çevirin

python
import os, numpy as np
from openai import OpenAI

client = OpenAI(api_key=os.environ["QEVRON_API_KEY"], base_url="https://app.qevron.ai/v1")

docs = [
    "Qevron istekleri Authorization: Bearer başlığıyla doğrular.",
    "Akış için isteğe stream: true eklenir.",
    "spook-background modeli görselin arka planını siler.",
    "Embedding metni vektöre çevirir; arama için kullanılır.",
]

emb = client.embeddings.create(model="veriEmbedding", input=docs)
doc_vectors = np.array([d.embedding for d in emb.data])

2. Soruyu vektörle ve en yakınları bulun

python
def cosine(a, b):
    return (a @ b) / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-9)

question = "Qevron'da kimlik doğrulama nasıl yapılır?"
q_vec = np.array(client.embeddings.create(model="veriEmbedding", input=question).data[0].embedding)

scores = [cosine(q_vec, dv) for dv in doc_vectors]
top_idx = sorted(range(len(docs)), key=lambda i: scores[i], reverse=True)[:3]
candidates = [docs[i] for i in top_idx]

3. Rerank ile en alakalıyı seçin

Vektör araması hızlıdır ama kabadır. Rerank modeli adayları çok daha isabetli sıralar:

python
import httpx

rr = httpx.post(
    "https://app.qevron.ai/v1/rerank",
    headers={"Authorization": f"Bearer {os.environ['QEVRON_API_KEY']}"},
    json={
        "model": "verirerag",
        "query": question,
        "documents": candidates,
        "top_n": 2,
        "return_documents": True,
    },
).json()

best_docs = [r["document"]["text"] for r in rr["results"]]

4. Modele bağlamı verip yanıt alın

python
context = "\n".join(f"- {d}" for d in best_docs)
resp = client.chat.completions.create(
    model="verinova",
    messages=[
        {"role": "system", "content": "Yalnızca verilen bağlamı kullanarak yanıt ver. Bağlamda yoksa 'bilmiyorum' de."},
        {"role": "user", "content": f"Bağlam:\n{context}\n\nSoru: {question}"},
    ],
)
print(resp.choices[0].message.content)

Üretim için ipuçları

  • Vektör veritabanı kullanın (FAISS, Qdrant, pgvector) — yukarıdaki saf NumPy araması yalnızca örnektir.
  • Dokümanları parçalara bölün (chunking); çok uzun metinleri bölerek embedding'leyin.
  • Bağlamı sınırlayın: yalnızca en iyi N dokümanı modele verin (token tasarrufu).
  • İlgili API'ler: Embeddings · Rerank · Chat.

Qevron — AI gateway. Arpanet / OpenAI / Anthropic / Gemini uyumlu.