Tecnologia
Consultoria e implementação de LangChain
A prova de conceito ficou pronta rápido e convenceu todo mundo. Meses depois, ninguém consegue dizer por que a resposta mudou. O código atravessa camadas de abstração que ninguém escolheu conscientemente. Uma atualização de biblioteca quebra o que funcionava. E o prompt que decide o comportamento está espalhado por arquivos soltos, sem versão nem dono. A velocidade que trouxe o projeto até aqui é a mesma que agora impede de mexer nele.
Como a gente encara.
O primeiro corte é onde a abstração paga e onde ela só acrescenta camada. O que é uma chamada ao provedor volta a ser uma chamada ao provedor. O prompt sai do meio do código e vira artefato versionado, com histórico e responsável. A recuperação de contexto (retrieval) ganha casos com resposta esperada. A pergunta deixa de ser se parece bom e passa a ser se o trecho recuperado era o certo. Atualizar a biblioteca vira tarefa com teste.
Onde costuma quebrar
Os erros que aparecem sempre, e que ninguém conta na demonstração.
- 01
Abstração adotada onde uma chamada direta ao provedor resolveria. A exceção do provedor em geral sobe inteira, com a mensagem e o código de status que a API devolveu — o que você perde é o caminho até ela. O rastro atravessa as camadas da biblioteca antes de mostrar a linha que importa. E parte dos erros chega reembrulhada numa exceção própria, com a original pendurada na causa. Depurar vira ler pilha de chamada de código que não é seu.
- 02
Versão da biblioteca não fixada em código que precisa de estabilidade. O ecossistema se reorganizou em pacotes separados por provedor e continua se mexendo, então atualização traz mudança de interface, e o que subiu na sexta não sobe igual na segunda.
- 03
Recuperação de contexto (retrieval) montada sem avaliação. O modelo responde bem o bastante para ninguém desconfiar, e não existe nada dizendo se o trecho recuperado (chunk) era o certo ou se a resposta veio do que o modelo já sabia de fábrica.
- 04
Prompt espalhado pelo código em vez de versionado como artefato. Quando a qualidade cai, não há como comparar com a versão anterior, porque versão anterior não existe: existe um commit no meio de outras mudanças.
- 05
Saída do modelo consumida sem validação de formato pelo passo seguinte. O modelo devolve algo quase no formato combinado, a cadeia segue com o valor torto, e a falha aparece longe da causa — num passo que não tem defeito nenhum.
O que custa mais do que parece
- A velocidade inicial é adiantamento, não desconto. O que a abstração poupou na primeira semana volta como camada que alguém precisa entender para depurar, e quem herda o código não estava na conversa em que ela foi escolhida.
- Trocar de provedor, que costuma ser o motivo declarado para adotar a abstração, esbarra no comportamento específico de cada modelo. A interface é a mesma; a chamada de ferramenta (tool calling), o suporte a saída estruturada e a reação ao seu prompt não são. A troca compila e o produto muda.
O que você recebe
- Mapa do que a abstração está de fato resolvendo, com a lista do que pode voltar a ser chamada direta ao provedor.
- Prompts versionados como artefato, com histórico, responsável e o registro de qual versão está em produção.
- Casos de avaliação da recuperação de contexto (retrieval), com resposta esperada e execução automática.
- Dependências fixadas e procedimento de atualização com teste antes do merge.
- Camada de integração isolada, para que trocar de modelo seja mudança em um lugar só, com a reavaliação de comportamento já prevista.
O que fazemos com LangChain
Open source ou enterprise, a frente é a mesma.
Implantar
Do zero, com a arquitetura decidida no diagnóstico e não pelo catálogo do fornecedor.
Migrar
De outra ferramenta, ou de uma versão antiga, com o que já roda continuando a rodar.
Desenvolver em cima
Aplicação, integração e automação construídas sobre LangChain, incluindo o que a ferramenta não faz sozinha.
Sustentar
Operação, custo sob controle e correção de rota depois que entra em produção.
Perguntas diretas.
- Vale usar framework, ou é melhor chamar o provedor direto?
- Se o seu produto faz uma chamada ao modelo, com um prompt e uma resposta, o SDK do provedor resolve e você não precisa de framework nenhum. Adotar um ali é assumir uma dependência que se move, e uma camada a mais entre você e a mensagem de erro, para um problema que você ainda não tem. Framework começa a pagar quando existem muitas peças combinadas — recuperação de contexto, ferramentas, memória, vários provedores — e a cola entre elas já está virando um projeto por conta própria. Boa parte dos produtos de IA que estão no ar nunca chega nesse ponto.
- A resposta veio errada: o problema está na recuperação ou no modelo?
- Dá para separar sem adivinhar. Pegue a pergunta que falhou e olhe o que a recuperação trouxe: se o trecho certo não estava lá, o modelo nunca teve chance e o problema é de recuperação — corte do texto (chunking), embedding ou consulta. Se o trecho certo estava lá, entregue-o na mão ao modelo e refaça a pergunta. Respondeu bem, o problema é de ordenação ou de quantidade de contexto. Respondeu mal de novo, aí sim é prompt ou modelo. Sem essa separação, todo ajuste é tentativa.
- Migrar para outra biblioteca resolve o que está ruim hoje?
- Raramente, porque o que costuma estar ruim não é a biblioteca. Prompt sem versão, recuperação sem avaliação e ausência de rastro por chamada atravessam a migração inteira e chegam do outro lado iguais. A troca custa a reescrita, o período de duas implementações no ar e o retrabalho de comparar comportamento. Vale quando a dependência é o problema concreto — interface que muda a cada atualização, ou peso que você não usa. Se a queixa é a qualidade da resposta, trocar de biblioteca é mexer no lugar errado.
Antes de escolher a ferramenta
A ferramenta é consequência da arquitetura. Nunca a premissa.
Esta página existe porque alguém procura por esse nome. Mas a escolha certa sai do diagnóstico do seu cenário, não do catálogo de quem vende. Se a resposta for outra ferramenta, ou nenhuma, é isso que você vai ouvir.
Não está na lista? Não é impedimento, é conversa. O que decide não é o nome do produto, é o problema que ele precisa resolver.