Usando LangChain para criar aplicativos de modelo de linguagem grande (LLM) via HuggingFace


Atualmente sou o Evangelista Chefe @ HumanFirst . Eu exploro e escrevo sobre todas as coisas na interseção de IA e linguagem; variando de LLMs, Chatbots, Voicebots, estruturas de desenvolvimento, espaços latentes centrados em dados e muito mais.

O que torna o desenvolvimento do Langchain importante é a noção de que precisamos passar do cenário de playground e da fase de experimentação para produzir a funcionalidade do Large Language Model (LLM).
A resposta para o desenvolvimento em LLMs não é necessariamente as Estruturas de Desenvolvimento de IA Conversacional atuais e existentes, embora essa seja uma das opções.
Estruturas de código profissional desenvolvidas sob medida que interagem e alavancam LLMs também não devem ser vistas como inevitáveis.
Como você verá neste artigo, Langchain é uma estrutura alternativa para criar aplicativos baseados em LLM e interfaces de conversação em uma estrutura estruturada e intuitiva.
Langchain também contribui para um entendimento compartilhado e forma de trabalho entre os desenvolvedores LLM. Uma abordagem uniforme pode auxiliar na padronização das implementações e expectativas do LLM, ao mesmo tempo em que desmistifica as expectativas do mercado sobre custo e desempenho.
Em um artigo recente , escrevi sobre os desafios do design de fluxo de conversação ao alavancar Modelos de Linguagem Grande (LLMs).
Também ilustrei alguns cenários sobre como o Langchain pode ser usado para criar chatbots e outros aplicativos baseados em LLM.
Este artigo cobre dois aspectos dos LLMs:
1️⃣ Um exemplo de uso do Langchain para fazer interface com a API de inferência HuggingFace para um chatbot QnA.
2️⃣ Seguido por alguns exemplos práticos que ilustram como introduzir o contexto na conversa por meio de uma abordagem de aprendizagem de poucos tiros, usando Langchain e HuggingFace.
Configurando o HuggingFace para QnA Bot
Você precisará criar uma conta gratuita no HuggingFace e, em seguida, acessar as configurações do seu perfil. Conforme visto abaixo, criei um token de acesso com o nome LangChain.

Abaixo está o código Python completo para a interface do bot Langchain QnA com o HuggingFace. Observe onde você terá que adicionar seu token da API HuggingFace e, em seguida, onde a pergunta será adicionada.
pip install langchain[all]
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "xxxxxxxxxxxxxxxxxxx"
from langchain import PromptTemplate, HuggingFaceHub, LLMChain
template = """Question: {question}
Answer: Let's think step by step."""
prompt = PromptTemplate(template=template, input_variables=["question"])
llm=HuggingFaceHub(repo_id="google/flan-t5-xl", model_kwargs={"temperature":1e-10})
question = "When was Google founded?"
print(llm_chain.run(question))
Google was founded in 1998. The final answer: 1998.
Por exemplo, como mostra a imagem, copia-se a referência ao modelo bloom:
repo_id="bigscience/bloom"

Duas ressalvas que preciso adicionar, alguns dos modelos HuggingFace que mencionei no Colab Notebook expiraram, isso pode estar relacionado a estar em um nível gratuito ou algo semelhante.
Em segundo lugar, os resultados parecem diferir entre o Colab Notebook e as consultas de modelo de cartão. Em geral, os LLMs não são determinísticos, o que significa que entradas idênticas podem gerar saídas diferentes. Existem opções para definir a temperatura, comprimento de resposta, etc, mas uma pequena quantidade de variabilidade pode permanecer.
Chatbot contextual de aprendizagem de poucos tiros
Este exemplo demonstra a maneira mais simples de gerenciar o contexto de conversação em um chatbot baseado em LLM…
Um LLM pode ser usado em uma abordagem generativa, conforme visto abaixo no exemplo do playground OpenAI. A entrada inicial ( bloco vermelho número 1 ) é submetida ao LLM.
Este prompt inicial contém uma descrição do chatbot e a primeira entrada humana.
Bloco vermelho número 2: A resposta do LLM (neste caso, text-davinci-003).
Bloco vermelho número 3: Para continuar a conversa, o bloco 1, 2 e o novo bloco adicional 3 são enviados.
Bloco vermelho número 4: O LLM responde com o bloco 4, esta resposta é informada e baseada no contexto dos blocos 1, 2 e 3 que são enviados juntos.
Portanto, em termos simples, cada turno de diálogo é armazenado em buffer com a memória da conversa... e eu sei o que você está pensando. Esse buffer pode ficar muito grande em termos de tamanho e custos de LLM.
Conversas mais longas podem ser resolvidas de duas maneiras:
- Truncar o histórico da conversa, removendo, portanto, a primeira parte do histórico da conversa em estágios definidos. Essa abordagem é análoga a limitar os arquivos de log a um determinado tamanho por meio de logs contínuos.
- A segunda abordagem é fazer uso de LLMs para resumir o histórico da conversa, à medida que as conversas continuam.

O que eu gosto é que o LangChain tem três métodos para abordar o gerenciamento de contexto:
⦿ Buffering : Esta opção permite passar as últimas N
interações como referência contextual. N
pode ser definido com base em um número fixo.
⦿ Resumo : Resumindo as conversas e fazendo uso do resumo em vez dos diálogos literais. Em comparação com o buffer, a sumarização comprime as informações contextuais. Haverá perda, mas os limites de comprimento de solicitação projetados permanecerão dentro dos limites.
⦿ Combinação : Uma combinação de armazenamento em buffer e resumo, onde um resumo é gerado junto com as respostas textuais de interações anteriores. Essa abordagem é mais equilibrada, por exemplo, os últimos 5 turnos de diálogo podem ser verbatim e os diálogos mais antigos podem ser resumidos.
E, finalmente, abaixo um exemplo de código, que faz referência à API de inferência HuggingFace, com a entrada do usuário:
from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import ConversationBufferMemory
conversation = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
)
conversation.predict(input="Hi there!")
> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
Human: Hi there!
AI:
> Finished chain.
Hi there!
conversation.predict(input="Tell me more about yourself?")
> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
Human: Hi there!
AI: Hi there!
Human: Tell me more about yourself?
AI:
> Finished chain.
I'm a student at the University of Washington.
A melhor maneira de começar é acessar a documentação do Langchain e começar a prototipar em um Notebook.
⭐️ Por favor, siga-me no LinkedIn para atualizações sobre Conversational AI ⭐️

Atualmente sou o Evangelista Chefe @ HumanFirst . Eu exploro e escrevo sobre todas as coisas na interseção de IA e linguagem; variando de LLMs , Chatbots , Voicebots , estruturas de desenvolvimento, espaços latentes centrados em dados e muito mais.





https://langchain-hub-ui-production.up.railway.app/
