Um mecanismo básico de busca de IA de código aberto, modelado após perplexidade.ai. Se você não está familiarizado com uma plataforma de resposta a perguntas, eles usam um grande modelo de idioma como o ChatGPT para responder suas perguntas, mas melhora o ChatGPT, pois ele extrai resultados de pesquisa precisa e em tempo real para complementar a resposta (para que nenhum "corte de conhecimento"). E lista as citações dentro da resposta em si, que gera confiança, que não está alucinando e permite que você pesquise tópicos ainda mais.
search.php (procure "[encher me in]")O principal desafio com os LLMs como o ChatGPT é que eles têm pontos de corte de conhecimento (e ocasionalmente tendem a alucinar). É porque eles são treinados em dados até uma data específica (por exemplo, setembro de 2021). Portanto, se você deseja uma resposta para uma pergunta atualizada ou simplesmente deseja pesquisar um tópico em detalhes, precisará aumentar a resposta com fontes relevantes. Essa técnica é conhecida como RAG (geração aumentada de recuperação). E, no nosso caso, podemos simplesmente fornecer as informações atualizadas do LLM de mecanismos de pesquisa como Google ou Bing.
Para construir isso você mesmo, você deve se inscrever primeiro em uma chave da API do Bing, Google (via Serper), Brave ou outros. Bing, Brave e Serper oferecem um uso gratuito para começar.
Em search.php , coloque sua chave da API, quando apropriado (procure "[me preencha]"). Para este exemplo, eu tenho código para Brave e Google via Serper.
Aqui, você precisará se inscrever em uma chave da API de um provedor LLM. Há muitos provedores para escolher agora. Por exemplo, há o Openai, Anthropic, Anyscale, Groq, Cloudflare, Perplexity, Lepton ou grandes players como AWS, Azure ou Google Cloud. Eu usei muitos deles com sucesso e eles oferecem um subconjunto de modelos atuais e populares de código aberto e de código aberto. E cada modelo possui pontos fortes exclusivos, custos diferentes e velocidades diferentes. Por exemplo, o GPT-4 é muito preciso, mas caro e lento. Em caso de dúvida, eu recomendo o uso do ChatGPT-3.5-Turbo do OpenAI. É bom o suficiente, barato o suficiente e rápido o suficiente para testar isso.
Felizmente, a maioria desses provedores de atendimento LLM é compatível com o formato da API do OpenAI, portanto, a mudança para outro provedor / modelo é apenas um trabalho mínimo (ou apenas peça a um chatbot para escrever o código!).
Em search.php , coloque suas teclas da API, quando apropriado (procure "[me preencha]"). Para este exemplo, estou usando o OpenAI (para ChatGPT-3.5-Turbo / GPT-4) e Groq (para Mixtral-8B7B). Então, para manter seu trabalho mínimo, basta obter chaves para um ou ambos.
Quando você deseja fazer uma pergunta a um LLM, você pode fornecer muito contexto adicional. Cada modelo tem seu próprio limite único e alguns deles são muito grandes. Para o GPT-4-Turbo, você pode transmitir a totalidade do 1º livro de Harry Potter com sua pergunta. O super poderoso Gemini 1.5 do Google pode suportar um tamanho de contexto de mais de um milhão de tokens. Isso é o suficiente para passar por toda a série de 7 livros Harry Potter!
Felizmente, passar os trechos de 8 a 10 resultados de pesquisa é muito menor, permitindo que você use muitos dos modelos mais rápidos (e muito mais baratos), como GPT-3.5-turbo ou Mistral-7b.
Na minha experiência, transmitir a pergunta do usuário, a mensagem solicitada personalizada e os snippets de resultados de pesquisa geralmente são com menos de 1K tokens. Isso está bem nos limites do modelo mais básico, então isso não deve ser um problema.
search.php tem o prompt de amostra que eu tenho brincado com você. Hat-tip para o pessoal da Lepton AI, que abriu um projeto semelhante que me ajudou a refinar esse aviso.
Uma das características agradáveis da perplexidade é como eles sugerem perguntas de acompanhamento. Felizmente, isso é fácil de replicar.
Para fazer isso, você pode fazer uma segunda chamada para o seu LLM (em paralelo) solicitando perguntas relacionadas. E não se esqueça de transmitir essas citações no contexto novamente.
Ou você pode tentar construir um aviso para que o LLM responda à pergunta e faça perguntas relacionadas. Isso salva uma chamada de API e alguns tokens, mas é um pouco desafiador fazer com que esses LLMs sempre respondam em um formato consistente e repetível.
Para fazer deste um exemplo completo, precisamos de uma interface do usuário utilizável. Eu mantive a interface do usuário o mais simples possível e tudo está no index.html . Estou usando Bootstrap, JQuery e alguns CSS / JavaScript básicos, Markdown e um marcador de sintaxe JS para que isso aconteça.
Para melhorar a experiência, a interface do usuário faz o seguinte:
Para explorar um exemplo de trabalho, consulte https://yaddleai.com. É principalmente o mesmo código, embora eu tenha adicionado uma segunda chamada de pesquisa em paralelo para buscar imagens, escrevi uma página separada para buscar as últimas notícias e algumas outras pequenas melhorias.