weightsapi.ИНФЕРЕНЦИЯКонсоль
Навигация
RAG с цитированием источников

RAG с цитированием источников

Небольшой конвейер поиска с проверяемыми идентификаторами источников.

Требования#

Python 3.11 или новее. Без дополнительных пакетов. Установите WEIGHTSAPI_API_KEY на ваш собственный ключ. Для доступа к ИИ требуется вход, одно подтвержденное пополнение на сумму не менее 100 USD, авторизованный ключ API и достаточный доступный кредит для запроса. Каждое последующее пополнение также имеет минимум 100 USD; меньшие остатки остаются пригодными для использования, если они покрывают запрос. Кредит требует проверки транзакции. Проверьте статус сервиса на доступность модели перед отправкой трафика.

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

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

Перед промышленной эксплуатацией#

Этот небольшой пример использует лексическое ранжирование и встроенные образцы источников, поэтому работает независимо. Замените корпус и ранжирование своим поисковиком и убедитесь, что цитаты действительно подтверждают каждое утверждение.