| name | llm-engineering |
| description | Engenharia com LLMs — design de prompts, RAG, agentes, fine-tuning, APIs (OpenAI, Anthropic, Ollama, LiteLLM), avaliação de modelos, embeddings, vector databases, chains, orquestração com LangChain/LlamaIndex/DSPy e deployment de aplicações com IA. Use sempre que o usuário mencionar LLM, GPT, Claude API, Ollama, RAG, embeddings, vector store, agente de IA, prompt engineering, fine-tuning, langchain, llamaindex, ou qualquer desenvolvimento de aplicação baseada em modelos de linguagem. |
LLM Engineering
Hierarquia de decisão
Problema → Escolha de abordagem:
Simples/pontual → Prompt direto via API
Precisa de contexto → RAG + retrieval
Processo complexo → Agente com ferramentas
Domínio específico → Fine-tuning
Multi-modelo → LiteLLM / gateway
APIs essenciais
Anthropic (Claude)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="Você é um assistente técnico.",
messages=[{"role": "user", "content": "Explique RAG"}]
)
print(response.content[0].text)
OpenAI
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Explique RAG"}]
)
Ollama (local)
import ollama
response = ollama.chat(
model='llama3.2',
messages=[{'role': 'user', 'content': 'Explique RAG'}]
)
LiteLLM (gateway unificado)
from litellm import completion
response = completion(
model="anthropic/claude-sonnet-4-6",
messages=[{"role": "user", "content": "Olá"}]
)
RAG — padrão completo
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=64)
chunks = splitter.split_documents(docs)
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
context_docs = retriever.invoke(query)
context = "\n\n".join(d.page_content for d in context_docs)
prompt = f"""Use apenas o contexto abaixo para responder.
Contexto: {context}
Pergunta: {query}"""
Prompt Engineering — padrões
System prompt estruturado
Você é [papel]. Seu objetivo é [objetivo].
Restrições: [lista]
Formato de saída: [especificação]
Chain-of-Thought
Antes de responder, raciocine passo a passo entre <thinking></thinking>.
Depois dê a resposta final entre <answer></answer>.
Few-shot
Exemplos:
Input: X → Output: A
Input: Y → Output: B
Input: Z → Output: ?
Avaliação de LLMs
def avaliar(pergunta, resposta, gabarito):
prompt = f"""
Pergunta: {pergunta}
Resposta do modelo: {resposta}
Gabarito: {gabarito}
Avalie de 1-5 e explique. Responda em JSON: {{"score": N, "reason": "..."}}
"""
return client.messages.create(model="claude-sonnet-4-6", ...)
Streaming
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Referências adicionais