LangChain é uma estrutura de orquestração de código aberto para o desenvolvimento de aplicativos com grandes modelos de linguagem (LLMs). Disponível em bibliotecas Python e Java, as ferramentas e APIs do LangChain simplificam o processo de criação de aplicativos baseados em LLM, como chatbots e agentes virtuais.
O LangChain atua como uma interface genérica para praticamente qualquer LLM, proporcionando um ambiente de desenvolvimento centralizado para construir aplicativos LLM e integrá-los a fontes de dados externas e fluxos de trabalho de software. A abordagem baseada em módulos da LangChain permite que desenvolvedores e cientistas de dados comparem de forma dinâmica diversas instruções e até mesmo diversos modelos de base com necessidade mínima de reescrever código. Esse ambiente modular também possibilita programas que utilizam vários LLMs: por exemplo, um aplicativo que utiliza um LLM para interpretar consultas de usuários e outro LLM para criar respostas.
Lançado por Harrison Chase em outubro de 2022, o LangChain teve uma ascensão meteórica à proeminência: em junho de 2023, era o projeto de código aberto que mais crescia no Github.1 Coincidindo com o importante lançamento do ChatGPT da OpenAI no mês seguinte, o LangChain desempenhou um papel significativo ao tornar a IA generativa mais acessível para os entusiastas, na esteira de sua ampla popularidade.
O LangChain pode facilitar a maioria dos casos de uso de LLMs e de processamento de linguagem natural (NLP), como chatbots, pesquisa inteligente , respostas a perguntas, serviços de resumo ou até mesmo agentes virtuais capazes de automatizar processos robóticos.
Os LLMs não são aplicativos independentes: são modelos estatísticos treinados previamente que devem ser combinados com um aplicativo (e em alguns casos fontes de dados específicas) para atender sua finalidade.
Por exemplo, o Chat-GPT não é um LLM: é um aplicativo de chatbot que, dependendo da versão escolhida, utiliza o modelo de idioma GPT-3,5 ou GPT-4. Embora seja o modelo GPT que interpreta a entrada do usuário e compõe uma resposta em linguagem natural, é o aplicativo que (entre outras coisas) apresenta uma interface para o usuário digitar e ler e um design de UX que controla a experiência do chatbot. Mesmo no nível corporativo, o Chat-GPT não é o único aplicativo que utiliza o modelo GPT: a Microsoft utiliza o GPT-4 para impulsionar o Bing Chat.
Além disso, embora os modelos de base (como os que alimentam os LLMs) sejam treinados previamente em conjuntos de dados maciços, eles não são oniscientes. Se uma determinada tarefa exigir acesso a informações contextuais específicas, como documentação interna ou conhecimento do domínio, os LLMs deverão estar conectados a essas fontes de dados externas. Mesmo que você queira somente que seu modelo reflita o conhecimento em tempo real dos eventos atuais, ele exige informações externas: os dados internos de um modelo são atualizados somente durante o período durante o qual ele foi treinado previamente.
Da mesma forma, se uma determinada tarefa de IA generativa exigir acesso a fluxos de trabalho de software externos, por exemplo, se você quiser que seu agente virtual integre-se ao Slack, precisará de uma maneira de integrar o LLM à API desse software.
Embora geralmente essas integrações possam ser obtidas com código totalmente manual, estruturas de orquestração como LangChain e a plataforma IBM watsonx simplificam muito o processo. Elas também facilitam muito a realização de experimentos com diversos LLMs para comparar os resultados, pois modelos diferentes podem ser trocados com alterações mínimas no código.
De blockchain a contêineres, IA e sistemas operacionais e tudo o que há entre eles, nossos desenvolvedores estão criando projetos emergentes de código aberto e cercando-os com código, documentos e materiais de suporte para você participar da inovação.
Assinar boletins informativos da IBM
No núcleo do LangChain há um ambiente de desenvolvimento que otimiza a programação de aplicativos de LLM por meio do uso de abstração: a simplificação do código por representar um ou mais processos complexos como um componente nomeado que engloba todas as etapas de constituição.
As abstrações são um elemento comum da vida cotidiana e da linguagem. Por exemplo, "π" nos permite representar a razão entre o comprimento da circunferência de um círculo e o de seu diâmetro sem ter que escrever seus dígitos infinitos. Da mesma forma, um termostato nos permite controlar a temperatura em nossa casa sem precisar entender os circuitos complexos que isso implica. Basta sabermos como diversas configurações de termostato se traduzem em temperaturas diferentes.
O LangChain é essencialmente uma biblioteca de abstrações para Python e Javascript, representando etapas e conceitos comuns necessários para trabalhar com modelos de linguagem. Esses componentes modulares, como funções e classes de objetos, servem como blocos de construção de programas de IA generativos. Podem ser "encadeados" para criar aplicativos, minimizando a quantidade de código e o entendimento refinado necessário para executar tarefas complexas de PNL. Embora a abordagem abstrata da LangChain possa limitar até que ponto um programador especializado pode personalizar uma aplicação de forma refinada, ela possibilita que especialistas e recém-chegados experimentem e criem protótipos rapidamente.
Quase qualquer LLM pode ser usado no LangChain. É fácil importar modelos de idioma no LangChain, desde que você tenha uma chave da API. A classe LLM foi projetada para oferecer uma interface padrão para todos os modelos.
A maioria dos provedores de LLM exigirá que você crie uma conta para receber uma chave de API. Algumas dessas APIs, especialmente aquelas para modelos proprietários de código fechado, como as oferecidas pela OpenAI ou pela Anthropic, podem ter custos associados.
Muitos modelos de código aberto, como o BLOOM da BigScience, o LLaMa da Meta IA e o Flan-T5 do Google, podem ser acessados por meio do Hugging Face (link fora do ibm.com). O IBM watsonx, por meio de sua parceria com a Hugging Face, também oferece um conjunto selecionado de modelos de código aberto. A criação de uma conta com qualquer um dos serviços permitirá gerar uma chave de API para qualquer um dos modelos oferecidos por esse provedor.
O LangChain não está limitado a modelos de base prontos para uso: a CustomLLM class (link fora do ibm.com) permite wrappers LLM personalizados. Da mesma forma, você pode usar as APIs do IBM Watsonx e o Python SDK, que incluem uma integração com o LangChain, para criar aplicativos no LangChain com modelos que você já treinou ou ajustou para suas necessidades específicas com a classe WatsonxLLM (e o ID de projeto específico do modelo).
Os prompts são as instruções apresentadas a um LLM. Geralmente, a "arte" de redigir prompts que efetivamente entregam o contexto necessário para que o LLM interprete a entrada e a saída da estrutura da maneira mais útil para você é chamada de engenharia rápida.
A classe PromptTemplate em LangChain formaliza a composição de prompts sem a necessidade de codificar manualmente o contexto e as consultas. Elementos importantes de um prompt também são inseridos como classes formais, como input_variables. Um modelo de prompt pode, portanto, conter e reproduzir contexto, instruções (como "não usar termos técnicos"), um conjunto de exemplos para orientar suas respostas (no que é chamado de "prompt few-shot"), um formato de saída definido ou uma pergunta padronizada a ser respondida. Você pode salvar e nomear um modelo de prompt estruturado de forma eficaz e reutilizá-lo facilmente, conforme necessário.
Embora esses elementos possam ser codificados manualmente, os módulos do PromptTemplate possibilitam uma integração tranquila com outros recursos do LangChain, como as cadeias epônimas.
Como seu nome implica, cadeias são o núcleo dos fluxos de trabalho do LangChain. Combinam LLMs com outros componentes, criando aplicativos por meio da execução de uma sequência de funções.
A cadeia mais básica é a LLMChain. Ela apenas chama um modelo e um modelo de prompt para esse modelo. Por exemplo, imagine que você salvou um prompt como "ExamplePrompt" e deseja executá-lo contra Flan-T5. Você pode importar LLMChain de langchain.chains, definir chain_example = LLMChain(llm = flan-t5, prompt = ExamplePrompt). Para executar a cadeia para uma determinada entrada, basta chamar chain_example.run("input")."
Para utilizar a saída de uma função como entrada para a próxima função, você pode utilizar SimpleSequentialChain. Cada função pode utilizar prompts diferentes, ferramentas diferentes, parâmetros diferentes ou até modelos diferentes, dependendo das suas necessidades específicas.
Para realizar determinadas tarefas, as LLMs precisarão acessar fontes de dados externas específicas não incluídas em seu conjunto de dados de treinamento, como documentos internos, e-mails ou conjuntos de dados. LangChain refere-se coletivamente a essa documentação externa como “índices"."
Carregadores de documentos
O LangChain oferece uma grande variedade de carregadores de documentos para aplicativos de terceiros (link fora do ibm.com). Isso permite a fácil importação de dados de fontes como serviços de armazenamento de arquivos (como Dropbox, Google Drive e Microsoft OneDrive), conteúdo da web (como YouTube, URLs específicas ou PubMed), ferramentas de colaboração (como Airtable, Trello, Figma e Notion), bancos de dados (como Pandas, MongoDB e Microsoft), entre muitas outras.
Bancos de dados vetoriais
Ao contrário dos bancos de dados estruturados "tradicionais", os bancos de dados vetoriais representam pontos de dados convertendo-os em incorporações vetoriais: representações numéricas na forma de vetores com um número fixo de dimensões, muitas vezes agrupando pontos de dados relacionados com métodos de aprendizado não supervisionados. Isso permite consultas de baixa latência, mesmo para conjuntos de dados maciços, o que aumenta consideravelmente a eficiência. As incorporações vetoriais também armazenam os metadados de cada vetor, melhorando ainda mais as possibilidades de pesquisa.
O LangChain oferece integrações para mais de 25 métodos de incorporação diferentes, bem como para mais de 50 lojas de vetor diferentes (hospedado na nuvem e no local).
Divisores de texto
Para aumentar a velocidade e reduzir as demandas computacionais, geralmente é aconselhável dividir documentos grandes de texto em trechos menores. Os TextSplitters do LangChain dividem o texto em pequenos trechos com significado semântico que podem ser combinados com métodos e parâmetros da sua escolha.
Recuperação
Uma vez que as fontes externas de conhecimento tenham sido conectadas, o modelo deve ser capaz de recuperar e integrar rapidamente as informações relevantes, conforme o necessário. Assim como o watsonx, o LangChain oferece geração aumentada de recuperação (RAG): seus módulos de recuperação aceitam uma consulta de string como entrada e retornam uma lista de documentosna saída.
Por padrão, os LLMs não têm memória de longo prazo de conversas anteriores (a menos que o histórico do chat seja usado como entrada para uma consulta). O LangChain soluciona esse problema com utilitários simples para adicionar memória a um sistema, com opções que vão desde a retenção total de todas as conversas até a retenção de um resumo da conversa até a retenção das n trocas mais recentes.
Os agentes do LangChain podem usar um determinado modelo de idioma como um "mecanismo de raciocínio" para determinar quais ações tomar. Ao criar uma cadeia para um agente, as entradas contêm:
Apesar do poder e da versatilidade anunciados, os LLMs têm limitações importantes: falta de informações atualizadas, falta de conhecimento específico do domínio e dificuldade geral com matemática.
As ferramentas do LangChain (link fora de ibm.com) são um conjunto de funções que capacita os agentes do LangChain a interagir com informações do mundo real para expandir ou melhorar os serviços que podem entregar. Exemplos de ferramentas proeminentes do LangChain:
Wolfram Alpha: oferece acesso a funções poderosas de visualização de dados e computação, possibilitando recursos matemáticas sofisticados.
Google Search: entrega o acesso ao Google Search, equipando aplicativos e agentes com informações em tempo real.
OpenWeatherMap: obtém informações meteorológicas.
Wikipedia: oferece acesso eficiente a informações de artigos da Wikipedia.
Lançado no outono de 2023, o LangSmith pretende preencher a lacuna entre os recursos de prototipagem acessíveis que levaram a LangChain à proeminência e à construção de aplicações de LLM com qualidade de produção.
O LangSmith entrega ferramentas para monitorar, avaliar e depurar aplicativos, incluindo a capacidade de rastrear automaticamente todas as chamadas de modelo para detectar erros e testar o desempenho em diversas configurações de modelo. Essa visibilidade visa a capacitar aplicativos mais robustos e econômicos.
O LangChain é código aberto e gratuito: o código-fonte está disponível para download no Github (o link fora do ibm.com).
O LangChain também pode ser instalado no Python com um comando pip simples: pip install langchain. Para instalar todas as dependências do LangChain (em vez de somente aquelas que você considera necessárias), execute o comando pip install langchain[all].
Há muitos tutoriais passo a passo disponíveis no ecossistema da comunidade LangChain e na documentação oficial em docs.langchain.com (link fora de ibm.com).
Aplicativos feitos com o LangChain entregam grande utilidade para uma variedade de casos de uso, desde tarefas diretas de resposta a perguntas e geração de texto até soluções mais complexas que usam um LLM como um "mecanismo de raciocínio".
Treine, valide, ajuste e implemente IA generativa, modelos de base e recursos de aprendizado de máquina com facilidade, além de criar aplicativos de IA em uma fração do tempo com uma fração dos dados.
Reinvente sua forma de trabalhar com a IA: nossa equipe global diversificada de mais de 20 mil especialistas em IA pode ajudá-lo a projetar e escalar a IA e a automação de forma rápida e confiável em toda a sua empresa, trabalhando com nossa própria tecnologia IBM watsonx e um ecossistema aberto de parceiros para oferecer qualquer modelo de IA, em qualquer nuvem, guiado ética e confiança.
Escale análises e cargas de trabalho de IA para todos os seus dados, em qualquer lugar, com o watsonx.data, o único armazenamento de dados aberto, híbrido e controlado do setor.
Ferramentas, dicas e código de amostra para começar a construir aplicativos com LangChain e Watsonx.
Parte arte, parte ciência, a engenharia de prompts é o processo de elaboração de textos de prompts para obter o melhor efeito para um determinado modelo e parâmetros. Essas dicas ajudarão você a iniciar com sucesso a maioria dos modelos básicos geradores de texto.
Este notebook contém as etapas e o código para demonstrar a cadeia sequencial simples utilizando integração langchain com modelos watsonx. Alguma familiaridade com Python será útil.
Apresentaremos os conceitos básicos que você precisa conhecer para começar com esta linguagem de programação simples, desde a execução de cálculos algébricos até a geração de resultados gráficos a partir de seus dados.
1 As startups de código aberto com crescimento mais rápido do segundo trimestre de 2023 (link fora de ibm.com), Runa Capital, 2023