Sekcje bazy wiedzy ▾

Narzędzia

Narzędzia

LlamaIndex + Gonka AI — aplikacje RAG za grosze

LlamaIndex — wiodący framework do budowania RAG-aplikacji i agentów AI w Pythonie (jest też wersja LlamaIndex.TS dla TypeScript). Zajmuje się ładowaniem dokumentów, dzieleniem na fragmenty, indeksowaniem, wyszukiwaniem wektorowym i składaniem odpowiedzi — opisujesz dane, a LlamaIndex zamienia je w system pytań i odpowiedzi na dowolnym LLM.

Problem jest jeden — koszt wnioskowania. RAG z natury jest zasobożerny: na każde pytanie do modelu wysyłane jest zapytanie plus kilka znalezionych fragmentów kontekstu, a do indeksowania dużych kolekcji dochodzą osadzenia. W przypadku produkcji to tysiące zapytań dziennie. W OpenAI ($2.50–15 za 1M tokenów) lub Anthropic ($3–15 za 1M) nawet skromny serwis pytań i odpowiedzi zamienia się w dziesiątki tysięcy dolarów miesięcznie.

LlamaIndex natywnie współpracuje z dowolnym endpointem kompatybilnym z OpenAI poprzez klasę OpenAILike. To oznacza, że JoinGonka Gateway łączy się za pomocą kilku linii kodu — bez niestandardowych dostawców i poprawek. Rezultat: ten sam system RAG działa za $0.0005/1M tokenów na wejściu (wyjście ×3) przez zdecentralizowaną sieć Gonka — setki i tysiące razy taniej niż API w chmurze.

Szybki start: połączenie przez OpenAILike

Klucz API JoinGonka: zarejestruj się na gate.joingonka.ai/register — na start dajemy 10M darmowych tokenów — i utwórz klucz jg-xxx w Dashboardzie.

Instalacja:

pip install llama-index llama-index-llms-openai-like

Dla dowolnego API kompatybilnego z OpenAI, LlamaIndex udostępnia klasę OpenAILike z pakietu llama_index.llms.openai_like. Minimalny przykład zapytania do Gonka:

from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    api_base="https://gate.joingonka.ai/v1",
    api_key="jg-twój-klucz",
    model="Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    is_chat_model=True,            # Gonka to chat-endpoint
    is_function_calling_model=True, # natywne wywołania narzędzi są obsługiwane
    context_window=131072,         # 128K dla Qwen3-235B
    max_tokens=8192,               # limit wyjścia przez Gateway (Qwen)
)

response = llm.complete("Wyjaśnij, czym jest RAG, w trzech zdaniach.")
print(response)

Ważne o OpenAILike: koniecznie ustaw is_chat_model=True — w przeciwnym razie LlamaIndex przejdzie do endpointu uzupełniania, którego u nas nie ma. is_function_calling_model=True włącza natywne wywołania narzędzi. Ustaw context_window zgodnie z modelem, aby LlamaIndex poprawnie dzielił kontekst.

Przykład: potok RAG z silnikiem zapytań

Klasyczny scenariusz LlamaIndex to indeksowanie dokumentów i wykonywanie zapytań za pomocą query_engine. Globalny LLM jest ustawiany raz poprzez Settings.llm, a następnie cały potok automatycznie używa Gonka.

from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    Settings,
)
from llama_index.llms.openai_like import OpenAILike
from llama_index.embeddings.huggingface import HuggingFaceEmbedding

# 1. LLM przez Gonka (raz — globalnie)
Settings.llm = OpenAILike(
    api_base="https://gate.joingonka.ai/v1",
    api_key="jg-twój-klucz",
    model="Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    is_chat_model=True,
    context_window=131072,
    max_tokens=8192,
)

# 2. Lokalne osadzenia (darmowe, bez OpenAI)
Settings.embed_model = HuggingFaceEmbedding(
    model_name="BAAI/bge-small-en-v1.5"
)

# 3. Ładowanie i indeksowanie dokumentów z folderu ./data
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)

# 4. Zapytanie do bazy wiedzy
query_engine = index.as_query_engine()
response = query_engine.query("O czym jest ten dokument?")
print(response)

Krytyczny niuans dotyczący osadzeń: domyślnie VectorStoreIndex używa osadzeń OpenAI (text-embedding-ada-002) — są to oddzielne płatne wywołania do OpenAI, a nie do Gonka. Aby całkowicie odłączyć się od OpenAI, ustaw lokalny model osadzeń poprzez Settings.embed_model (jak w przykładzie powyżej — HuggingFaceEmbedding, pakiet pip install llama-index-embeddings-huggingface). Wtedy generowanie odbywa się przez Gonka, a wektoryzacja — lokalnie i za darmo.

Koszt: jedno zapytanie w potoku RAG (wyszukiwanie + generacja) zużywa ~2–5K tokenów LLM. Przez Gonka to ułamki centa; przez OpenAI/Anthropic — 3–4 rzędy wielkości drożej. W przypadku tysięcy zapytań dziennie różnica zamienia się w dziesiątki tysięcy dolarów oszczędności miesięcznie.

Porównanie kosztów obciążenia RAG

Aplikacja RAG to nie jednorazowy czat, ale stały strumień zapytań: każde pytanie użytkownika pociąga za sobą 2–5 tys. tokenów LLM (samo pytanie plus znalezione fragmenty kontekstu). Obliczmy typowe wolumeny i ich koszt u różnych dostawców. Ceny Gonka przez JoinGonka Gateway: wejście ~$0.0005/1M, wyjście ×3.

ScenariuszTokeny LLMOpenAI / AnthropicJoinGonka Gonka
Jedno pytanie do bazy wiedzy~4K$0.01 — $0.06~$0.000005
Chatbot wsparcia (1 tys. zapytań/dzień)~4M/dzień$10 — $60 dziennie~$0.005 dziennie
Indeksacja + Q&A dla korpusu (1M słów)~5M$12 — $75~$0.006
Usługa produkcyjna, 50 tys. zapytań/mies.~200M/mies.$500 — $3,000 mies.~$0.25 mies.

Na darmowych 10M tokenów można dostroić cały potok RAG, zaindeksować korpus testowy i wykonać tysiące zapytań — i nie wydać ani centa. Na wolumenach produkcyjnych JoinGonka Gateway zamienia RAG z drogiej usługi w pozycję kosztów, którą można w ogóle nie zauważać.

Agenci, wywoływanie narzędzi i wybór modelu

LlamaIndex potrafi nie tylko odpowiadać na podstawie dokumentów, ale także budować agenty z narzędziami. Wszystkie trzy modele Gonka obsługują natywne wywołania narzędzi — agenci wywołują funkcje w sposób ustrukturyzowany, bez parsowania tekstu. Przykład agenta z narzędziem:

import asyncio
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    api_base="https://gate.joingonka.ai/v1",
    api_key="jg-twój-klucz",
    model="Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    is_chat_model=True,
    is_function_calling_model=True,
    context_window=131072,
    max_tokens=8192,
)

def multiply(a: float, b: float) -> float:
    """Mnoży dwie liczby."""
    return a * b

agent = FunctionAgent(
    tools=[multiply],
    llm=llm,
    system_prompt="Jesteś pomocnym asystentem. Do obliczeń używaj narzędzi.",
)

async def main():
    result = await agent.run("Ile to 1234 razy 5678?")
    print(result)

asyncio.run(main())

Wybór modelu (pole model i odpowiednie limity context_window / max_tokens):

Model (model)KontekstMax. wyjścieKiedy wybrać
Qwen/Qwen3-235B-A22B-Instruct-2507-FP8128K8192Domyślny: RAG, agenty, długie odpowiedzi
moonshotai/Kimi-K2.6128K3072Silne rozumowanie i wywoływanie narzędzi
MiniMaxAI/MiniMax-M2.7128K4096Alternatywa dla zadań agentowych

Limit max_tokens przez Gateway — do 8192 dla modelu Qwen3; dla Kimi i MiniMaxa odpowiednio 3072 i 4096. Jeśli max_tokens nie jest ustawiony dla żądania niestrumieniowego, domyślnie zostanie zwrócone do 1500 tokenów — dla odpowiedzi RAG i kroków agenta ustaw wartość jawnie.

TypeScript: dla LlamaIndex.TS istnieje lustrzana ścieżka — klasa OpenAI z pakietu @llamaindex/openai przyjmuje baseURL i apiKey (lub odczytuje zmienne OPENAI_BASE_URL / OPENAI_API_KEY), więc ten sam Gateway łączy się również w stosie Node.js. Jeśli budujesz aplikacje AI również na frameworkach Python, sprawdź również przewodnik po LangChain.

LlamaIndex + Gonka = gotowe do produkcji RAG i agenty za ułamki centa. Połączenie przez OpenAILike (is_chat_model=True), natywne wywoływanie narzędzi, lokalne osadzenia — wejście $0.0005/1M zamiast $2.50–15 w OpenAI. 10M darmowych tokenów wystarczy do uruchomienia całego potoku.

Chcesz wiedzieć więcej?

Zapoznaj się z innymi sekcjami lub zacznij zarabiać GNK już teraz.

Otrzymaj 10M darmowych tokenów →