Tokia

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

bash
pip install llama-index llama-index-llms-openai-like llama-index-embeddings-openai

Configuracao

Configure o LLM e o modelo de embeddings globalmente via Settings:

python
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.

python
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:

python
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

python
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:

python
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:

python
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 volume
  • claude-sonnet-46 — melhor qualidade para sintese de documentos longos
  • gemini-2.5-flash — suporta contexto de ate 1M tokens

Proximos passos