LangChain / LangGraph
O LangChain e o framework mais usado para construir aplicacoes de IA em Python. Como o Tokia e OpenAI-compatible, basta usar ChatOpenAI com o endpoint Tokia — nenhuma dependencia extra.
Instalacao
pip install langchain langchain-openaiConfiguracao basica
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
api_key="sk-...",
base_url="https://api.usetokia.com/v1",
model="gpt-4o-mini",
temperature=0.3,
)Chamada basica (invoke)
from langchain_core.messages import HumanMessage, SystemMessage
response = llm.invoke([
SystemMessage(content="Responda em pt-BR, de forma concisa."),
HumanMessage(content="Qual a capital da Franca?"),
])
print(response.content)Streaming
for chunk in llm.stream("Liste 5 frutas tropicais brasileiras"):
print(chunk.content, end="", flush=True)Chains (Prompt + LLM + Parser)
O padrao mais comum do LangChain: compor prompt template, modelo e parser de saida usando o operador pipe (|):
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_messages([
("system", "Voce e um especialista em {area}. Responda em portugues."),
("human", "{pergunta}"),
])
chain = prompt | llm | StrOutputParser()
resultado = chain.invoke({
"area": "direito tributario",
"pergunta": "ICMS pode incidir sobre frete?"
})
print(resultado)Structured Output
Force o modelo a retornar um schema especifico com with_structured_output:
from pydantic import BaseModel, Field
class Analise(BaseModel):
sentimento: str = Field(description="positivo, negativo ou neutro")
resumo: str = Field(description="resumo em 1 frase")
score: float = Field(description="confianca de 0 a 1")
structured_llm = llm.with_structured_output(Analise)
result = structured_llm.invoke("Adorei o produto, entrega rapida e preco justo!")
print(result.sentimento, result.score)Embeddings
Para RAG e busca semantica, use OpenAIEmbeddings com o endpoint Tokia:
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(
api_key="sk-...",
base_url="https://api.usetokia.com/v1",
model="text-embedding-3-small",
)
vetores = embeddings.embed_documents([
"Como funciona o ICMS?",
"Prazo de entrega do produto",
"Politica de devolucao",
])
print(f"Dimensoes: {len(vetores[0])}")RAG (Retrieval-Augmented Generation)
Exemplo minimo de RAG com documentos em memoria:
from langchain_core.documents import Document
from langchain_community.vectorstores import FAISS
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
docs = [
Document(page_content="O frete e gratis para compras acima de R$ 200."),
Document(page_content="Devolucoes devem ser feitas em ate 30 dias."),
Document(page_content="Parcelamos em ate 12x sem juros no cartao."),
]
vectorstore = FAISS.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever()
prompt = ChatPromptTemplate.from_messages([
("system", "Responda usando APENAS o contexto fornecido:\n\n{context}"),
("human", "{input}"),
])
chain = create_retrieval_chain(
retriever,
create_stuff_documents_chain(llm, prompt),
)
result = chain.invoke({"input": "Qual o prazo de devolucao?"})
print(result["answer"])Tool Calling
from langchain_core.tools import tool
@tool
def consultar_saldo(user_id: str) -> str:
"""Consulta o saldo atual do usuario."""
return "R$ 150,00"
@tool
def listar_modelos(categoria: str) -> str:
"""Lista modelos disponiveis por categoria."""
return "gpt-4o-mini, claude-sonnet-46, gemini-2.5-flash"
llm_with_tools = llm.bind_tools([consultar_saldo, listar_modelos])
response = llm_with_tools.invoke("Qual meu saldo?")
print(response.tool_calls)LangGraph (agentes)
Para fluxos mais complexos com estado e decisoes, use LangGraph. O modelo LLM e o mesmo ChatOpenAI configurado acima — o LangGraph so gerencia o grafo de execucao.
pip install langgraphfrom langgraph.prebuilt import create_react_agent
agent = create_react_agent(llm, tools=[consultar_saldo, listar_modelos])
result = agent.invoke({
"messages": [{"role": "user", "content": "Qual meu saldo e quais modelos de chat tem?"}]
})
for msg in result["messages"]:
print(f"{msg.type}: {msg.content}")Modelos disponiveis
Troque o parametro model para acessar qualquer modelo do catalogo Tokia. Todos passam pelo mesmo endpoint.
gpt-4o-mini— rapido, barato, uso geralclaude-sonnet-46— raciocinio avancado, texto longodeepseek-v3-0324— otimo para codigogemini-2.5-flash— contexto longo (1M tokens)
Proximos passos
- Cookbook — receitas completas com RAG, chatbot, agentes
- Tool Calling — guia detalhado de function calling
- Modelos — catalogo completo