Com utilitzar : Una guia pràctica des de zero fins a la producció
Si alguna vegada has intentat crear una aplicació de generació augmentada per recuperació (RAG) i has pensat: «Per què connectar embeddings, magatzems de vectors i prompts és tan complicat?», no ets l'únic. existeix per fer que aquest pipeline sigui ràpid, sensat i preparat per a la producció. En aquesta guia pràctica i orientada a la solució, repassarem com utilitzar de principi a fi (ingesta de dades, indexació, consulta, avaluació i implementació), perquè puguis lliurar alguna cosa fiable sense perdre't en codi d'unió.
Utilitzarem una estructura dirigida per preguntes amb passos progressius, fragments executables i consells del món real. Tant si estàs prototipant un chatbot per a documents interns com si estàs implementant un assistent de coneixement per als clients, aprendre a utilitzar de manera efectiva t'estalviarà dies.
: és un framework que t'ajuda a connectar les teves dades a models de llenguatge grans amb eines d'indexació, recuperació i orquestració, ideal per a RAG, agents i sortides estructurades.
Què és i per què utilitzar-lo?
- LlamaIndex és un framework de dades per a aplicacions LLM. Proporciona blocs de construcció per a:
- Ingesta: Carrega fitxers, pàgines web, bases de dades i API.
- Chunking i indexació: Converteix el contingut brut en estructures consultables (vector, paraula clau, índexs de gràfics).
- Recuperació: Recupera el context amb estratègies flexibles (BM25, híbrid, reclassificació).
- Motors de consulta i agents: Compon la recuperació, les eines i els prompts en una experiència de QA coherent.
- Avaluació i monitoratge: Jutja la qualitat de la recuperació i la rellevància de la resposta.
- Quan utilitzar LlamaIndex:
- Vols una pila RAG robusta sense reinventar el chunking, els embeddings i la recuperació.
- Necessites combinar múltiples fonts de dades (PDF + Notion + SQL).
- T'agradaria experimentar amb la recuperació híbrida, la reclassificació o les sortides estructurades.
- LlamaIndex quan aprenguis a utilitzar LlamaIndex:
- Dades → Nodes → Índex → Recuperador → Motor de consulta → Aplicació
Inici ràpid: El bucle RAG mínim
Aquest és el camí més ràpid cap a un prototip funcional. Carregarem documents, construirem un índex vectorial i farem preguntes.
# 1) Instal·la
# 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) Configura el teu model + embeddings
os.environ["OPENAI_API_KEY"] = "YOUR_KEY" # o utilitza qualsevol proveïdor LLM/embedding compatible
llm = OpenAI(model="gpt-4o-mini")
embed_model = OpenAIEmbedding(model="text-embedding-3-small")
# 3) Carrega documents (p. ex., ./data/*.pdf, .md, .txt)
docs = SimpleDirectoryReader("./data").load_data
# 4) Construeix un índex
index = VectorStoreIndex.from_documents(docs, embed_model=embed_model)
# 5) Crea un motor de consulta i fes una pregunta
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("What are the key security practices mentioned in the docs?")
print(response)
Aquesta és l'essència. A partir d'aquí, les aplicacions reals afegeixen un millor chunking, reclassificació, prompts estructurats i observabilitat.
Ingesta: Porta les teves pròpies dades (BYOD) de la manera correcta
Quan decideixis com utilitzar per a dades reals, tria carregadors que coincideixin amb les teves fonts i preservin l'estructura.
- Fitxers:
SimpleDirectoryReader, lectors de PDF/HTML/Markdown
- Web:
BeautifulSoupWebReader, lectors de sitemap
- SaaS: Notion, Confluence, Slack, Google Drive (mitjançant connectors)
- Bases de dades: SQL i bases de dades vectorials (Pinecone, Weaviate, Chroma, Elasticsearch)
- Consell: Normalitza les metadades (títol, autor, URL, created_at). Les bones metadades sobrealimenten la reclassificació i el filtratge més endavant.
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
Chunking i analitzadors de nodes: Escombraries a dins, escombraries a fora
Fer bé el chunking és un dels passos més importants quan s'aprèn a utilitzar de manera efectiva.
- Per què és important el chunking: Massa gran → inflor de tokens i recuperació irrellevant. Massa petit → fragmentació del context.
- Valors per defecte: Raonables per a molts casos, però ajusta'ls per al teu tipus de contingut.
- Documents tècnics: chunks de 512–1024 tokens amb una superposició del 10–20%.
- Preguntes freqüents: Chunks més petits (256–512) per mantenir intactes els parells de preguntes i respostes.
- Legal/Política: Chunks més grans (1024–1536) per preservar les definicions + clàusules.
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)]))
Estratègies d'índex: Vector, paraula clau o híbrid?
Triar l'índex correcte és crucial. La bona notícia: et permet combinar-los.
- Índex vectorial: Ideal per a la cerca semàntica. Millor per a «explica X» o consultes difuses.
- Paraula clau (BM25): Fort per a termes exactes, identificadors, codis d'error, registres.
- Híbrid: Combina tots dos; reclassifica els millors candidats amb un LLM o un codificador creuat.
from llama_index.core import VectorStoreIndex, SummaryIndex
from llama_index.core.retrievers import BM25Retriever
from llama_index.core.query_engine import RetrieverQueryEngine
# Vector index from pre-parsed nodes
v_index = VectorStoreIndex(nodes)
# BM25 keyword retriever
bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=6)
# Hybrid: merge candidates, then rerank
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)
Reclassificació i filtres: Augmenta la precisió sense pagar de més
La reclassificació millora la qualitat de la resposta reordenant els chunks recuperats segons la rellevància.
- Quan reclassificar: Si els usuaris informen de citacions fora de tema o contextos llargs i encoixinats.
- Codificadors creuats (cerca d'embeddings de bi-codificador → reclassificació de codificador creuat)
- Reclassificació basada en LLM (més costosa, de vegades més intel·ligent en text matisat)
- Filtres de metadades (p. ex.,
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]
)
Prompts i motors de consulta: De la cerca a les respostes
Un motor de consulta és on la recuperació es troba amb la generació. Per dominar com utilitzar en producció, dissenya prompts i la síntesi de respostes amb cura.
- Estratègies de síntesi de respostes:
- «Stuff» simple (concatena) per a contextos petits
- Arbre o map-reduce per a contextos més llargs
- Mode de citació per mostrar les fonts
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)
- Prompts personalitzats: Adapta el to, les sortides estructurades o les proteccions.
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)
Agents i eines: Quan la recuperació no és suficient
De vegades, les respostes requereixen accions: executar SQL, trucar a API o navegar. Els agents de coordinen les eines i el raonament amb el teu pipeline de recuperació.
- Casos d'ús: Panells de control de KPI (eina SQL), bots de suport (API de cerca de tiquets), agents de recerca (web + 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.")
Avaluació: No enviïs a cegues
Aprendre a utilitzar de manera responsable significa validar tant la recuperació com les respostes abans de la implementació.
- Avaluació fora de línia: Jutja el record/precisió de la recuperació en un conjunt etiquetat.
- Avaluació en línia: Registra els prompts dels usuaris, mesura la satisfacció, les taxes de desviació i les al·lucinacions.
- LlamaIndex: LlamaIndex proporciona ajudants d'avaluació per a la fidelitat i la rellevància de la resposta.
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))
- Barrera pràctica: Per als assistents interns, apunta a una qualificació >80% de «útil» en les consultes principals abans del llançament ampli.
Persistència i magatzems de vectors: Fes-ho escalable
Els índexs construïts a la memòria no serviran per a càrregues de treball reals. Persisteix a una base de dades vectorial i permet actualitzacions incrementals.
- Backends populars: Pinecone, Weaviate, Chroma, Elasticsearch/OpenSearch, Qdrant.
- Consell: Utilitza espais de noms per inquilí o departament; mantén les metadades riques.
# Exemple: 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)
Seguretat i governança: La part que tothom oblida
- Gestió de PII: Redacta o aplica hash als camps sensibles durant la ingesta.
- Controls d'accés: Filtra per rols d'usuari amb restriccions de metadades.
- Frescor del contingut: Programa la reingesta; marca les versions.
- Seguretat: Afegeix polítiques de rebuig i restriccions només de font en els prompts.
# Exemple: filtratge basat en metadades en temps de consulta
retriever = index.as_retriever(similarity_top_k=8)
retriever.metadata_filters = {"department": ["legal", "security"], "published": [True]}
Del prototip a la producció: Patrons d'implementació
- Patró de servidor: Exposa un endpoint
/query; mantén l'índex calent a la memòria.
- Trampa sense servidor: Els inicis en fred + els models grans poden perjudicar la latència; considera la inferència gestionada.
- Emmagatzematge en memòria cau: Emmagatzema en memòria cau els embeddings i els resultats de consultes freqüents; permet actualitzacions parcials.
- Observabilitat: Registra els nodes recuperats, l'ús de tokens, la longitud de la resposta i els comentaris dels usuaris.
# Envoltorio FastAPI mínim
# 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]}
Esquemes del món real: Tria el teu camí
- Assistent de política interna
- Índex: Híbrid (BM25 + Vector) amb reclassificació
- Proteccions: Mode només de font; fallback «No ho sé»
- KPI: Taxa de resolució per a preguntes sobre polítiques
- Copilot d'atenció al client
- Índex: Documents del producte + notes de la versió + tiquets
- Agents: Eina API per comprovar l'estat de la comanda/tiquet
- KPI: Resolució del primer contacte, desviació, CSAT
- Índex: Web + PDF + notes; forta deduplicació
- Reclassificació: Codificador creuat; síntesi: map-reduce
- KPI: Temps per a la informació; precisió de la citació
- Eines: Motor SQL + RAG en definicions de mètriques
- Governança: Polítiques de nivell de fila; auditoria de consultes
- KPI: Correcció vs. veritat fonamental
Cost i latència: Mantén-ho ràpid (i barat)
- Embeddings: Processa per lots sempre que sigui possible; utilitza models més petits per al record, reclassifica selectivament.
- Mida del context: Apunta a 1–2k tokens dels chunks més rellevants.
- Emmagatzematge en memòria cau: Emmagatzema en memòria cau la recuperació Top-K per a consultes actives; memoritza les trucades LLM amb prompts hash.
- Paral·lelisme: Recuperació de fan-out → reclassificació de fan-in per reduir la latència de la cua.
Errors comuns en aprendre a utilitzar
- Sobre-chunking, que condueix a una recuperació superficial i sorollosa
- Sense filtres de metadades, cosa que fa que s'introdueixin fonts irrellevants
- Confiar en un sol tipus d'índex per a tot el contingut
- Ometre l'avaluació; enviar sense una barrera de qualitat
- Deixar que els índexs es facin vells; sense actualització programada
Per cert: accelerar el teu flux de treball a l'editor
A mesura que iteris en prompts, chunkers i configuració de recuperació, val la pena assenyalar que una barra lateral de codificació i recerca d'IA com Sider.ai pot accelerar el bucle. Pots mantenir fragments, prompts i notes d'avaluació a mà, generar diferències de canvis de prompt i provar ràpidament variacions sense sortir del teu navegador. Això és especialment útil quan estàs ajustant com utilitzar a través de diferents estratègies de recuperació. Llista de verificació pas a pas: De zero a producció
- Ingereix fonts i normalitza les metadades
- Ajusta les mides dels chunks per tipus de contingut
- Construeix índexs vectorials + BM25; permet la recuperació híbrida
- Afegeix reclassificació i filtres de metadades
- Personalitza els prompts; permet les citacions i la política de rebuig
- Avalua la fidelitat i la rellevància en un conjunt de proves
- Persisteix a un magatzem de vectors; permet actualitzacions incrementals
- Afegeix observabilitat, emmagatzematge en memòria cau i filtres RBAC
- Envolta en una API i estableix SLA; documenta els modes de fallada
Conclusions clau
- Si vols una aplicació RAG robusta, aprendre a utilitzar t'estalviarà setmanes d'enginyeria d'unió.
- Comença de manera senzilla, després superposa la recuperació híbrida, la reclassificació i els prompts estructurats.
- Avalua abans d'escalar; persisteix els índexs i monitora la qualitat en producció.
- Disseny per a la governança des del primer dia; la seguretat no és un complement.
Propers passos
- Prototipa l'inici ràpid en un petit conjunt de documents.
- Experimenta amb la recuperació híbrida i un reclassificador.
- Afegeix avaluació i citacions; rastreja les mètriques de qualitat.
- Mou-te a un magatzem de vectors persistent i implementa una API.
FAQ
Q1:What is LlamaIndex used for in RAG applications?
LlamaIndex helps you connect your data to LLMs with ingestion, indexing, and retrieval components. It streamlines building RAG systems by handling chunking, vector/keyword indexes, and query orchestration.
Q2:How do I choose the right index type in LlamaIndex?
Use a vector index for semantic queries, BM25 for exact matches like IDs or codes, and a hybrid approach for best overall recall and precision. Many teams combine both and add reranking for top‑K results.
P3: Com puc millorar la precisió quan utilitzo LlamaIndex?
Ajusta la mida dels fragments, inclou metadades riques, activa la recuperació híbrida i afegeix un reranquejador. També implementa l'avaluació de la fidelitat i la rellevància, i utilitza el mode de citació per mostrar les fonts.
P4: Pot LlamaIndex funcionar amb la meva base de dades vectorial existent?
Sí. LlamaIndex s'integra amb botigues vectorials populars com Pinecone, Weaviate, Chroma, Qdrant i Elasticsearch. Persisteix els índexs per a l'escalabilitat i les actualitzacions incrementals.
P5: Com desplego una aplicació LlamaIndex a producció?
Embolcalla el teu motor de consultes en una API (per exemple, FastAPI), persisteix les dades en una botiga vectorial, afegeix memòria cau i observabilitat, i avalua la qualitat contínuament. Aplica filtres de metadades i control d'accés per a la seguretat.