Sekcje bazy wiedzy ▾

Nawigacja

▸ Zacznij tutaj Według ról

Kategorie

Narzędzia 32
Słownik 12

Narzędzia

LlamaIndex + Gonka AI — aplikacje RAG za grosze

LlamaIndex to wiodący framework do budowania aplikacji RAG oraz agentów AI w Pythonie (dostępna jest również wersja TypeScript: LlamaIndex.TS). Zajmuje się on ładowaniem dokumentów, dzieleniem na chunki, indeksowaniem, wyszukiwaniem wektorowym i składaniem odpowiedzi — Ty opisujesz dane, a LlamaIndex przekształca je w system pytań i odpowiedzi oparty na dowolnym LLM.

Istnieje tylko jeden problem — koszt inferencji. RAG z natury jest zasobożerny: na każde pytanie do modelu wysyłany jest prompt oraz kilka znalezionych fragmentów kontekstu, a przy indeksowaniu dużych kolekcji dochodzą jeszcze embeddingi. W skali produkcyjnej są to tysiące zapytań dziennie. Przy cenach OpenAI ($2.50–15 za 1M tokenów) lub Anthropic ($3–15 za 1M) nawet skromny serwis pytań i odpowiedzi zamienia się w koszty rzędu dziesiątek tysięcy dolarów miesięcznie.

LlamaIndex natywnie współpracuje z dowolnym endpointem zgodnym z OpenAI poprzez klasę OpenAILike. Oznacza to, że JoinGonka Gateway podłącza się w zaledwie kilku liniach — bez customowych providerów czy patchy. Wynik: ten sam system RAG działa za $0.003/1M tokenów na wejściu (wyjście ×3) poprzez zdecentralizowaną sieć Gonka — setki i tysiące razy taniej niż w przypadku chmurowych API.

Szybki start: połączenie przez OpenAILike

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

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="MiniMaxAI/MiniMax-M2.7",
    is_chat_model=True,            # Gonka to chat-endpoint
    is_function_calling_model=True, # natywne tool calling jest wspierane
    context_window=200000,         # 200K dla modeli sieci
    max_tokens=8192,               # limit wyjścia przez Gateway
)

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

Ważne odnośnie OpenAILike: upewnij się, że podałeś is_chat_model=True — w przeciwnym razie LlamaIndex przejdzie do endpointu completion, którego nie posiadamy. is_function_calling_model=True włącza natywne tool calls. context_window ustawiaj zgodnie z modelem, aby LlamaIndex poprawnie dzielił kontekst.

Przykład: potok RAG z silnikiem zapytań

Klasyczny scenariusz LlamaIndex — indeks oparty na Twoich dokumentach i zapytania do niego przez query_engine. Globalny LLM ustawia się raz przez Settings.llm, następnie cały pipeline używa Gonka automatycznie.

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="MiniMaxAI/MiniMax-M2.7",
    is_chat_model=True,
    context_window=200000,
    max_tokens=8192,
)

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

# 3. Ładowanie i indeksacja 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 embeddingów: domyślnie VectorStoreIndex używa embeddingów OpenAI (text-embedding-ada-002) — to osobne płatne wywołania do OpenAI, a nie do Gonka. Aby całkowicie odejść od OpenAI, ustaw lokalny model embeddingów przez Settings.embed_model (jak w przykładzie powyżej — HuggingFaceEmbedding, pakiet pip install llama-index-embeddings-huggingface). Wtedy generacja odbywa się przez Gonka, a wektoryzacja — lokalnie i za darmo.

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

Porównanie kosztów obciążenia RAG

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

ScenariuszTokenów LLMOpenAI / AnthropicJoinGonka Gonka
Jedno pytanie do bazy wiedzy~4K$0.01 — $0.06~$0.00002
Chatbot wsparcia (1K zapytań/dzień)~4M/dzień$10 — $60/dzień~$0.019/dzień
Indeksowanie + Q&A dla korpusu (1M słów)~5M$12 — $75~$0.024
Serwis produkcyjny, 50K zapytań/mies.~200M/mies.$500 — $3,000/mies.~$0.96/mies.

Dzięki bezpłatnym 10M tokenów możesz przetestować cały pipeline RAG, zindeksować testowy korpus i wysłać tysiące zapytań — nie wydając ani centa. W skali produkcyjnej JoinGonka Gateway zmienia RAG z drogiej usługi w wydatek, którego można wręcz nie zauważyć.

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

LlamaIndex potrafi nie tylko odpowiadać na podstawie dokumentów, ale także budować agentów z narzędziami. Oba modele Gonka wspierają natywne tool calling — 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="MiniMaxAI/MiniMax-M2.7",
    is_chat_model=True,
    is_function_calling_model=True,
    context_window=200000,
    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 jest 1234 razy 5678?")
    print(result)

asyncio.run(main())

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

Model (model)KontekstMaks. wyjścieKiedy wybierać
moonshotai/Kimi-K2.6200K8192Domyślnie: silne wnioskowanie, tool calling, agenci
MiniMaxAI/MiniMax-M2.7200K8192RAG, długi kontekst, długie odpowiedzi

Limit max_tokens przez Gateway wynosi do 8192 dla wszystkich modeli sieci. Jeśli max_tokens nie jest ustawiony dla zapytania nie-strumieniowego, domyślnie zostanie zwrócone do 1500 tokenów — dla odpowiedzi RAG i kroków agenta ustawiaj 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 także na frameworkach Pythonowych, zobacz również przewodnik po LangChain.

LlamaIndex + Gonka = production-ready RAG i agenci za ułamek centa. Połączenie przez OpenAILike (is_chat_model=True), natywny tool calling, lokalne embeddingi — wejście $0.003/1M zamiast $2.50–15 w OpenAI. 10M darmowych tokenów wystarczy, aby dopracować cały pipeline.

Chcesz wiedzieć więcej?

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

Otrzymaj 10M darmowych tokenów →