DEV Community

Thiago da Silva Adriano
Thiago da Silva Adriano

Posted on

Conhecendo o LangChain

Atualmente, uma biblioteca tem se destacado bastante no universo de Inteligência Artificial. Esta biblioteca se chama LangChain.

Para quem ainda não conhece ela, esta biblioteca oferece uma ampla gama de funcionalidades para a criação e o gerenciamento de pipelines de processamento de linguagem natural.

A seguir você tem uma imagem demonstrando esta biblioteca junto com o seu toolkit (kit de ferramentas) que ela nos disponibiliza:

Image description

Vamos conhecer cada um deles abaixo:

  • Document Loaders and Utils: Essa parte do LangChain se refere aos carregadores de documentos e utilitários. Eles são responsáveis por ler, processar e carregar documentos de diversas fontes (arquivos de texto, PDFs, bancos de dados, etc.) para que possam ser utilizados nas operações de processamento de linguagem natural.

  • Prompts: Prompts são instruções ou perguntas fornecidas ao modelo de linguagem para gerar respostas ou realizar uma tarefa específica. Eles são fundamentais para direcionar o comportamento do modelo de linguagem.

  • Chains (ou cadeias): Elas representam uma sequência de etapas ou operações que são realizadas em conjunto para alcançar um objetivo específico. Embora o uso de um único LLM possa ser suficiente para tarefas mais simples, LangChain fornece uma interface padrão e algumas implementações comumente usadas para encadear LLMs para aplicações mais complexas, entre si ou com outros módulos especializados.

  • LLM (Large Language Models): LLMs são modelos de linguagem de grande escala, como GPT-4, BERT, e outros, que são utilizados para realizar várias tarefas de processamento de linguagem natural, como tradução, sumarização, e geração de texto.

  • Agents: Eles são componentes que agem de forma autônoma para realizar tarefas específicas baseadas em entradas e em modelos de linguagem. Eles podem tomar decisões e realizar ações com base em regras ou aprendizagem.

Para ficar mais claro como esta biblioteca funciona, vejamos um exmeplo prático dela utilizando o Python + LangChain + Arquivo .txt onde vamos analisar o sentimento de alguns títulos de noticias.



from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain_community.document_loaders import TextLoader
import os

def carregar_documentos(caminho_arquivo):
    loader = TextLoader(caminho_arquivo)
    documentos = loader.load()
    return documentos

def limpar_texto(texto):
    return texto.strip()

llm = Ollama(
    model="llama2",
    num_gpu=0,
    callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)

prompt_sentimento = "Analise o sentimento do seguinte texto em português: {text}"
prompt_resumo = "Gere um resumo em português para o seguinte texto: {text}"

template_sentimento = PromptTemplate(input_variables=["text"], template=prompt_sentimento)
template_resumo = PromptTemplate(input_variables=["text"], template=prompt_resumo)

chain_sentimento = LLMChain(llm=llm, prompt=template_sentimento)
chain_resumo = LLMChain(llm=llm, prompt=template_resumo)

caminho_arquivo = os.path.join(os.path.dirname(__file__), "noticias.txt")

if not os.path.exists(caminho_arquivo):
    raise FileNotFoundError(f"O arquivo {caminho_arquivo} não foi encontrado.")

documentos = carregar_documentos(caminho_arquivo)

for doc in documentos:
    texto_limpo = limpar_texto(doc.page_content)

    resultado_sentimento = chain_sentimento.run({"text": texto_limpo})
    resultado_resumo = chain_resumo.run({"text": texto_limpo})

    print(f"Notícia: {texto_limpo}")
    print(f"Sentimento: {resultado_sentimento}")
    print(f"Resumo: {resultado_resumo}")
    print("-" * 50)



Enter fullscreen mode Exit fullscreen mode

Executando o código nós temos o seguinte resultado:

Image description

Bom, com isso eu finalizo mais este artigo, espero que tenham gostado e até a próxima pessoal :)

Top comments (0)