weightsapi.ВИСНОВОККонсоль
Навігація
RAG із цитатами

RAG із цитатами

Крихітний конвеєр пошуку з перевірюваними ідентифікаторами джерел.

Вимоги#

Python 3.11 або новіше. Без додаткових пакетів. Встановіть WEIGHTSAPI_API_KEY на ваш власний ключ. Доступ до ШІ вимагає входу, одного підтвердженого поповнення на суму не менше 100 доларів США, авторизованого ключа API та достатнього доступного кредиту для запиту. Кожне наступне поповнення також має мінімум 100 доларів США; менші залишки залишаються придатними, якщо вони покривають запит. Кредит вимагає перевірки транзакції. Перевірте статус сервісу щодо доступності моделей перед надсиланням трафіку.

Запуск рецепта#

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

Перед використанням у виробництві#

Цей невеликий приклад використовує лексичне ранжування та вбудовані зразки джерел, тому працює незалежно. Замініть корпус і ранжування на власний пошуковий механізм і перевірте, чи цитати справді підтверджують кожне твердження.