weightsapi.INFERENCIAConsola
Navegación
RAG con citas

RAG con citas

Una pequeña canalización de recuperación con identificadores de fuente verificables.

Requisitos#

Python 3.11 o más reciente. No se requieren paquetes adicionales. Establezca WEIGHTSAPI_API_KEY con su propia clave. El acceso a IA requiere inicio de sesión, una recarga confirmada de al menos USD 100, una clave API autorizada y suficiente crédito disponible para la solicitud. Cada recarga posterior también tiene un mínimo de USD 100; los saldos restantes más pequeños siguen siendo utilizables cuando cubren la solicitud. El crédito requiere verificación de la transacción. Verifique el estado del servicio para conocer la disponibilidad del modelo antes de enviar tráfico.

Ejecutar la receta#

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

Antes de producción#

Este pequeño ejemplo utiliza clasificación léxica y fuentes de muestra integradas para ejecutarse de forma independiente. Sustituya el corpus y la clasificación por su recuperador, y verifique que las citas realmente respalden cada afirmación.