weightsapi.INFERENZAConsole
Navigazione
RAG con citazioni

RAG con citazioni

Una piccola pipeline di recupero con ID di origine verificabili.

Requisiti#

Python 3.11 o successivo. Nessun pacchetto aggiuntivo. Imposta WEIGHTSAPI_API_KEY con la tua chiave. L'accesso AI richiede accesso, una ricarica confermata di almeno 100 USD, una chiave API autorizzata e credito disponibile sufficiente per la richiesta. Anche ogni ricarica successiva ha un minimo di 100 USD; saldi residui inferiori restano utilizzabili quando coprono la richiesta. Il credito richiede la verifica della transazione. Controlla lo stato del servizio per la disponibilità dei modelli prima di inviare traffico.

Esegui la ricetta#

import os, json, urllib.request
BASE = os.environ.get("WEIGHTSAPI_BASE_URL", "https://weightsapi.com/v1")
KEY = os.environ["WEIGHTSAPI_API_KEY"]
def chat(messages, model="Qwen/Qwen3-32B", **options):
    payload = dict(model=model, messages=messages, max_tokens=512, **options)
    req = urllib.request.Request(BASE+"/chat/completions", json.dumps(payload).encode(),
        {"Authorization": "Bearer "+KEY, "Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=120) as response:
        return json.load(response)
documents = [
    {"id":"S1","text":"A KV cache reuses attention keys and values from previous tokens."},
    {"id":"S2","text":"Prefill processes the prompt; decode generates new output tokens."},
    {"id":"S3","text":"Longer contexts increase KV cache memory usage."}]
question = "How does caching affect generation?"
terms = set(question.lower().split())
ranked = sorted(documents, key=lambda d: len(terms & set(d["text"].lower().split())), reverse=True)[:2]
context = "\n".join("["+d["id"]+"] "+d["text"] for d in ranked)
r = chat([{"role":"system","content":"Answer only from the sources. Cite [S1], [S2], etc. Say when evidence is missing."},
          {"role":"user","content":context+"\nQuestion: "+question}])
print(r["choices"][0]["message"]["content"])
print("Retrieved sources:", [d["id"] for d in ranked])

Prima della produzione#

Questo piccolo esempio utilizza un ranking lessicale e fonti campione incorporate, in modo da funzionare in modo indipendente. Sostituisci il corpus e il ranking con il tuo retriever e verifica che le citazioni supportino effettivamente ogni affermazione.