LangChain é uma ferramenta robusta e de ponta desenvolvida para aproveitar o poder dos Large Language Models (LLMs).
Esses LLMs possuem recursos notáveis e podem lidar com eficiência com uma ampla gama de tarefas. No entanto, é importante observar que sua força reside em sua natureza geral, e não em seu conhecimento profundo do domínio. Sua popularidade cresceu rapidamente desde a introdução do GPT-4.
Embora os LLMs sejam excelentes em lidar com várias tarefas, eles podem enfrentar limitações quando se trata de fornecer respostas específicas ou lidar com tarefas que exigem profundo conhecimento do domínio. Considere, por exemplo, utilizar um LLM para responder a perguntas ou realizar tarefas em áreas especializadas como medicina ou direito.
Embora o LLM certamente possa responder a perguntas gerais sobre esses campos, pode ter dificuldade em oferecer respostas mais detalhadas ou diferenciadas que exijam conhecimento ou especialização especializada.
Isso ocorre porque os LLMs são treinados em grandes quantidades de dados de texto de diversas fontes, permitindo que aprendam padrões, entendam o contexto e gerem respostas coerentes. No entanto, seu treinamento normalmente não envolve aquisição de conhecimento específico ou especializado na mesma medida que os especialistas humanos nesses campos.
Portanto, embora o LangChain, em conjunto com os LLMs, possa ser uma ferramenta inestimável para uma ampla gama de tarefas, é importante reconhecer que ainda pode ser necessário um conhecimento profundo do domínio em determinadas situações. Especialistas humanos com conhecimento especializado podem fornecer a profundidade necessária, compreensão diferenciada e insights específicos do contexto que podem estar além das capacidades dos LLMs sozinhos.
Aconselhamos olhar os documentos da LangChain ou GitHub repositório para uma compreensão mais completa de seus casos de uso típicos. É altamente recomendável obter uma imagem maior deste pacote.
Como isso funciona?
Para entender o propósito e o trabalho do LangChain, vamos considerar um exemplo prático. Estamos cientes de que o GPT-4 possui um conhecimento geral impressionante e pode fornecer respostas confiáveis para uma ampla gama de perguntas.
No entanto, e se quisermos informações específicas de nossos próprios dados, como um documento pessoal, livro, arquivo PDF ou banco de dados proprietário?
LangChain nos permite conectar um modelo de linguagem grande como GPT-4 para nossas próprias fontes de dados. Vai além de simplesmente colar um trecho de texto em uma interface de bate-papo. Em vez disso, podemos fazer referência a um banco de dados inteiro preenchido com nossos próprios dados.
Assim que obtivermos as informações desejadas, a LangChain pode nos auxiliar na tomada de ações específicas. Por exemplo, podemos instruí-lo a enviar um e-mail contendo certos detalhes.
Para conseguir isso, seguimos uma abordagem de pipeline usando LangChain. Primeiro, pegamos o documento que queremos modelo de linguagem para fazer referência e dividi-lo em partes menores. Esses pedaços são então armazenados como embeddings, que são representações vetoriais do texto, em um banco de dados vetorial.
Com essa configuração, podemos criar aplicativos de modelo de linguagem que seguem um pipeline padrão: um usuário faz uma pergunta inicial, que é enviada ao modelo de linguagem. A representação vetorial da pergunta é usada para realizar uma pesquisa de similaridade no banco de dados de vetores, recuperando os blocos de informações relevantes.
Esses pedaços são então realimentados para o modelo de linguagem, permitindo que ele forneça uma resposta ou execute a ação desejada.
O LangChain facilita o desenvolvimento de aplicativos com reconhecimento de dados, pois podemos referenciar nossos próprios dados em um armazenamento vetorial, e autênticos, pois eles podem realizar ações além de responder a perguntas. T
Isso abre uma infinidade de casos de uso prático, especialmente em assistência pessoal, onde um grande modelo de linguagem pode lidar com tarefas como reserva de voos, transferência de dinheiro ou assistência com questões relacionadas a impostos.
Além disso, as implicações para estudar e aprender novos assuntos são significativas, pois um modelo de linguagem pode referenciar todo um programa de estudos e acelerar o processo de aprendizado. Espera-se que a codificação, a análise de dados e a ciência de dados também sejam muito influenciadas por esses avanços.
Uma das perspectivas mais empolgantes é conectar grandes modelos de linguagem a dados existentes da empresa, como informações de clientes ou dados de marketing. Essa integração com APIs avançadas, como a API da Meta ou a API do Google, promete um progresso exponencial na análise e ciência de dados.
Como construir uma página da Web (demonstração)
Atualmente, o Langchain está disponível como pacotes Python e JavaScript.
Podemos criar um aplicativo da Web de demonstração utilizando Streamlit, LangChain e o modelo OpenAI GPT-3 para implementar o conceito LangChain.
Mas primeiro, devemos instalar algumas dependências, incluindo Streamlit, LangChain e OpenAI.
Pré-requisitos
Streamlit: Um pacote Python popular para criar aplicativos da Web relacionados à ciência de dados
OpenAI: O acesso ao modelo de linguagem GPT-3 da OpenAI é necessário.
Para instalar essas dependências, use os seguintes comandos no cmd:
pip install streamlit
pip install langchain
pip install openai
Importar Pacotes
Começamos importando os pacotes necessários, como OpenAI, LangChain e Streamlit. Nossas cadeias de modelo de linguagem são definidas e executadas usando três classes do LangChain: LLMChain, SimpleSequentialChain e PromptTemplate.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Configuração básica
A base estrutural do nosso projeto foi então montada usando a sintaxe Streamlit. Demos ao aplicativo o título “What's TRUE: Using Simple Sequential Chain” e incluímos um link markdown para o repositório GitHub que serviu de inspiração para o aplicativo.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Widgets front-end
Configuramos o aplicativo com poucas informações relevantes, usando a sintaxe simples do Streamlit:
# If an API key has been provided, create an OpenAI language model instance
if API:
llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
# If an API key hasn't been provided, display a warning message
st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")
Para adicionar widgets front-end
Além disso, precisamos fornecer um widget de entrada para permitir que nossos usuários insiram quaisquer perguntas.
# Add a text input box for the user's question
user_question = st.text_input(
"Enter Your Question : ",
placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)
Tudo feito! As correntes estão funcionando!
Empregamos várias cadeias de operações juntamente com SimpleSequentialChain
para responder à consulta do usuário. As cadeias são realizadas na seguinte sequência quando o usuário seleciona o "Tell me about it"
botão:
if st.button("Tell me about it", type="primary"):
# Chain 1: Generating a rephrased version of the user's question
template = """{question}\n\n"""
prompt_template = PromptTemplate(input_variables=["question"], template=template)
question_chain = LLMChain(llm=llm, prompt=prompt_template)
# Chain 2: Generating assumptions made in the statement
template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
prompt_template = PromptTemplate(input_variables=["statement"], template=template)
assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
assumptions_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain], verbose=True
)
# Chain 3: Fact checking the assumptions
template = """Here is a bullet point list of assertions:
{assertions}
For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
fact_checker_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
)
# Final Chain: Generating the final answer to the user's question based on the facts and assumptions
template = """In light of the above facts, how would you answer the question '{}'""".format(
user_question
)
template = """{facts}\n""" + template
prompt_template = PromptTemplate(input_variables=["facts"], template=template)
answer_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
verbose=True,
)
# Running all the chains on the user's question and displaying the final answer
st.success(overall_chain.run(user_question))
question_chain
: que é a primeira etapa do nosso pipeline, recebe a pergunta do usuário como entrada e saída. A consulta do usuário serve como modelo da cadeia.- Com base em uma declaração ligada à pergunta, o
assumptions_chain
gera uma lista de suposições usando a saída doquestion_chain
como entrada. OLLMChain
eOpenAI
modelo de LangChain foi usado para construir a instrução. O usuário tem a tarefa de criar uma lista das suposições que foram feitas para produzir a declaração usando o modelo para esta cadeia. - Com base nas saídas do
question_chain
eassumptions_chain
,fact_checker_chain
gera uma lista de asserções na forma de marcadores. As reivindicações são produzidas usando oOpenAI
modelo eLLMChain
da LangChain. O usuário tem a tarefa de determinar se cada afirmação é precisa ou incorreta e fornecer justificativas para aquelas que são. - A
answer_chain
utiliza as saídas doquestion_chain
,assumptions_chain
efact_checker_chain
como entradas para criar uma resposta à pergunta do usuário usando os dados produzidos pelas cadeias anteriores. O modelo desta cadeia solicita que o usuário responda à primeira consulta utilizando os fatos que foram criados. - Para fornecer a resposta final à consulta do usuário com base nas informações produzidas pelas cadeias anteriores, integramos essas cadeias na cadeia geral. Depois que as cadeias são concluídas, usamos
st.success()
para mostrar ao usuário a solução.
Conclusão
Podemos simplesmente encadear diferentes ações de modelo de linguagem para criar pipelines mais complicados usando o SimpleSequentialChain
módulo do LangChain. Para uma ampla variedade de aplicativos de PNL, incluindo chatbots, sistemas de perguntas e respostas e ferramentas de tradução de idiomas, isso pode ser bastante útil.
O brilhantismo do LangChain é encontrado em sua capacidade de abstração, o que permite ao usuário se concentrar no problema atual, e não nas especificidades da modelagem de linguagem.
O LangChain torna o processo de criação de modelos de linguagem sofisticados mais amigável, oferecendo modelos pré-treinados e uma seleção de modelos.
Ele oferece a opção de ajustar os modelos de idioma usando seus próprios dados, simplificando a personalização dos modelos de idioma. Isso permite o desenvolvimento de modelos específicos de domínio mais precisos que, para um determinado trabalho, superam os modelos treinados.
A SimpleSequentialChain
O módulo e outros recursos do LangChain o tornam uma ferramenta eficaz para desenvolver e implantar rapidamente sistemas sofisticados de PNL.
Deixe um comentário