Kuidas kasutada LlamaIndexit: praktiline juhend nullist tootmiseni
Kui oled kunagi proovinud luua otsinguga täiendatud genereerimise (RAG) rakendust ja mõelnud: "Miks on sisestuste, vektorpoe ja viipade ühendamine nii tülikas?", siis sa pole üksi. LlamaIndex on loodud selleks, et muuta see torujuhe kiireks, mõistlikuks ja tootmisvalmiks. Selles praktilises, lahendustele orienteeritud juhendis vaatame läbi, kuidas kasutada LlamaIndexit otsast lõpuni – andmete sisestamine, indekseerimine, päringute tegemine, hindamine ja juurutamine –, et saaksid midagi usaldusväärset tarnida, ilma et sa kaotaksid liimkoodi sisse.
Kasutame küsimustele suunatud struktuuri koos progressiivsete sammude, käivitatavate koodilõikude ja reaalse maailma näpunäidetega. Olenemata sellest, kas prototüüpida vestlusrobotit sisemiste dokumentide jaoks või juurutada teadmusassistenti klientidele, õpid, kuidas LlamaIndexit tõhusalt kasutada, säästes nii päevi.
: LlamaIndex on raamistik, mis aitab sul ühendada oma andmed suurte keelemudelitega indekseerimise, otsingu ja orkestreerimise tööriistade abil – ideaalne RAG-i, agentide ja struktureeritud väljundite jaoks.
Mis on LlamaIndex ja miks seda kasutada?
- LlamaIndex on LLM-i rakenduste andmeraamistik. See pakub ehitusplokke järgmiseks:
- Sisestamine: Laadi faile, veebilehti, andmebaase ja API-sid.
- Tükeldamine ja indekseerimine: Muuda toores sisu päritavateks struktuurideks (vektor-, märksõna-, graafiindeksid).
- Otsing: Too kontekst paindlike strateegiatega (BM25, hübriid, ümberjärjestamine).
- Päringumootorid ja agendid: Koosta otsing, tööriistad ja viipad sidusaks QA-kogemuseks.
- Hindamine ja jälgimine: Hinda otsingu kvaliteeti ja vastuse asjakohasust.
- Millal kasutada LlamaIndexit:
- Sa soovid tugevat RAG-i virna ilma tükeldamist, sisestusi ja otsingut uuesti leiutamata.
- Sa pead kombineerima mitut andmeallikat (PDF-id + Notion + SQL).
- Sa soovid katsetada hübriidotstarbe, ümberjärjestamise või struktureeritud väljunditega.
- Põhiline vaimne mudel, kui õpid, kuidas kasutada LlamaIndexit:
- Andmed → Sõlmed → Indeks → Otsija → Päringumootor → Rakendus
Kiirkäivitus: minimaalne RAG-i ahel
See on kiireim tee töötava prototüübini. Laadime dokumente, ehitame vektoriindeksi ja esitame küsimusi.
# 1) Installi
# 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) Konfigureeri oma mudel + sisestused
os.environ["OPENAI_API_KEY"] = "YOUR_KEY" # või kasuta mis tahes toetatud LLM/sisestuse pakkujat
llm = OpenAI(model="gpt-4o-mini")
embed_model = OpenAIEmbedding(model="text-embedding-3-small")
# 3) Laadi dokumente (nt ./data/*.pdf, .md, .txt)
docs = SimpleDirectoryReader("./data").load_data
# 4) Ehita indeks
index = VectorStoreIndex.from_documents(docs, embed_model=embed_model)
# 5) Loo päringumootor ja esita küsimus
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("What are the key security practices mentioned in the docs?")
print(response)
See ongi põhiline. Siit edasi lisavad reaalsed rakendused paremat tükeldamist, ümberjärjestamist, struktureeritud viipasid ja jälgitavust.
Sisestamine: Too oma andmed (BYOD) õigesti
Kui otsustad, kuidas kasutada LlamaIndexit reaalsete andmete jaoks, vali laadijad, mis vastavad sinu allikatele ja säilitavad struktuuri.
- Failid:
SimpleDirectoryReader, PDF/HTML/Markdown lugejad
- Veeb:
BeautifulSoupWebReader, saidikaardi lugejad
- SaaS: Notion, Confluence, Slack, Google Drive (ühenduste kaudu)
- Andmebaasid: SQL ja vektor-DB-d (Pinecone, Weaviate, Chroma, Elasticsearch)
- Nipp: Normaliseeri metaandmed (pealkiri, autor, URL, created_at). Head metaandmed superlaadivad hiljem ümberjärjestamist ja filtreerimist.
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
Tükeldamine ja sõlmede parserid: prügi sisse, prügi välja
Õige tükeldamise saavutamine on üks olulisemaid samme, kui õpid, kuidas LlamaIndexit tõhusalt kasutada.
- Miks on tükeldamine oluline: Liiga suur → märgib paisumist ja ebaolulist otsingut. Liiga väike → konteksti killustumine.
- Vaikeseaded: Mõistlikud paljudel juhtudel, kuid kohanda oma sisutüübi jaoks.
- Tehnilised dokumendid: 512–1024 märgist koosnevad tükid 10–20% kattuvusega.
- KKK-d: väiksemad tükid (256–512), et hoida küsimuse/vastuse paare tervikuna.
- Juriidiline/poliitika: suuremad tükid (1024–1536), et säilitada definitsioonid + klauslid.
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)]))
Indeksi strateegiad: vektor, märksõna või hübriid?
Õige indeksi valimine on ülioluline. Hea uudis: LlamaIndex võimaldab neid kombineerida.
- Vektoriindeks: Suurepärane semantilise otsingu jaoks. Parim "selgita X" või hägusate päringute jaoks.
- Märksõna (BM25): Tugev täpsete terminite, ID-de, veakoodide, logide jaoks.
- Hübriid: Kombineeri mõlemat; järjestage parimad kandidaadid ümber LLM-i või ristkodeerijaga.
from llama_index.core import VectorStoreIndex, SummaryIndex
from llama_index.core.retrievers import BM25Retriever
from llama_index.core.query_engine import RetrieverQueryEngine
# Vektoriindeks eelnevalt parsitutest sõlmedest
v_index = VectorStoreIndex(nodes)
# BM25 märksõnaotsija
bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=6)
# Hübriid: ühenda kandidaadid, seejärel järjestage ümber
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)
Ümberjärjestamine ja filtrid: suurendage täpsust ilma üle maksmata
Ümberjärjestamine parandab vastuse kvaliteeti, järjestades otsitud tükid ümber vastavalt asjakohasusele.
- Millal ümber järjestada: Kui kasutajad teatavad teemavälistest tsitaatidest või pikkadest, polsterdatud kontekstidest.
- Ristkodeerijad (kahekordne kodeerija sisestusotsing → ristkodeerija ümberjärjestamine)
- LLM-põhine ümberjärjestamine (kulukam, mõnikord nutikam nüansirikaste tekstide puhul)
- Metaandmete filtrid (nt
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]
)
Viipamine ja päringumootorid: otsingust vastusteni
Päringumootor on koht, kus otsing kohtub genereerimisega. Et õppida, kuidas LlamaIndexit tootmises kasutada, kujunda viipad ja vastuse süntees hoolikalt.
- Vastuse sünteesi strateegiad:
- Lihtne "kraam" (aheldamine) väikeste kontekstide jaoks
- Puu või kaardi vähendamine pikemate kontekstide jaoks
- Tsitaadi režiim allikate näitamiseks
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)
- Kohandatud viipad: kohanda tooni, struktureeritud väljundeid või kaitsepiirdeid.
from llama_index.core.prompts import PromptTemplate
qa_tmpl = PromptTemplate(
"""
Sa oled napisõnaline, tõenduspõhine assistent. Kasuta ainult pakutavat konteksti.
Kui sa pole kindel, siis ütle, et sa ei tea. Tagasta JSON koos võtmetega: answer, sources.
Question: {query_str}
Context: {context_str}
"""
)
query_engine = v_index.as_query_engine(text_qa_template=qa_tmpl)
Agendid ja tööriistad: kui otsingust ei piisa
Mõnikord vajavad vastused toiminguid: SQL-i käivitamine, API-de kutsumine või sirvimine. LlamaIndexi agendid koordineerivad tööriistu ja arutluskäiku sinu otsingutoruga.
- Kasutusjuhtumid: KPI armatuurlauad (SQL-i tööriist), tugirobotid (piletiotsingu API), uurimisagendid (veeb + 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.")
Hindamine: ära saada midagi pimesi
Vastutustundlikult LlamaIndexi kasutamise õppimine tähendab nii otsingu kui ka vastuste valideerimist enne kasutuselevõttu.
- Võrguühenduseta hindamine: hinda otsingu meeldetuletust/täpsust märgistatud komplektis.
- Võrguühenduses hindamine: logi kasutaja viipad, mõõda rahulolu, kõrvalekalde määrasid ja hallutsinatsioone.
- Sisse ehitatud: LlamaIndex pakub hindamisabilisi truuduse ja vastuse asjakohasuse jaoks.
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))
- Praktiline latt: sisemiste assistentide puhul sihi >80% "kasulik" hinnangut peamiste päringute puhul enne laiaulatuslikku käivitamist.
Püsivus ja vektorpoed: muuda see skaleeritavaks
Mälus ehitatud indeksid ei sobi reaalsetele töökoormustele. Säilita vektor-DB-s ja luba inkrementaalsed värskendused.
- Populaarsed taustaprogrammid: Pinecone, Weaviate, Chroma, Elasticsearch/OpenSearch, Qdrant.
- Nipp: kasuta nimeruume üürniku või osakonna kohta; hoia metaandmed rikkalikud.
# Näide: 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)
Turvalisus ja juhtimine: osa, mille kõik unustavad
- PII käsitlemine: redigeeri või räsi tundlikke välju sisestamise ajal.
- Juurdepääsu kontrollid: filtreeri kasutaja rollide järgi metaandmete piirangutega.
- Sisu värskus: planeeri uuesti sisestamine; märgi versioonid.
- Ohutus: lisa keeldumispoliitikad ja ainult allika piirangud viipadesse.
# Näide: metaandmetepõhine filtreerimine päringu ajal
retriever = index.as_retriever(similarity_top_k=8)
retriever.metadata_filters = {"department": ["legal", "security"], "published": [True]}
Prototüübist tootmiseni: juurutusmustrid
- Serverimuster: avalda
/query lõpp-punkt; hoia indeks soojas mälus.
- Serveritu konks: külmkäivitused + suured mudelid võivad latentsust kahjustada; kaalu hallatud järeldust.
- Vahemällu salvestamine: salvesta sisestused ja sagedased päringutulemused vahemällu; luba osalised värskendused.
- Jälgitavus: logi otsitud sõlmed, märgikasutus, vastuse pikkus ja kasutaja tagasiside.
# Minimaalne FastAPI ümbris
# 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]}
Reaalse maailma plaanid: vali oma tee
- Sisemine poliitikaassistent
- Indeks: hübriid (BM25 + vektor) ümberjärjestamisega
- Kaitsepiirded: ainult allika režiim; "Ma ei tea" varuvariant
- KPI: poliitikaküsimuste lahendamise määr
- Indeks: tootedokumendid + väljalaskemärkmed + piletid
- Agendid: API tööriist tellimuse/pileti oleku kontrollimiseks
- KPI: esmakontakti lahendus, kõrvalekalle, CSAT
- Indeks: veeb + PDF-id + märkmed; tugev duplikaatide eemaldamine
- Ümberjärjestamine: ristkodeerija; süntees: kaardi vähendamine
- KPI: aeg arusaamani; tsitaadi täpsus
- Tööriistad: SQL-i mootor + RAG mõõdikute definitsioonide kohta
- Juhtimine: rea tasandi poliitikad; päringu audit
Maksumus ja latentsus: hoia see kiire (ja odav)
- Sisestused: pakett, kus võimalik; kasuta väiksemaid mudeleid meeldetuletuse jaoks, järjestage ümber valikuliselt.
- Konteksti suurus: sihi 1–2k märgist kõige asjakohasemaid tükke.
- Vahemällu salvestamine: salvesta kuumade päringute jaoks top-K otsing vahemällu; memoreeri LLM-i kõned räsitutud viipadega.
- Paralleelsus: ventilaatori otsing → ventilaatori ümberjärjestamine, et vähendada saba latentsust.
Levinud vead, kui õpid, kuidas kasutada LlamaIndexit
- Ületükeldamine, mis viib madala, mürarikkama otsinguni
- Metaandmete filtrite puudumine, mis põhjustab ebaoluliste allikate sisse libisemist
- Tuginemine ühele indeksi tüübile kogu sisu jaoks
- Hindamise vahelejätmine; saatmine ilma kvaliteedilatiita
- Indeksite vananemine; ajastatud värskenduse puudumine
Muide: töövoo kiirendamine redaktoris
Kui sa itereerid viipade, tükeldajate ja otsinguseadete kallal, tasub märkida, et AI kodeerimise ja uurimise külgriba nagu Sider.ai võib ahelat kiirendada. Sa saad hoida koodilõikeid, viipasid ja hindamismärkmeid käepärast, genereerida viipade muudatuste erinevusi ja kiiresti testida variatsioone ilma brauserist lahkumata. See on eriti mugav, kui sa näpistad, kuidas kasutada LlamaIndexit erinevate otsingustrateegiate vahel. Samm-sammult kontrollnimekiri: nullist tootmiseni
- Sisesta allikad ja normaliseeri metaandmed
- Häälesta tükisuurused sisutüübi järgi
- Ehita vektor + BM25 indeksid; luba hübriidotstarve
- Lisa ümberjärjestamine ja metaandmete filtrid
- Kohanda viipasid; luba tsitaadid ja keeldumispoliitika
- Hinda truudust ja asjakohasust testkomplektis
- Säilita vektorpoes; luba inkrementaalsed värskendused
- Lisa jälgitavus, vahemällu salvestamine ja RBAC filtrid
- Paki API-sse ja määra SLA-d; dokumenteeri tõrkerežiimid
Peamised järeldused
- Kui sa soovid tugevat RAG-i rakendust, säästab LlamaIndexi kasutamise õppimine nädalaid liimitehnikat.
- Alusta lihtsalt, seejärel kihista hübriidotstarve, ümberjärjestamine ja struktureeritud viipad.
- Hinda enne skaleerimist; säilita indeksid ja jälgi kvaliteeti tootmises.
- Kujunda juhtimine esimesest päevast peale – turvalisus ei ole külge poogitud.
Järgmised sammud
- Prototüübi kiirkäivitus väikeses dokumendikomplektis.
- Katseta hübriidotstarbe ja ümberjärjestajaga.
- Lisa hindamine ja tsitaadid; jälgi kvaliteedimõõdikuid.
- Liigu püsivale vektorpoele ja juuruta API.
KKK
Q1: Milleks kasutatakse LlamaIndexit RAG-i rakendustes?
LlamaIndex aitab sul ühendada oma andmed LLM-idega sisestus-, indekseerimis- ja otsingukomponentide abil. See lihtsustab RAG-i süsteemide ehitamist, käsitledes tükeldamist, vektori-/märksõnaindekseid ja päringu orkestreerimist.
Q2: Kuidas valida LlamaIndexis õige indeksi tüüp?
Kasuta vektoriindeksit semantiliste päringute jaoks, BM25 täpsete vastete jaoks, nagu ID-d või koodid, ja hübriidlähenemist parima üldise meeldetuletuse ja täpsuse jaoks. Paljud meeskonnad kombineerivad mõlemat ja lisavad top-K tulemuste jaoks ümberjärjestamise.
K3: Kuidas ma saan LlamaIndexi kasutamisel täpsust parandada?
Reguleerige tükkide suurusi, lisage rikkalikke metaandmeid, lubage hübriidotsing ja lisage ümberjärjestaja. Rakendage ka hindamine usaldusväärsuse ja asjakohasuse jaoks ning kasutage allikate kuvamiseks tsiteerimisrežiimi.
K4: Kas LlamaIndex töötab minu olemasoleva vektordatiabaasiga?
Jah. LlamaIndex integreerub populaarsete vektorandmebaasidega nagu Pinecone, Weaviate, Chroma, Qdrant ja Elasticsearch. Säilitage indekseid skaleeritavuse ja inkrementaalsete uuenduste jaoks.
K5: Kuidas ma saan LlamaIndexi rakenduse tootmisse juurutada?
Mähkige oma päringumootor API-sse (nt FastAPI), säilitage andmed vektorandmebaasis, lisage vahemällu salvestamine ja jälgitavus ning hinnake pidevalt kvaliteeti. Turvalisuse tagamiseks rakendage metaandmete filtreid ja juurdepääsukontrolli.