Fabrice AI: implementação técnica atual

Na última publicação, Fabrice AI: A jornada técnica, expliquei a jornada que percorremos para criar a Fabrice AI, fazendo um círculo completo. Comecei usando o Chat GPT 3 e 3.5. Desapontado com os resultados, tentei usar a Langchain Framework para criar meu próprio modelo de IA em cima dela, antes de voltar ao Chat GPT quando eles começaram a usar bancos de dados vetoriais e a melhorar enormemente os resultados com o 4o.

Aqui está o processo atual de treinamento do Fabrice AI:

  • Os dados de treinamento (publicações em blogs, URLs do YouTube, URLs de podcasts, URLs de PDFs e URLs de imagens) são armazenados em nosso banco de dados do WordPress.
  • Extraímos os dados e os estruturamos.
  • Fornecemos os dados estruturados à Open AI para treinamento usando a API Assistants.
  • Em seguida, o Open AI cria um banco de dados de armazenamento de vetores e o armazena.

Aqui está um exemplo de um dado estruturado. Cada parte do conteúdo tem seu próprio arquivo JSON. Nós nos certificamos de não exceder o limite de 32.000 tokens.

{

“id”: “1”,

“data”: ” “,

“link”: “https://fabricegrinda.com/”,

“title”: {

“renderizado”: “O que é a IA de Fabrice?”

  },

“Categoria”: “Sobre a Fabrice”,

“featured_media”: “https://fabricegrinda.com/wp-content/uploads/2023/12/About-me.png”,

“other_media”: “”,

“tipo de conhecimento”: “blog”,

“contentUpdated”: “Fabrice AI é uma representação digital dos pensamentos de Fabrice com base nas publicações de seu blog e em podcasts e entrevistas transcritos selecionados usando o ChatGPT. Como muitas das transcrições são imperfeitamente transcritas e o blog é apenas uma representação limitada de Fabrice, o indivíduo, pedimos desculpas por imprecisões e informações ausentes. No entanto, este é um bom ponto de partida para você conhecer as ideias de Fabrice sobre vários tópicos.”

}

Esta é a implementação técnica atual:

  • O site voltado para o consumidor está hospedado no AWS Amplify.
  • A integração entre o site público e o Open AI é feita por meio de uma camada de API, que é hospedada no AWS como um servidor de API Python.
  • Usamos o MongoDB como um registro para armazenar todas as perguntas feitas pelo público, as respostas dadas pelo Chat GPT e os URLs das fontes.
  • Usamos vários scripts para estruturar os dados do blog, do YouTube etc. para passar para o Open AI para treinamento.
  • Usamos o React-Speech Recognition para converter as consultas de voz em texto.
  • Também usamos o Google Analytics para monitorar o tráfego do site.

É importante observar que usamos dois assistentes:

  • Um para responder a perguntas.
  • Um para obter URLs de metadados, os URLs de blogs que têm o conteúdo original para exibir as fontes na parte inferior das respostas.

E agora?

  1. Melhorias na conversão de fala em texto

O modelo Whisper da Open AI para conversão de fala em texto é mais preciso do que o React. Ele também oferece suporte imediato a vários idiomas e é bom para lidar com fala em idiomas mistos, sotaques e dialetos. Como resultado, é provável que eu passe a usá-lo nos próximos meses. Dito isso, sua configuração é mais complexa, portanto, pode demorar um pouco. Você precisa lidar com o modelo, gerenciar as dependências (por exemplo, Python, bibliotecas) e garantir que tenha hardware suficiente para um desempenho eficiente. Além disso, o Whisper não foi projetado para uso direto em navegadores. Ao criar um aplicativo da Web, você precisa criar um serviço de backend para lidar com a transcrição, o que aumenta a complexidade.

  • Avatar de Fabrice AI

Quero criar um avatar Fabrice AI que se pareça comigo e com o qual você possa conversar. Avaliei o D-iD, mas achei muito caro para meus objetivos. O Eleven Labs é somente para voz. O Synthesia é excelente, mas atualmente não cria vídeos em tempo real. No final, decidi usar o HeyGen devido ao preço e à funcionalidade mais adequados.

Suspeito que, em algum momento, o Open AI lançará sua própria solução, de modo que esse trabalho terá sido em vão. Estou confortável com isso e mudarei para a solução da Open AI quando e se ela for lançada. Nesse estágio, o objetivo de todo esse exercício é aprender o que é possível fazer com a IA e quanto trabalho é necessário para me ajudar a entender melhor o espaço.

  • Painel de controle personalizado

No momento, preciso executar uma consulta ao MongoDB para obter um extrato das perguntas e respostas do dia. Estou criando um painel simples no qual posso obter extrações e estatísticas simples sobre o número de consultas por idioma, o número de solicitações de fala para texto etc.

  • Fontes de dados adicionais

Acabamos de fazer o upload do portfólio da FJ Labs para a Fabrice AI. Agora você pode perguntar se uma empresa faz parte do portfólio. A Fabrice AI responde com uma breve descrição da empresa e um link para seu site.

Dado o número de perguntas pessoais que a Fabrice AI estava recebendo e para as quais não tinha respostas, reservei um tempo para marcar manualmente cada palestrante no meu vídeo de 50º aniversário para fornecer o conteúdo necessário.

Conclusão

Com todo o trabalho que fiz nos últimos doze meses sobre todos os assuntos relacionados à IA, parece haver uma conclusão universal clara: quanto mais você espera, mais barato, mais fácil e melhor fica, e mais provável que a Open AI ofereça isso! Enquanto isso, entre em contato comigo se você tiver alguma dúvida.

Fabrice AI: a jornada técnica

Como mencionei na publicação anterior, o desenvolvimento do Fabrice AI se mostrou muito mais complexo do que o esperado, o que me obrigou a explorar várias abordagens diferentes.

A abordagem inicial: Índice Llama – Pesquisa vetorial

Minha primeira incursão no aprimoramento das habilidades de recuperação do Fabrice AI envolveu o uso do Índice Llama para pesquisa vetorial. O conceito era simples: pegar o conteúdo do meu blog, convertê-lo em documentos Langchain e, em seguida, transformá-los em documentos Llama. Esses documentos Llama seriam então armazenados em um índice vetorial, o que me permitiria consultar esse índice para obter informações relevantes.

No entanto, quando comecei a testar o sistema, ficou claro que essa abordagem não estava produzindo os resultados que eu esperava. Especificamente, quando eu consultava o sistema com perguntas de contexto pesado, como “Quais são os maiores erros que os fundadores de mercado cometem?”, a IA não conseguia fornecer respostas significativas. Em vez de recuperar o conteúdo diferenciado que eu sabia estar incorporado nos dados, ela retornava respostas irrelevantes ou incompletas.

Esse fracasso inicial me levou a reconsiderar minha abordagem. Percebi que simplesmente armazenar conteúdo em um índice vetorial não era suficiente; o mecanismo de recuperação precisava entender o contexto e as nuances das perguntas que estavam sendo feitas. Essa percepção foi a primeira de muitas lições que moldariam a evolução da Fabrice AI.

Armazenamento de conhecimento: Armazenamento e recuperação de documentos do MongoDB

Com as limitações da abordagem do índice Llama em mente, passei a explorar o armazenamento dos documentos do Llama no MongoDB. O esquema flexível e a estrutura orientada a documentos do MongoDB pareciam ser uma solução promissora para gerenciar os diversos tipos de conteúdo que eu havia acumulado ao longo dos anos.

O plano era criar uma experiência de pesquisa mais dinâmica e responsiva. No entanto, essa abordagem teve problemas rapidamente. A funcionalidade de pesquisa, que eu havia previsto ser mais robusta, não funcionou como esperado. Em vez disso, as consultas que deveriam retornar documentos relevantes não produziam resultados ou apresentavam conteúdo irrelevante.

Esse contratempo foi frustrante, mas também ressaltou uma lição fundamental: o método de armazenamento é tão importante quanto a estratégia de recuperação. Comecei a considerar outras opções, como a utilização do MongoDB Atlas para pesquisas vetoriais, que poderia fornecer a precisão e a escalabilidade de que eu precisava. No entanto, antes de me comprometer com essa alternativa, eu queria explorar outras abordagens para determinar se haveria uma solução mais eficaz.

Metadata Retriever e Vector Store: Buscando especificidade

Um dos próximos caminhos que explorei foi o uso de um recuperador de metadados combinado com um armazenamento de vetores. A ideia por trás dessa abordagem era categorizar a vasta gama de informações na Fabrice AI e, em seguida, recuperar respostas com base nessas categorias. Ao estruturar os dados com metadados, eu esperava melhorar a capacidade da IA de fornecer respostas específicas e direcionadas.

No entanto, esse método também tinha suas limitações. Embora parecesse promissor na superfície, a IA teve dificuldades para fornecer respostas precisas a todos os tipos de consultas. Por exemplo, quando perguntei: “O autor é otimista?” O sistema não conseguiu interpretar a pergunta no contexto do conteúdo relevante. Em vez de fornecer uma análise perspicaz com base nos metadados, ele retornou respostas vagas ou nenhuma resposta.

Essa abordagem me ensinou uma lição valiosa sobre a importância do contexto na IA. Não basta simplesmente categorizar as informações; a IA também deve entender como essas categorias interagem e se sobrepõem para formar um entendimento coeso do conteúdo. Sem essa profundidade de compreensão, até mesmo os métodos de recuperação mais sofisticados podem ser insuficientes.

Estruturação do conhecimento: O SummaryTreeIndex

Enquanto continuava a refinar a IA do Fabrice, experimentei criar um SummaryTreeIndex. Essa abordagem visava resumir todos os documentos em um formato de árvore, permitindo que a IA navegasse por esses resumos e recuperasse informações relevantes com base na estrutura do conteúdo.

A ideia era que, ao resumir os documentos, a IA poderia identificar rapidamente os pontos principais e responder às consultas com informações concisas e precisas. No entanto, esse método também enfrentou desafios significativos. A IA teve dificuldades para fornecer respostas significativas a consultas complexas, como “Como tomar decisões importantes na vida?” Em vez de aproveitar o conteúdo rico e cheio de nuances armazenado nos resumos, as respostas da IA geralmente eram superficiais ou incompletas.

Essa experiência ressaltou a dificuldade de equilibrar amplitude e profundidade na IA. Embora os resumos possam fornecer uma visão geral de alto nível, eles geralmente não têm o contexto detalhado necessário para responder a perguntas mais complexas. Percebi que qualquer solução eficaz precisaria integrar tanto o conteúdo detalhado quanto os resumos de alto nível, permitindo que a IA utilizasse ambos conforme necessário.

É por isso que, na versão do Fabrice AI que está no ar atualmente, eu faço com que a IA forneça primeiro um resumo da resposta, antes de entrar em mais detalhes.

Expandindo os horizontes: Índice do Gráfico de Conhecimento

Reconhecendo as limitações dos métodos anteriores, optei por uma abordagem mais sofisticada: o Knowledge Graph Index. Essa abordagem envolveu a construção de um gráfico de conhecimento a partir de texto não estruturado, permitindo que a IA se envolvesse em consultas baseadas em entidades. O objetivo era criar uma compreensão mais dinâmica e interconectada do conteúdo, permitindo que a IA da Fabrice respondesse a perguntas complexas e com muito contexto de forma mais eficaz.

Apesar de sua promessa, o Knowledge Graph Index também enfrentou obstáculos significativos. A IA teve dificuldades para produzir resultados precisos, principalmente para consultas que exigiam uma compreensão profunda do contexto. Por exemplo, quando perguntado: “What are fair Seed & Series A valuations?” (Quais são as avaliações justas da Seed e da Série A?), a IA novamente não conseguiu fornecer uma resposta relevante, destacando a dificuldade de integrar texto não estruturado em um gráfico de conhecimento coerente.

Essa abordagem, embora não tenha sido bem-sucedida, forneceu informações importantes sobre os desafios do uso de gráficos de conhecimento em IA. A complexidade dos dados e a necessidade de um contexto preciso significavam que mesmo um gráfico de conhecimento bem construído poderia ter dificuldades para fornecer os resultados desejados. Outra desvantagem do Knowledge Graph Index era sua baixa velocidade. O tempo de resposta para obter documentos relacionados era muito alto em relação a um índice de armazenamento de vetores.

Reavaliando os dados: Gêmeos

Depois de vários contratempos, decidi adotar uma abordagem diferente, aproveitando a IA do Google, o Gemini. A ideia era criar conjuntos de dados a partir de arquivos JSON-CSV e, em seguida, treinar um modelo LLM personalizado usando esses dados. Eu esperava que, usando dados estruturados e um modelo de treinamento robusto, eu pudesse superar alguns dos desafios que haviam atormentado as tentativas anteriores.

No entanto, essa abordagem também encontrou dificuldades. O processo de treinamento foi interrompido devido à formatação incorreta dos dados, o que impediu que o modelo fosse treinado de forma eficaz. Esse contratempo ressaltou a importância da integridade dos dados no treinamento de IA. Sem dados estruturados e formatados corretamente, até mesmo os modelos mais avançados podem não ter o desempenho esperado.

Essa experiência me levou a considerar o potencial de usar o BigQuery para armazenar dados JSON, fornecendo uma plataforma mais dimensionável e confiável para gerenciar os grandes conjuntos de dados necessários para treinar a Fabrice AI de forma eficaz.

Combinando pontos fortes: Documentos Langchain com Pinecone

Apesar dos desafios enfrentados até agora, eu estava determinado a encontrar uma solução que permitisse à Fabrice AI armazenar e recuperar conhecimento de forma eficaz. Essa determinação me levou a fazer experiências com documentos Langchain e Pinecone. A abordagem envolveu a criação de um armazenamento de vetores Pinecone usando documentos Langchain e embeddings OpenAI e, em seguida, a recuperação dos principais documentos semelhantes com base na consulta.

Esse método se mostrou promissor, principalmente quando a consulta incluía o título do documento. Por exemplo, quando perguntado: “Qual é a chave para a felicidade?”, a IA conseguiu recuperar e resumir o conteúdo relevante com precisão. Entretanto, ainda havia limitações, principalmente quando a consulta não continha palavras-chave ou títulos específicos.

Essa abordagem demonstrou o potencial da combinação de diferentes tecnologias para aprimorar o desempenho da IA. Ao integrar os documentos da Langchain com o armazenamento de vetores da Pinecone, consegui melhorar a relevância e a precisão das respostas da IA, embora com algumas limitações.

Alcançando a consistência: Construtor GPT OpenAI

Depois de explorar vários métodos e tecnologias, recorri ao GPT Builder da Open AI para consolidar e refinar o conhecimento armazenado na Fabrice AI. Ao carregar todo o conteúdo em uma base de conhecimento GPT, pretendi criar uma plataforma mais consistente e confiável para recuperar e interagir com meu conhecimento.

Essa abordagem provou ser uma das mais bem-sucedidas, com a IA capaz de fornecer melhores resultados em uma série de consultas. A chave para esse sucesso foi a integração de todo o conhecimento em um sistema único e coeso, permitindo que a IA aproveitasse toda a amplitude do conteúdo ao responder às perguntas.

Como mencionei em meu post anterior, não consegui fazer com que ele funcionasse em meu site, e ele só estava disponível para assinantes pagos do Chat GPT, o que eu achava muito limitado. Além disso, embora estivesse melhor, eu ainda não gostava da qualidade das respostas e não me sentia à vontade para divulgá-las ao público.

Refinamento final: Assistentes de GPT usando o Modelo 4o

A peça final do quebra-cabeça no desenvolvimento da Fabrice AI veio com a introdução dos GPT Assistants usando o Modelo 4o. Essa abordagem representou o ponto culminante de tudo o que aprendi ao longo do projeto. Ao utilizar um banco de dados de vetores e refinar os prompts, meu objetivo era atingir o nível mais alto possível de precisão e compreensão contextual nas respostas da IA.

Esse método envolveu o upload de todo o conhecimento que eu havia acumulado em um banco de dados vetorial, que foi usado como base para as interações da IA. O banco de dados vetorial permitiu que a IA realizasse pesquisas mais sofisticadas, recuperando informações com base no significado semântico das consultas, em vez de depender apenas da correspondência de palavras-chave. Isso representou um avanço significativo em relação às abordagens anteriores, permitindo que a IA compreendesse melhor e respondesse a perguntas complexas e com nuances.

Uma das principais inovações dessa abordagem foi o refinamento cuidadoso dos prompts. Ao elaborar e testar meticulosamente diferentes prompts, consegui orientar a IA no sentido de fornecer respostas mais precisas e relevantes. Isso envolveu não apenas ajustar o texto dos prompts, mas também experimentar diferentes maneiras de estruturar as consultas para obter as melhores respostas possíveis.

Os resultados foram impressionantes. A IA agora era capaz de lidar com uma ampla gama de consultas com alta precisão, mesmo quando as perguntas eram abertas ou exigiam uma compreensão profunda do contexto. Por exemplo, quando perguntaram a você: “Como tomar as decisões mais importantes da sua vida?” A IA forneceu uma resposta abrangente e perspicaz, baseando-se em uma variedade de fontes e perspectivas para fornecer uma resposta completa.

Esse sucesso foi o resultado de centenas de horas de trabalho e inúmeros experimentos. Ele demonstrou que, com a combinação certa de tecnologia e refinamento, era possível criar uma IA que pudesse não apenas armazenar e recuperar informações de forma eficaz, mas também interagir com elas de maneira significativa. O desenvolvimento dos GPT Assistants usando o Modelo 4o marcou o ponto em que a IA da Fabrice realmente se tornou realidade, atingindo o nível de sofisticação e precisão que eu havia imaginado desde o início. A API do GPT Assistants foi então integrada ao meu blog para permitir que os usuários finais interagissem com a Fabrice AI da maneira como você a vê no blog agora.

Refletindo sobre a jornada

O processo de desenvolvimento da Fabrice AI destacou as complexidades do trabalho com IA, principalmente quando se trata de compreender e contextualizar informações. Isso me ensinou que não há atalhos no desenvolvimento de IA – cada etapa, cada iteração e cada experimento é uma parte necessária da jornada para criar algo realmente eficaz.

Olhando para o futuro, estou animado para continuar refinando e expandindo a Fabrice AI. Conforme mencionado na última postagem, analisarei as perguntas feitas para completar a base de conhecimento onde houver lacunas. Também espero lançar uma versão interativa que se pareça comigo e com a qual você possa conversar.

>
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.