Kako koristiti : Praktični vodič od nule do produkcije
Ako ste ikada pokušali da napravite aplikaciju za generisanje obogaćeno preuzimanjem (RAG) i pomislili: „Zašto je povezivanje ugrađivanja, vektorskih baza podataka i upita tako komplikovano?“, niste jedini. postoji da bi taj proces bio brz, razuman i spreman za produkciju. U ovom praktičnom vodiču orijentisanom na rešenja, proći ćemo kroz to kako da koristite od početka do kraja – unos podataka, indeksiranje, upite, evaluaciju i primenu – tako da možete da isporučite nešto pouzdano bez gubljenja u bespotrebnom kodu.
Koristićemo strukturu vođenu pitanjima sa progresivnim koracima, izvršnim isečcima koda i savetima iz stvarnog sveta. Bilo da pravite prototip chatbot-a za interne dokumente ili primenjujete pomoćnika za znanje za korisnike, učenje kako da efikasno koristite će vam uštedeti dane.
: je okvir koji vam pomaže da povežete svoje podatke sa velikim jezičkim modelima pomoću alata za indeksiranje, preuzimanje i orkestraciju – idealan za RAG, agente i strukturirane izlaze.
Šta je i zašto ga koristiti?
- LlamaIndex je okvir podataka za LLM aplikacije. Pruža gradivne blokove za:
- Unos: Učitavanje datoteka, veb stranica, baza podataka i API-ja.
- Grupisanje i indeksiranje: Pretvaranje sirovog sadržaja u strukture koje se mogu pretraživati (vektorski, ključni, graf indeksi).
- Preuzimanje: Preuzimanje konteksta pomoću fleksibilnih strategija (BM25, hibridno, ponovno rangiranje).
- Upitni motori i agenti: Sastavljanje preuzimanja, alata i upita u koherentno QA iskustvo.
- Evaluacija i monitoring: Procena kvaliteta preuzimanja i relevantnosti odgovora.
- Kada koristiti LlamaIndex:
- Želite robustan RAG stek bez ponovnog izmišljanja grupisanja, ugrađivanja i preuzimanja.
- Potrebno je da kombinujete više izvora podataka (PDF-ovi + + SQL).
- Želite da eksperimentišete sa hibridnim preuzimanjem, ponovnim rangiranjem ili strukturiranim izlazima.
- LlamaIndex prilikom učenja kako da koristite LlamaIndex:
- Podaci → Čvorovi → Indeks → Preuzimač → Upitni motor → Aplikacija
Brzi početak: Minimalna RAG petlja
Ovo je najbrži put do radnog prototipa. Učitavamo dokumente, gradimo vektorski indeks i postavljamo pitanja.
# 1) Instalacija
# pip install llama-index llama-index-embeddings-openai llama-index-llms-openai
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
# 2) Konfigurišite svoj model + ugrađivanja
os.environ["OPENAI_API_KEY"] = "YOUR_KEY" # ili koristite bilo kog podržanog LLM/embedding provajdera
llm = OpenAI(model="gpt-4o-mini")
embed_model = OpenAIEmbedding(model="text-embedding-3-small")
# 3) Učitavanje dokumenata (npr., ./data/*.pdf, .md, .txt)
docs = SimpleDirectoryReader("./data").load_data
# 4) Izgradnja indeksa
index = VectorStoreIndex.from_documents(docs, embed_model=embed_model)
# 5) Kreiranje upitnog motora i postavljanje pitanja
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("What are the key security practices mentioned in the docs?")
print(response)
To je suština. Odavde, stvarne aplikacije dodaju bolje grupisanje, ponovno rangiranje, strukturirane upite i mogućnost posmatranja.
Unos: Donesite svoje podatke (BYOD) na pravi način
Kada odlučujete kako da koristite za stvarne podatke, izaberite učitavače koji odgovaraju vašim izvorima i čuvaju strukturu.
- Datoteke:
SimpleDirectoryReader, čitači PDF/HTML/Markdown
- Veb:
BeautifulSoupWebReader, čitači mapa sajta
- SaaS: , , , (preko konektora)
- Baze podataka: SQL i vektorske baze podataka (, , , )
- Savet: Normalizujte metapodatke (naslov, autor, URL, created_at). Dobri metapodaci kasnije superpune ponovno rangiranje i filtriranje.
from llama_index.core import SimpleDirectoryReader
from llama_index.readers.web import SimpleWebPageReader
file_docs = SimpleDirectoryReader("./policies").load_data
web_docs = SimpleWebPageReader(html_to_text=True).load_data
all_docs = file_docs + web_docs
Grupisanje i parseri čvorova: Loš unos, loš izlaz
Pravilno grupisanje je jedan od najvažnijih koraka prilikom učenja kako da efikasno koristite .
- Zašto je grupisanje važno: Preveliko → preopterećenje tokenima i irelevantno preuzimanje. Premalo → fragmentacija konteksta.
- Podrazumevane vrednosti: Razumne za mnoge slučajeve, ali podesite za vaš tip sadržaja.
- Tehnička dokumentacija: 512–1024 tokena sa 10–20% preklapanja.
- FAQ: Manji delovi (256–512) da bi se Q/A parovi održali netaknutim.
- Pravno/Politika: Veći delovi (1024–1536) da bi se sačuvale definicije + klauzule.
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core import Document
parser = SentenceSplitter(chunk_size=800, chunk_overlap=100)
nodes = []
for d in all_docs:
nodes.extend(parser.get_nodes_from_documents([Document(text=d.text, metadata=d.metadata)]))
Strategije indeksiranja: Vektorsko, ključno ili hibridno?
Izbor pravog indeksa je ključan. Dobra vest: vam omogućava da ih kombinujete.
- Vektorski indeks: Odličan za semantičko pretraživanje. Najbolji za „objasni X“ ili nejasne upite.
- Ključna reč (BM25): Snažan za tačne termine, ID-ove, kodove grešaka, logove.
- Hibridno: Kombinujte oba; ponovo rangirajte najbolje kandidate pomoću LLM-a ili unakrsnog enkodera.
from llama_index.core import VectorStoreIndex, SummaryIndex
from llama_index.core.retrievers import BM25Retriever
from llama_index.core.query_engine import RetrieverQueryEngine
# Vektorski indeks iz prethodno parsiranih čvorova
v_index = VectorStoreIndex(nodes)
# BM25 preuzimač ključnih reči
bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=6)
# Hibridno: spajanje kandidata, zatim ponovno rangiranje
from llama_index.core.retrievers import RouterRetriever
from llama_index.retrievers.merge import MergerRetriever
v_retriever = v_index.as_retriever(similarity_top_k=6)
hybrid = MergerRetriever(retrievers=[v_retriever, bm25_retriever], top_k=8)
query_engine = RetrieverQueryEngine.from_args(retriever=hybrid)
Ponovno rangiranje i filteri: Povećajte preciznost bez preplaćivanja
Ponovno rangiranje poboljšava kvalitet odgovora preuređivanjem preuzetih delova prema relevantnosti.
- Kada ponovo rangirati: Ako korisnici prijave citate van teme ili duge, podstavljene kontekste.
- Unakrsni enkoderi (pretraga ugrađivanja bi-enkodera → ponovno rangiranje unakrsnog enkodera)
- Ponovno rangiranje zasnovano na LLM-u (skuplje, ponekad pametnije na nijansiranom tekstu)
- Filteri metapodataka (npr.,
source == 'handbook', created_at > 2024-01-01)
from llama_index.postprocessor.flag_embedding_reranker import FlagEmbeddingReranker
from llama_index.core.query_engine import RetrieverQueryEngine
reranker = FlagEmbeddingReranker(top_n=5, model="BAAI/bge-reranker-base")
query_engine = v_index.as_query_engine(
similarity_top_k=12,
node_postprocessors=[reranker]
)
Podsticanje i upitni motori: Od pretrage do odgovora
Upitni motor je mesto gde se preuzimanje susreće sa generisanjem. Da biste savladali kako da koristite u produkciji, pažljivo dizajnirajte upite i sintezu odgovora.
- Sinteza odgovora strategije:
- Jednostavno „naguravanje“ (konkatenacija) za male kontekste
- Stablo ili smanjenje mape za duže kontekste
- Režim citiranja za prikaz izvora
from llama_index.core.response_synthesizers import get_response_synthesizer
from llama_index.core import ServiceContext
synth = get_response_synthesizer(response_mode="tree_summarize")
query_engine = v_index.as_query_engine(response_synthesizer=synth)
ans = query_engine.query("Summarize the onboarding steps and cite sources.")
print(ans)
- Prilagođeni upiti: Prilagodite ton, strukturirane izlaze ili zaštitne ograde.
from llama_index.core.prompts import PromptTemplate
qa_tmpl = PromptTemplate(
"""
You are a terse, evidence-first assistant. Use only the provided context.
If unsure, say you don't know. Return JSON with keys: answer, sources.
Question: {query_str}
Context: {context_str}
"""
)
query_engine = v_index.as_query_engine(text_qa_template=qa_tmpl)
Agenti i alati: Kada preuzimanje nije dovoljno
Ponekad odgovori zahtevaju radnje: pokretanje SQL-a, pozivanje API-ja ili pregledanje. agenti koordiniraju alate i rezonovanje sa vašim cevovodom za preuzimanje.
- Slučajevi upotrebe: KPI kontrolne table (SQL alat), botovi za podršku (API za pretragu tiketa), agenti za istraživanje (veb + RAG).
from llama_index.core.agent import ReActAgent
from llama_index.tools.sql import SQLQueryEngineTool
from sqlalchemy import create_engine
engine = create_engine("sqlite:///analytics.db")
sql_tool = SQLQueryEngineTool.from_engine(engine)
agent = ReActAgent.from_tools([sql_tool], llm=llm, verbose=True)
agent.chat("What was monthly churn in Q2 2025? If needed, query the DB.")
Evaluacija: Nemojte isporučivati na slepo
Učenje kako da odgovorno koristite znači validaciju i preuzimanja i odgovora pre uvođenja.
- Offline eval: Procenite opoziv/preciznost preuzimanja na označenom skupu.
- Online eval: Evidentirajte korisničke upite, merite zadovoljstvo, stope skretanja i halucinacije.
- LlamaIndex: LlamaIndex pruža pomoćnike za evaluaciju za vernost i relevantnost odgovora.
from llama_index.core.evaluation import FaithfulnessEvaluator, RelevancyEvaluator
faith = FaithfulnessEvaluator(llm=llm)
rel = RelevancyEvaluator(llm=llm)
pred = query_engine.query("List SOC 2 control families in our policy.")
print("faithful?", faith.evaluate_response(pred))
print("relevant?", rel.evaluate_response(pred))
- Praktična granica: Za interne pomoćnike, ciljajte >80% ocene „korisno“ na vrhunskim upitima pre širokog lansiranja.
Upornost i vektorske baze podataka: Učinite ga skalabilnim
Indeksi izgrađeni u memoriji neće uspeti za stvarna opterećenja. Sačuvajte u vektorskoj bazi podataka i omogućite inkrementalna ažuriranja.
- Qdrant: Qdrant, Qdrant, Qdrant, Qdrant/Qdrant, Qdrant.
- Savet: Koristite prostore imena po zakupcu ili odeljenju; neka metapodaci budu bogati.
# Primer: Chroma
# pip install chromadb llama-index-vector-stores-chroma
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
import chromadb
chroma_client = chromadb.PersistentClient(path="./chroma_store")
collection = chroma_client.get_or_create_collection("company_knowledge")
vector_store = ChromaVectorStore(chroma_collection=collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(all_docs, storage_context=storage_context)
Sigurnost i upravljanje: Deo koji svi zaboravljaju
- Rukovanje PII: Redigujte ili heširajte osetljiva polja tokom unosa.
- Kontrole pristupa: Filtrirajte po ulogama korisnika sa ograničenjima metapodataka.
- Svežina sadržaja: Zakažite ponovni unos; označite verzije.
- Sigurnost: Dodajte politike odbijanja i ograničenja samo izvora u upitima.
# Primer: filtriranje zasnovano na metapodacima u vreme upita
retriever = index.as_retriever(similarity_top_k=8)
retriever.metadata_filters = {"department": ["legal", "security"], "published": [True]}
Od prototipa do produkcije: Obrasci primene
- Serverski obrazac: Izložite
/query krajnju tačku; neka indeks bude topao u memoriji.
- Serverski bez servera: Hladni startovi + veliki modeli mogu da naškode latenciji; razmotrite upravljano zaključivanje.
- Keširanje: Keširajte ugrađivanja i česte rezultate upita; omogućite delimična ažuriranja.
- Mogućnost posmatranja: Evidentirajte preuzete čvorove, upotrebu tokena, dužinu odgovora i povratne informacije korisnika.
# Minimalni FastAPI omotač
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI
qe = index.as_query_engine(llm=llm)
@app.post("/query")
async def query(payload: dict):
q = payload.get("q", "")
resp = qe.query(q)
return {"answer": str(resp), "sources": [s.node.metadata for s in resp.source_nodes]}
Nacrti iz stvarnog sveta: Izaberite svoj put
- Interni pomoćnik za politiku
- Indeks: Hibridni (BM25 + vektorski) sa ponovnim rangiranjem
- Zaštitne ograde: Režim samo izvora; „Ne znam“ povratna opcija
- KPI: Stopa rešavanja za pitanja politike
- Kopilot korisničke podrške
- Indeks: Dokumenti o proizvodu + beleške o izdanju + tiketi
- Agenti: API alat za proveru statusa porudžbine/tiketa
- KPI: Rešavanje prvog kontakta, skretanje, CSAT
- Indeks: Veb + PDF-ovi + beleške; snažna deduplikacija
- Ponovno rangiranje: Unakrsni enkoder; sinteza: smanjenje mape
- KPI: Vreme do uvida; tačnost citiranja
- Alati: SQL motor + RAG na definicijama metrike
- Upravljanje: Politike na nivou reda; revizija upita
- KPI: Ispravnost u odnosu na osnovnu istinu
Troškovi i latencija: Neka bude brzo (i jeftino)
- Ugrađivanja: Grupišite gde je moguće; koristite manje modele za opoziv, ponovo rangirajte selektivno.
- Veličina konteksta: Ciljajte na 1–2k tokena najrelevantnijih delova.
- Keširanje: Keširajte preuzimanje top‑K za popularne upite; memorišite LLM pozive sa heširanim upitima.
- Paralelizam: Preuzimanje ventilatora → ponovno rangiranje ventilatora da bi se smanjila latencija repa.
Uobičajene zamke prilikom učenja kako da koristite
- Prekomerno grupisanje, što dovodi do plitkog, bučnog preuzimanja
- Nema filtera metapodataka, što uzrokuje da se irelevantni izvori uvuku
- Oslanjanje na jedan tip indeksa za sav sadržaj
- Preskakanje evaluacije; isporuka bez kvaliteta
- Dozvoljavanje da indeksi zastare; nema zakazanog osvežavanja
Usput: Ubrzavanje vašeg toka rada u uređivaču
Dok ponavljate upite, grupisanje i podešavanja preuzimanja, vredi napomenuti da AI kodiranje i bočna traka za istraživanje kao što je Sider.ai može ubrzati petlju. Možete držati isečke, upite i beleške o evaluaciji pri ruci, generisati razlike u promenama upita i brzo testirati varijacije bez napuštanja pregledača. Ovo je posebno korisno kada podešavate kako da koristite u različitim strategijama preuzimanja. Kontrolna lista korak po korak: Od nule do produkcije
- Unesite izvore i normalizujte metapodatke
- Podesite veličine delova po tipu sadržaja
- Izgradite vektorske + BM25 indekse; omogućite hibridno preuzimanje
- Dodajte ponovno rangiranje i filtere metapodataka
- Prilagodite upite; omogućite citate i politiku odbijanja
- Procenite vernost i relevantnost na testnom skupu
- Sačuvajte u vektorskoj bazi podataka; omogućite inkrementalna ažuriranja
- Dodajte mogućnost posmatranja, keširanje i RBAC filtere
- Umotajte u API i postavite SLA; dokumentujte režime neuspeha
Ključni zaključci
- Ako želite robusnu RAG aplikaciju, učenje kako da koristite će uštedeti nedelje inženjeringa.
- Počnite jednostavno, a zatim slojevito hibridno preuzimanje, ponovno rangiranje i strukturirane upite.
- Procenite pre nego što skalirate; sačuvajte indekse i pratite kvalitet u produkciji.
- Dizajnirajte za upravljanje od prvog dana – sigurnost nije dodatak.
Sledeći koraci
- Napravite prototip brzog starta na malom skupu dokumenata.
- Eksperimentišite sa hibridnim preuzimanjem i ponovnim rangiranjem.
- Dodajte evaluaciju i citate; pratite metrike kvaliteta.
- Pređite na trajnu vektorsku bazu podataka i primenite API.
FAQ
Q1: Za šta se koristi u RAG aplikacijama?
vam pomaže da povežete svoje podatke sa LLM-ovima pomoću komponenti za unos, indeksiranje i preuzimanje. Pojednostavljuje izgradnju RAG sistema rukovanjem grupisanjem, vektorskim/ključnim indeksima i orkestracijom upita.
Q2: Kako da izaberem pravi tip indeksa u ?
Koristite vektorski indeks za semantičke upite, BM25 za tačna podudaranja kao što su ID-ovi ili kodovi, i hibridni pristup za najbolji ukupni opoziv i preciznost. Mnogi timovi kombinuju oba i dodaju ponovno rangiranje za top‑K rezultate.
P3: Kako mogu poboljšati preciznost kada koristim LlamaIndex?
Podesite veličinu delova teksta (chunk sizes), uključite bogate metapodatke, omogućite hibridno pretraživanje i dodajte "reranker". Takođe, implementirajte evaluaciju za vernost i relevantnost, i koristite režim citiranja (citation mode) da biste prikazali izvore.
P4: Da li LlamaIndex može da radi sa mojom postojećom vektorskom bazom podataka?
Da. LlamaIndex se integriše sa popularnim vektorskim bazama podataka kao što su Pinecone, Weaviate, Chroma, Qdrant i Elasticsearch. Sačuvajte indekse za skalabilnost i inkrementalna ažuriranja.
P5: Kako da implementiram LlamaIndex aplikaciju u produkciji?
Umotajte vaš upitni mehanizam u API (npr. FastAPI), sačuvajte podatke u vektorskoj bazi podataka, dodajte keširanje i mogućnost nadzora (observability) i kontinuirano procenjujte kvalitet. Primenite filtere metapodataka i kontrolu pristupa radi bezbednosti.