Want to Become a Sponsor? Contact Us Now!🎉

claude
Clude-ception: Ensinar Claude a Projetar sua Própria Pergunta com LangChain

Clude-ception: Ensinar Claude a Projetar sua Própria Pergunta com LangChain

Published on

Este artigo demonstra uma abordagem inovadora para a criação automática de perguntas usando o poderoso modelo de IA Claude 3, da Anthropic, e o framework LangChain. A ideia principal é aproveitar as capacidades de criação de perguntas do próprio Claude para melhorar iterativamente as perguntas para uma determinada tarefa através de um loop de feedback.

Introdução

Claude, o poderoso assistente de IA da Anthropic, demonstrou notáveis habilidades de compreensão e geração de linguagem. O modelo Claude 3, lançado recentemente, especialmente a variante Opus, se destaca na criação de perguntas - a arte de projetar perguntas eficazes para obter resultados de alta qualidade de modelos de linguagem.

Isso abre uma possibilidade empolgante: e se pudéssemos aproveitar as habilidades de criação de perguntas do Claude para melhorar suas próprias perguntas de forma iterativa? Ao fazer com que o Claude 3 analise a qualidade dos resultados gerados a partir de uma pergunta inicial e sugira melhorias, poderíamos criar um loop de feedback automatizado para otimizar as perguntas para uma determinada tarefa.

Neste artigo, vamos mostrar como implementar essa estratégia de melhoria automática da pergunta usando o Claude 3 Opus e o LangChain, um framework popular para a construção de aplicativos com modelos de linguagem. Vamos aplicá-lo à tarefa de resumir trabalhos acadêmicos no estilo envolvente do pesquisador de IA Elvis Saravia (@omarsar0 (opens in a new tab) no Twitter).

Anakin AI - The Ultimate No-Code AI App Builder

O Fluxo de Trabalho da Criação de Perguntas

Alex Albert (@alexalbert__ (opens in a new tab) no Twitter) compartilhou recentemente um fluxo de trabalho eficaz para a criação de perguntas com o Claude 3 Opus:

  1. Escreva uma pergunta inicial para a tarefa
  2. Gere um conjunto de testes de entrada para avaliar a pergunta
  3. Execute a pergunta nos casos de teste
  4. Revise e avalie manualmente os resultados
  5. Alimente os exemplos avaliados de volta para o Claude 3 Opus e peça a ele para revisar a pergunta
  6. Repita

Will Hinthorn (@WHinthorn (opens in a new tab)) e Ross Lance Martin (@rlancemartin (opens in a new tab)) demonstram como simplificar esse processo usando o LangSmith:

  1. Crie um conjunto de dados de casos de teste
  2. Anote os resultados gerados com feedback
  3. Passe o feedback para o Claude 3 Opus para reescrever a pergunta
  4. Execute isso como um loop de melhoria iterativa

Vamos ver como implementar essa abordagem para a tarefa de resumir trabalhos acadêmicos no estilo das excelentes threads do Twitter do Elvis Saravia.

Etapa 1: Carregue os Trabalhos em um Conjunto de Dados

Primeiro, selecionamos alguns artigos sobre os quais o Elvis tuitou e os carregamos usando o ArxivLoader do LangChain:

from langchain_community.document_loaders import ArxivLoader
 
ids = ["2403.05313", "2403.04121", "2402.15809"] 
 
docs = []
for paper_id in ids:
    doc = ArxivLoader(query=paper_id, load_max_docs=1).load() 
    docs.extend(doc)

Em seguida, adicionamos o texto do trabalho a um conjunto de dados do LangSmith:

from langsmith import Client
 
client = Client()
 
ds_name = "Gerador de Tweets"  
ds = client.create_dataset(dataset_name=ds_name)
client.create_examples(
    inputs=[{"paper": doc.page_content} for doc in docs], dataset_id=ds.id
)

Etapa 2: Teste com uma Pergunta Inicial

A seguir, escrevemos uma pergunta inicial razoável para o Claude 3 Opus gerar resumos dos trabalhos em forma de tweets:

from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
 
chat = ChatAnthropic(temperature=0, model_name="claude-3-opus-20240229")
 
system = (
    "<role> Você é um assistente que gera Tweets para resumir um trabalho acadêmico ou projeto de código aberto. Deve ser bem formulado, mas evite truques ou dependência excessiva de buzzwords. </role>"
)
human = "Aqui está um trabalho para converter em um Tweet: <paper> {paper} </paper>"
current_prompt_str = system + human
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
 
gerador_de_tweets = prompt | chat

Podemos testá-lo em um exemplo de trabalho:

exemplo_tweet = gerador_de_tweets.invoke({"paper": docs[0].page_content})
print(exemplo_tweet)

Isso gera um resumo de tweet inicial decente do trabalho.

Etapa 3: Execute no Conjunto de Dados

Para avaliar a pergunta mais a fundo, executamos em todo o conjunto de dados dos trabalhos:

res = client.run_on_dataset(
    dataset_name=ds_name, 
    llm_or_chain_factory=gerador_de_tweets,
)

Etapa 4: Avalie Manualmente os Resultados

Podemos usar a funcionalidade de fila de anotações do LangSmith para revisar manualmente e fornecer feedback sobre os tweets gerados:

fila = client.create_annotation_queue(name="Gerador de Tweets")
client.add_runs_to_annotation_queue(
    fila.id,
    run_ids=[
        r.id 
        for r in client.list_runs(project_name=res["project_name"], execution_order=1)
    ],  
)

Para orientar a avaliação, podemos consultar alguns tweets resumidos reais do trabalho do Elvis como exemplos do estilo e conteúdo alvo.

Etapa 5: Melhore a Pergunta

Após anotar os resultados, trazemos o feedback estruturado:

formatted_feedback = get_formatted_feedback(res["project_name"])

Em seguida, alimentamos isso de volta para o Claude 3 Opus usando um modelo de otimização de pergunta do LangChain Hub:

from langchain import hub
from langchain_core.output_parsers import StrOutputParser
 
otimizador_prompt = hub.pull("rlm/otimizador-pergunta-rascunho-tweets") 
otimizador = otimizador_prompt | chat | StrOutputParser() | extrair_nova_pergunta
nova_pergunta_str = otimizador.invoke(
    {
        "current_prompt": current_prompt_str,
        "annotated_predictions": "\n\n".join(formatted_feedback).strip(),  
    }
)

Este gera uma nova prompt melhorada que incorpora o feedback para melhor adequação ao estilo de escrita de Elvis e à estrutura de tópicos.

Passo 6: Avaliar a Nova Prompt

Finalmente, podemos executar a prompt atualizada em nosso conjunto de dados novamente para verificar melhorias:

new_prompt = ChatPromptTemplate.from_messages([("user", new_prompt_str)])
tweet_generator_v2 = new_prompt | chat
 
updated_results = client.run_on_dataset(
    dataset_name=ds_name,
    llm_or_chain_factory=tweet_generator_v2, 
)

Comparando as saídas das prompts originais e revisadas, percebemos que o ciclo de feedback com Claude 3 Opus foi eficaz em ajustar a prompt para produzir resumos de artigos mais envolventes no estilo de Elvis.

Por exemplo, aqui estão os tweets gerados pelas prompts inicial e melhorada para um novo artigo de teste:

Prompt Inicial:

Nova pesquisa sobre o uso de grandes modelos de linguagem (LLMs) para tarefas de dados tabulares, como previsão, geração e resposta a perguntas. Aborda técnicas-chave como serialização, engenharia de prompts e benchmarks. Identifica oportunidades e desafios.

Prompt Melhorada:

Desbloqueando o Potencial de LLMs para Dados Tabulares 🔑

Esta pesquisa abrangente explora como grandes modelos de linguagem podem ser aplicados a dados tabulares para tarefas como previsão, geração e compreensão.

Técnicas-chave abordadas:

  • Serializar tabelas em formatos legíveis por LLMs
  • Manipulações de tabelas para ajustar o comprimento do contexto
  • Truques de engenharia de prompts
  • Construindo sistemas ponta a ponta

O artigo fornece uma taxonomia de conjuntos de dados, métricas e métodos para cada área de aplicação. Também analisa as limitações atuais e direções de pesquisa futuras.

LLMs apresentam grande potencial para trabalhar com dados estruturados quando combinados com as etapas de pré-processamento e estratégias de pesquisa adequadas. Isso abre possibilidades empolgantes para sistemas mais inteligentes e automatizados para analisar dados tabulares.

Quais outras aplicações inovadoras de LLMs em dados estruturados você prevê? 🤔

O tweet revisado faz um trabalho melhor ao quebrar os pontos-chave, adiciona emojis para maior interesse visual e termina com uma pergunta instigante para engajar o público - todos elementos característicos do estilo de Elvis.

Conclusão

Ao combinar as capacidades de engenharia de prompt do Claude 3 Opus com os frameworks LangChain e LangSmith, conseguimos criar um ciclo de feedback automatizado para otimizar progressivamente uma prompt para resumir artigos em um estilo de escrita específico.

Isso demonstra uma abordagem geral poderosa para ajustar modelos de linguagem para executar uma tarefa de acordo com certas especificações ou emular um estilo alvo. A mesma técnica poderia ser aplicada para melhorar automaticamente prompts para uma variedade de outras tarefas de geração de texto.

À medida que os modelos de linguagem continuam avançando, podemos esperar ver ferramentas e fluxos de trabalho mais sofisticados de engenharia de prompt para maximizar seu potencial. Frameworks como LangChain terão um papel fundamental em tornar isso acessível a um público mais amplo e abrir novas aplicações emocionantes.

Anakin AI - The Ultimate No-Code AI App Builder