Are you an LLM? You can read better optimized documentation at /guides/rag-embeddings.md for this page in Markdown format
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ıt1. 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.