LlamaIndex
O LlamaIndex e um framework focado em RAG (Retrieval-Augmented Generation) e indexacao de documentos. Conecte ao Tokia usando OpenAILike como LLM e OpenAIEmbedding para vetores.
Instalacao
pip install llama-index llama-index-llms-openai-like llama-index-embeddings-openaiConfiguracao
Configure o LLM e o modelo de embeddings globalmente via Settings:
from llama_index.core import Settings
from llama_index.llms.openai_like import OpenAILike
from llama_index.embeddings.openai import OpenAIEmbedding
Settings.llm = OpenAILike(
api_base="https://api.usetokia.com/v1",
api_key="sk-...",
model="gpt-4o-mini",
is_chat_model=True,
)
Settings.embed_model = OpenAIEmbedding(
api_base="https://api.usetokia.com/v1",
api_key="sk-...",
model="text-embedding-3-small",
)RAG basico (documentos locais)
O caso de uso mais comum: indexar arquivos de uma pasta e fazer perguntas sobre eles.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("./meus-docs").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("O que diz sobre politica de devolucao?")
print(response)O SimpleDirectoryReader le PDF, DOCX, TXT, CSV e Markdown. Os documentos sao divididos em chunks, vetorizados via Tokia (embeddings) e armazenados em memoria.
Chat engine (conversa com documentos)
Para manter historico de conversa enquanto consulta os documentos:
chat_engine = index.as_chat_engine(chat_mode="condense_plus_context")
r1 = chat_engine.chat("Qual o prazo de garantia?")
print(r1)
r2 = chat_engine.chat("E se o produto vier com defeito?")
print(r2)Streaming
query_engine = index.as_query_engine(streaming=True)
streaming_response = query_engine.query("Resuma o documento principal")
for text in streaming_response.response_gen:
print(text, end="", flush=True)Persistencia (salvar e carregar index)
Para evitar re-indexar a cada execucao, salve o index em disco:
from llama_index.core import StorageContext, load_index_from_storage
index.storage_context.persist(persist_dir="./storage")
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index_carregado = load_index_from_storage(storage_context)Filtros por metadados
Adicione metadados aos documentos para filtrar na busca:
from llama_index.core import Document
docs = [
Document(
text="Frete gratis acima de R$ 200",
metadata={"categoria": "logistica", "atualizado": "2026-01"},
),
Document(
text="Parcelamento em ate 12x sem juros",
metadata={"categoria": "pagamento", "atualizado": "2026-03"},
),
]
index = VectorStoreIndex.from_documents(docs)
from llama_index.core.vector_stores.types import MetadataFilters, ExactMatchFilter
filters = MetadataFilters(filters=[
ExactMatchFilter(key="categoria", value="pagamento"),
])
query_engine = index.as_query_engine(filters=filters)
response = query_engine.query("Quais opcoes de parcelamento?")
print(response)Trocar de modelo
Mude o parametro model em OpenAILike para usar qualquer modelo do catalogo Tokia:
gpt-4o-mini— rapido e barato, ideal para RAG de alto volumeclaude-sonnet-46— melhor qualidade para sintese de documentos longosgemini-2.5-flash— suporta contexto de ate 1M tokens
Proximos passos
- Cookbook — receita completa de RAG com embeddings
- LangChain — alternativa com mais flexibilidade de chains
- API de Embeddings — referencia do endpoint /v1/embeddings