1 pontos por GN⁺ 2023-07-10 | 1 comentários | Compartilhar no WhatsApp
  • Ferramenta para indexar e consultar documentos PDF, implementando um sistema RAG que permite conversar com documentos PDF usando embeddings da OpenAI e FAISS
  • Extrai texto de uma pasta de PDFs, divide em chunks de 1000 caracteres com sobreposição de 200 caracteres e gera embeddings com o modelo OpenAI text-embedding-ada-002, armazenando-os em um índice FAISS local
  • Na etapa de consulta, carrega o índice vetorial FAISS salvo, converte a pergunta em embedding, encontra os 3 chunks de documento mais semelhantes e exibe a pontuação de similaridade e trechos de texto
  • A geração de respostas funciona sintetizando uma resposta coerente com base no contexto recuperado pelo GPT-4
  • Como os embeddings ficam armazenados localmente, não é necessário gerá-los novamente a cada consulta; após a criação inicial, é possível consultar os dados sem acesso à internet da OpenAI, sendo necessária chamada à API apenas para gerar a resposta
  • O fluxo básico de execução é processar os PDFs com python indexer.py para criar o banco de dados vetorial e iniciar a interface interativa de consulta com python chatbot.py
    • A pasta de PDFs e o local de armazenamento do índice podem ser definidos por argumentos de linha de comando
    • Basta executar novamente o indexador apenas quando novos PDFs forem adicionados à coleção
  • Os requisitos de execução são Python 3.8 ou superior e uma chave de API da OpenAI, configurada pelo valor OPENAI_API_KEY no arquivo .env

1 comentários

 
GN⁺ 2023-07-10
Comentários do Hacker News
  • O mais frustrante é que quase todos os apps que copiam esse tipo de ideia são dependentes da OpenAI
    Já deu disso
    Se a opção que exige OpenAI ou nuvem ficasse como algo do tipo “tecnicamente possível, mas uma configuração avançada bem incômoda”, e o padrão fosse o contrário, muito mais gente usaria
    Acho melhor que apps assim tenham execução totalmente local como padrão, com a possibilidade de trocar para o modelo da Hugging Face que a pessoa quiser mudando só uma string no arquivo .toml
    Se realmente precisar da OpenAI, isso poderia ser habilitado com alguma forma de gerenciamento de chaves, como Docker secret ou uma cadeia com pass, junto com mudança de configuração
    O padrão deveria ser local-first, processando o máximo possível localmente e só enviando para a OpenAI uma quantidade mínima de tokens de prompts consolidados quando o usuário realmente quiser

    • É difícil competir. Se uma pequena empresa quiser processar 10 mil pedidos de chatbot, as opções são pagar menos de 50 dólares por mês para a OpenAI, ou gerenciar uma GPU na nuvem e contratar um engenheiro de machine learning gastando mais de 1000 dólares por mês, ou deixar uma 4090 local embaixo da mesa de alguém, sem confiabilidade, com custo fixo de 1500 dólares
      Empresas maiores precisam de escalabilidade e, mesmo assim, é difícil competir com o preço da OpenAI
      Alguém com perfil de fundador poderia até criar uma startup de OpenLLaMA com cobrança por requisição, fine-tuning e armazenamento vetorial
    • Tenho curiosidade sobre o que as pessoas estão fazendo com outros LLMs além de simples experimentos, algo realmente útil na prática
      Já passamos da fase da novidade e agora eu só quero terminar o trabalho com eficiência
      Pelo que testei até agora, o único modelo que consegue fazer o trabalho com alguma consistência é o GPT-4
      Não sei se sou eu que ainda sou inexperiente ou se é só o otimismo típico do HN imaginando que outros LLMs são muito melhores em qualidade, consistência e confiabilidade para trabalho real
    • Parece que isso não foi feito para lançar um produto de verdade, e sim para colocar uma linha no currículo provando experiência com OpenAI
      Imagino que isso aconteça porque a OpenAI não tem um programa próprio de certificação
    • Não daria para ligar o LocalAI nisso aqui? https://mudler.pm/posts/smart-slackbot-for-teams/
    • A “tranqueira” da OpenAI usada aqui é só a geração de embeddings
      Hoje a OpenAI oferece um dos melhores e mais baratos embeddings para projetos pessoais
      Depois que os vetores são gerados, se quiser, dá para abandonar a nuvem completamente
      O LangChain abstrai esse ponto de incômodo, então o gerador de embeddings pode ser trocado a qualquer momento
      O resto já usa Hugging Face, e pode ser substituído por outros modelos além do GPT-2 com suporte a prompts
  • Os dados precisam continuar privados e não vazar para terceiros. Dá para usar algo como o privateGPT. Tem 32 mil estrelas no GitHub
    Se a chave não é minha, então os dados também não são meus
    “Interaja com seus documentos de forma privada usando o poder do GPT, 100% privado, sem vazamento de dados”[0]
    [0] https://github.com/imartinez/privateGPT

    • É bem inferior aos produtos da OpenAI, e já cansei de ver gente falando como se esses modelos já fossem totalmente intercambiáveis
      Ainda não são
    • Fico me perguntando se isso é robusto o suficiente para colocar todos os e-mails e logs de chat e conversar com eles
      Será que consegue extrair contexto para entender perguntas sobre logs recentes?
    • Queria saber como isso roda em um Mac Intel. Uso um i9 de 6 núcleos
      Ainda não consegui um da série M, então estou pensando se seria melhor rodar em um ambiente de computação em nuvem com GPU
    • Seria ótimo se funcionasse com o Confluence
      Tipo escrever a documentação e depois só fazer perguntas sobre o conteúdo
    • Essa história de 100% privado me parece meio suspeita
      Pelo nível de paranoia que as autoridades demonstram com LLMs locais, eu não ficaria nem um pouco surpreso se a telemetria do Windows reportasse o que as pessoas estão fazendo com LLMs locais
      Quem acha que não está acontecendo me parece ingênuo demais
  • Isso manda meus dados pessoais para a OpenAI? Isso não é um problema sério?
    Não parece uma boa ideia, a menos que você remova todas as informações pessoais sensíveis dos dados. Estou deixando passar alguma coisa?

  • O README está muito confuso
    Diz que usa o tokenizer do GPT-2 e o GPT-2 como modelo de embeddings, mas olhando o código parece que o padrão é usar OpenAIEmbeddings do LangChain e um LLM da OpenAI
    Não seriam text-embedding-ada-002 e text-davinci-003, respectivamente?
    Não faço a menor ideia de onde o GPT-2 entra nisso aqui

    • O modelo de embeddings usado é o embedding padrão da API da OpenAI, o text-embedding-ada-002
      O GPT-2 é usado apenas no processo de tokenização para calcular o tamanho dos tokens com eficiência
  • Existe alguma empresa que ofereça isso em versão hospedada?
    Quero bastante uma IA pequena na qual eu possa colocar todos os meus dados e fazer perguntas

  • Não entendi. O GPT-2 é um dos poucos modelos públicos da OpenAI, então dá para rodar localmente direto; por que usar a API para isso?
    https://github.com/openai/gpt-2

    • Não está usando GPT-2. O README está errado
      Está usando from langchain.embeddings import OpenAIEmbeddings, e isso é a API de embeddings da OpenAI, text-embedding-ada-002
      A única parte em que o GPT-2 aparece é GPT2TokenizerFast.from_pretrained("gpt2"), usado como função de comprimento para contar tokens no utilitário RecursiveCharacterTextSplitter() do LangChain
      Isso também não faz muito sentido. Não sei por que usar um tokenizador do GPT-2 aqui
      Só contar caracteres ou contar palavras com base em .split() já seria suficiente. Aqui, a forma de contagem não é tão importante
    • O modelo de embeddings usado é o embedding padrão da API da OpenAI, text-embedding-ada-002
      O GPT-2 é usado apenas para calcular com eficiência o comprimento dos tokens durante o processo de tokenização
      Atualizei o README para refletir isso corretamente
    • Suponho que o GPT-4 daria respostas melhores às perguntas do que o GPT-2
  • Sou o único que não precisa pesquisar em todos os meus dados? Qual é o caso de uso disso aqui?

    • Um exemplo de caso de uso é o seguinte
      No trabalho, há um grupo que discute vários temas de investimento, e o organizador tem bons contatos e tenta trazer palestrantes externos toda semana. É bem educativo
      Tenho as anotações brutas de cada apresentação, e o objetivo era revisar essas anotações e organizar o conhecimento de forma adequada, como em um wiki
      Já se passaram 3 anos desde que comecei, mas ainda não arrumei tempo, e sendo realista, é bem possível que eu nunca arrume
      Para encontrar informação nessas anotações, eu poderia usar busca de texto, mas ela é sensível demais à string de busca e muitas vezes não encontra o que quero
      Se a informação estiver espalhada por vários arquivos, é preciso abrir e examinar todos os resultados da busca
      Com esse tipo de tecnologia, dá para colocar todas as anotações em um banco de dados vetorial e perguntar em linguagem natural o que você precisa
      O sistema local interpreta a pergunta, encontra os documentos mais relevantes no banco e envia a pergunta e os resultados da busca para a OpenAI, para interpretar a pergunta e encontrar a resposta nas anotações
      Eu já fiz uma prova de conceito com LangChain no passado, e funcionou. Houve um momento de "aha" quando ele respondeu juntando informações espalhadas por duas apresentações diferentes
      Minha dificuldade é que há parâmetros demais para ajustar, e ainda não pensei em uma forma ou métrica para avaliar o desempenho do sistema. Aceito conselhos
      Essas anotações não têm informações pessoais, então não há problema de privacidade
      Eu gostaria de configurar algo parecido também para mais de 20 anos de e-mails, mas não fiz isso por questões de privacidade. Além disso, uso um indexador de e-mail chamado notmuch, então a necessidade de IA não é tão grande assim
      Mas para outras anotações não pessoais, isso pode ser uma mão na roda, se eu conseguir fazer o sistema funcionar bem
      Ao longo dos anos, produzi anotações demais sobre muitos assuntos, e não precisar organizá-las bem tem um valor que dá para converter em dinheiro de verdade
      Basta me deixar escrever as anotações e depois deixar a IA encontrar o que eu precisar
    • Às vezes você tem os dados, mas não sabe onde eles estão
      Às vezes você sabe onde os dados estão, mas há dados demais, e o que você precisa é só uma explicação rápida sobre algo
      Às vezes há muitos dados de várias fontes, e no fim o que você quer é um resumo do que a maioria ou todas elas dizem, ou um resumo de como elas diferem entre si
      Há muitos casos de uso, e acho que, como estamos acostumados com as formas tradicionais de lidar com esse tipo de tarefa, a utilidade nem sempre vira aquele momento de “acender a lâmpada” até você se aprofundar e ver as possibilidades por conta própria
      O escopo é bem amplo. Pessoalmente, um projeto em que estou trabalhando é uma variação disso: colocar anos de anotações pessoais e diários e fazer consultas para autorreflexão e crescimento pessoal
      Acho que há muito potencial em toda essa área
  • Alguém sabe como Milvus, Quickwit e Pinecone se comparam?
    Estou pensando se existem oportunidades de consultoria relacionadas a LLMs, ajuste fino/busca vetorial e chatbots para negócios locais
    Também quero criar uma ferramenta em que você arrasta e solta arquivos para obter inferência personalizada com facilidade
    Recentemente apareceu no meu feed do LinkedIn o https://gpt-trainer.com/ e vi também algumas outras para documentos
    https://www.explainpaper.com/
    https://www.konjer.xyz/
    Não quero competir por preço
    Seria legal também oferecer um LLM open source local em uma 3090, mas isso não teria escalabilidade
    Vocês já viram outras startups de ajuste fino ou de contexto de busca vetorial?

    • Pinecone e Milvus podem ser alternativas a usar FAISS nos componentes de armazenamento e busca vetorial
      Acho que você vai sentir mais diferença em relação aos embeddings pelo que usar para gerá-los do que pelas alternativas de armazenamento/busca
      Por exemplo, usar coisas como as daqui https://news.ycombinator.com/item?id=36649579 em vez da API de embeddings da OpenAI
      Fora desempenho em larga escala, custo, preferência pessoal ou experiência do desenvolvedor, não me vem à mente muita diferença entre as alternativas de armazenamento/busca de embeddings
      Nunca tinha ouvido falar de Quickwit, mas olhando rapidamente o site, não parece um armazenamento vetorial e provavelmente é menos relacionado
      Para ferramentas de criação de ChatGPT customizado, veja a minha lista: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
      Em ajuste fino como serviço, há a Lamini AI, voltada para empresas
      Outra startup de embeddings é a Weaviate
    • Estou criando um DB vetorial simples só com numpy: https://github.com/sdan/vlite
      Acho que Milvus, Quickwit e Pinecone são mais voltados para uso corporativo e são difíceis de usar
    • Na minha opinião, qdrant é melhor
  • Existem modelos locais de embeddings mais rápidos e mais precisos, então não entendo por que manter a dependência da OpenAI

    • Quais modelos?
  • Trabalho em uma empresa que atua como uma camada de segurança entre dados corporativos sensíveis e LLMs
    Não importa se o modelo é HF, ChatGPT ou Bard, nem se o meio são dados de conversa, PDFs ou uma base de conhecimento como o Notion
    Ocultamos dados sensíveis para evitar usos arriscados e ao mesmo tempo fazemos verificação factual
    Se é esse tipo de coisa que você procura, posso te apresentar: tothepoint.tech