weightsapi.INFERENCJAKonsola
Nawigacja
RAG z cytowaniami

RAG z cytowaniami

Niewielki potok wyszukiwania z weryfikowalnymi identyfikatorami źródeł.

Wymagania#

Python 3.11 lub nowszy. Brak dodatkowych pakietów. Ustaw WEIGHTSAPI_API_KEY na własny klucz. Dostęp do AI wymaga zalogowania, jednego potwierdzonego doładowania co najmniej 100 USD, autoryzowanego klucza API i wystarczającego dostępnego kredytu na żądanie. Każde kolejne doładowanie również ma minimum 100 USD; mniejsze pozostałe salda pozostają użyteczne, gdy pokrywają żądanie. Kredyt wymaga weryfikacji transakcji. Sprawdź status usługi pod kątem dostępności modeli przed wysłaniem ruchu.

Uruchom przepis#

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

Przed wdrożeniem produkcyjnym#

Ten niewielki przykład wykorzystuje ranking leksykalny i osadzone przykładowe źródła, dzięki czemu działa niezależnie. Zastąp korpus i ranking własnym retrieverem oraz zweryfikuj, czy cytowania rzeczywiście wspierają każde twierdzenie.