Na primeira parte desta série de artigos, vimos que a exportação de dados do ChatGPT é muito mais do que apenas uma função técnica. Os seus dados exportados contêm uma coleção de pensamentos, ideias, análises e conversas que se acumularam durante um longo período de tempo. Mas enquanto estes dados estiverem apenas armazenados como um arquivo no seu disco rígido, continuam a ser apenas isso: um arquivo. O passo crucial é tornar esta informação novamente utilizável. É exatamente aqui que começa o desenvolvimento de uma IA de conhecimento pessoal.
A ideia é surpreendentemente simples: uma IA não deve apenas trabalhar com conhecimentos gerais, mas também ser capaz de aceder aos seus próprios dados. Deve ser capaz de pesquisar conversas anteriores, encontrar conteúdos adequados e incorporá-los em novas respostas. Isto transforma uma IA normal numa espécie de memória digital. Esta é a segunda parte da série de artigos, que agora aborda o lado prático das coisas.
Parte 1 da série: O tesouro subestimado na exportação de dados do ChatGPT
Enquanto entramos na parte prática das coisas nesta segunda parte, vale a pena dar uma vista de olhos na primeiro artigo desta série. O artigo aborda a questão fundamental da razão pela qual a exportação de dados do ChatGPT é tão interessante - e porque é que muitos utilizadores ainda subestimam o seu potencial. O artigo mostra quais os dados que estão efetivamente contidos na exportação, como podem ser utilizados para criar um arquivo de conhecimentos pessoais e porque é que este passo constitui a base para a sua própria IA com memória. Se quiser compreender por que razão estamos a construir esta conduta e qual o valor estratégico dos seus próprios históricos de conversação, deve começar pela Parte 1.
Antes de começarmos com a implementação efectiva no próximo capítulo, vejamos primeiro como é que um sistema deste tipo está fundamentalmente estruturado.
A ideia de base de um sistema RAG
A base técnica do nosso sistema é um conceito que é atualmente muito utilizado no mundo da IA: RAG, ou Retrieval Augmented Generation. Por detrás deste termo está um princípio muito prático.
Normalmente, um modelo linguístico responde a perguntas exclusivamente com o conhecimento que foi aprendido durante o seu treino. Embora este conhecimento seja extenso, tem duas limitações decisivas:
- Em primeiro lugar, o modelo não conhece qualquer informação individual sobre os seus próprios projectos ou pensamentos.
- Em segundo lugar, não pode aceder a novos dados criados após a formação.
É exatamente aqui que entra um sistema RAG. Em vez de gerar uma resposta diretamente, acontece primeiro outra coisa: o sistema procura numa base de dados o conteúdo que corresponde à pergunta colocada. Este conteúdo é então transferido para o modelo linguístico como contexto. Só depois é que a IA formula a sua resposta. Em termos simples, o processo é o seguinte:
- Fazes uma pergunta →
- o sistema pesquisa uma base de dados de conhecimentos →
- é encontrado conteúdo relevante →
- Este conteúdo é transferido para a IA como contexto →
- a IA gera uma resposta.
A vantagem decisiva é óbvia: a IA pode utilizar informações que não faziam parte da sua formação inicial.
E é aqui que os dados do ChatGPT entram em jogo. Se integrarmos estas conversas numa base de dados de conhecimentos, a IA pode aceder-lhes mais tarde. Pode encontrar ideias anteriores, utilizar argumentos de diálogos antigos ou ter em conta análises de conversas passadas. O sistema começa assim a „recordar“ os seus próprios pensamentos.
Os elementos constitutivos do nosso sistema
Para que isto funcione, precisamos de vários componentes que trabalhem em conjunto. Felizmente, a infraestrutura técnica para isso é muito mais fácil de aceder hoje do que era há alguns anos. No seu núcleo, o nosso sistema é composto por quatro componentes centrais.
- O primeiro bloco de construção é o Exportação de dados ChatGPT. Aqui estão os nossos dados em bruto. Estes contêm todas as conversas que tivemos anteriormente com a IA.
- O segundo bloco de construção é um Modelo de incorporação. Este modelo traduz o texto em vectores matemáticos. Isto permite comparar textos de acordo com o seu significado.
- O terceiro bloco de construção é um Base de dados vetorial. No nosso caso, utilizamos o Qdrant. Esta base de dados armazena as representações matemáticas dos textos e permite uma pesquisa semântica rápida.
- O quarto bloco de construção é um modelo linguístico local, que funciona através do Ollama. Este modelo formulará posteriormente as respostas efectivas.
Estes quatro componentes trabalham em estreita colaboração.
- A exportação de dados fornece o conteúdo.
- O modelo de incorporação torna-os legíveis por máquina.
- A base de dados vetorial guarda e pesquisa-os.
- O modelo de linguagem gera finalmente respostas compreensíveis.
Em conjunto, constituem a base de uma IA de conhecimento pessoal.
O fluxo de dados num relance
Para que o sistema funcione, os dados têm de passar por várias etapas. O primeiro passo é a exportação de dados do ChatGPT, que já criámos no primeiro artigo. As conversas que contém são primeiro extraídas dos ficheiros JSON. De seguida, estes textos têm de ser preparados. Os grandes históricos de conversações são divididos em secções mais pequenas, as chamadas partes de texto. Isto torna a pesquisa subsequente muito mais eficiente.
Na etapa seguinte, geramos embeddings a partir destas secções de texto. Cada texto é descrito matematicamente. Aos textos com um significado semelhante são atribuídos vectores semelhantes. Em seguida, guardamos estes vectores na nossa base de dados vetorial Qdrant.
Isto significa que a parte mais importante da infraestrutura já está instalada. Se uma pergunta for feita mais tarde, acontece o seguinte:
- A pergunta também é convertida num vetor.
- A base de dados procura textos com um significado semelhante.
- Estas passagens de texto são transferidas para o modelo linguístico como contexto.
- O modelo utiliza esta informação para formular uma resposta.
Este processo garante que a IA não só utiliza conhecimentos gerais, como também pode aceder aos seus próprios dados.
O que será possível no final
Depois de o sistema estar configurado, a forma de lidar com a IA muda visivelmente. Já não está a trabalhar apenas com um modelo linguístico geral, mas com uma IA que pode aceder aos seus próprios dados. Isto abre possibilidades completamente novas. Por exemplo, pode fazer perguntas como:
„Já alguma vez falei com a IA sobre este assunto?“
„Que ideias tinha eu sobre este projeto antes?“
„Que argumentos desenvolvi em conversas anteriores?“
A IA pesquisa então as suas próprias conversas e encontra o conteúdo adequado. Em vez de dar apenas uma resposta geral, pode referir-se a pensamentos anteriores, resumir análises antigas ou reconhecer ligações entre diferentes conversas.
Por outras palavras, a IA começa a trabalhar com o seu próprio arquivo de conhecimentos. Isto transforma uma simples ferramenta de conversação num sistema que pode apoiar o seu pensamento a longo prazo. E é precisamente este sistema que vamos construir passo a passo nos próximos capítulos. Na próxima secção, começamos com o trabalho prático e, em primeiro lugar, analisamos mais de perto a exportação de dados do ChatGPT. Porque antes de podermos construir uma base de dados de conhecimentos, precisamos de compreender como os nossos dados estão efetivamente estruturados.
Inquérito atual sobre a utilização de sistemas locais de IA
Preparação: Compreender a exportação de dados do ChatGPT
No primeiro artigo desta série, já criámos a exportação de dados do ChatGPT e descarregámo-la como um ficheiro ZIP. À primeira vista, este ficheiro pode parecer pouco espetacular - um arquivo com alguns ficheiros técnicos que, inicialmente, parece mais uma cópia de segurança do que um conjunto de dados valioso. No entanto, este ficheiro contém a base de todo o nosso sistema de conhecimento.
Antes de podermos começar a carregar estes dados numa base de dados ou a ligá-los a uma IA, precisamos primeiro de compreender como é que a exportação está estruturada. Porque só se soubermos que informação está contida e como está estruturada é que a podemos processar mais tarde de uma forma significativa. Neste capítulo, vamos, portanto, analisar a forma como a exportação de dados está estruturada, quais os ficheiros realmente relevantes e como podemos transformar este arquivo técnico numa base útil para o nosso sistema de conhecimento de IA.
Descompactar o ficheiro ZIP
O primeiro passo é trivial, mas não deixa de ser importante: precisamos de descompactar o ficheiro descarregado. O ficheiro está normalmente disponível como um ficheiro ZIP clássico. Dependendo da extensão da sua utilização anterior, o seu tamanho pode variar. Alguns utilizadores recebem um arquivo de algumas centenas de megabytes, outros de vários gigabytes.
Depois de descompactar o ficheiro, é criada uma pasta com vários ficheiros e subpastas. A estrutura exacta pode variar ligeiramente, mas normalmente encontrará uma série de ficheiros JSON e possivelmente outros ficheiros com informações adicionais.
Para muitos utilizadores, esta estrutura parece inicialmente algo técnica. Mas se pararmos um pouco, rapidamente reconhecemos um padrão: os dados estão organizados de forma relativamente limpa e seguem uma estrutura clara. Isto é uma boa notícia, porque é precisamente esta estrutura que torna possível o processamento automático do conteúdo mais tarde.
Estrutura dos dados do chat
A parte mais importante da exportação são os dados reais da conversa. Estas conversas são normalmente armazenadas em um ou mais ficheiros JSON. O JSON é um formato de dados generalizado que é frequentemente utilizado para armazenar informações estruturadas.
Este ficheiro não contém apenas um texto longo. Em vez disso, um diálogo está dividido em elementos individuais. Normalmente, um diálogo é composto por várias mensagens. Cada mensagem contém informações como
- o texto efetivo da mensagem
- o papel do remetente (utilizador ou IA)
- um carimbo de data/hora
- parcialmente outros metadados
Isto permite reconstruir todo o desenrolar do diálogo. Por exemplo, um diálogo começa com uma pergunta do utilizador. Segue-se uma resposta da IA. Podem seguir-se outras perguntas e respostas. Cada uma destas mensagens é guardada individualmente.
Isto tem uma grande vantagem: podemos mais tarde reconhecer exatamente quem disse o quê e como se desenvolveu uma conversa. Isto é particularmente importante para o nosso sistema de conhecimento, uma vez que pretendemos pesquisar e analisar mais tarde exatamente este conteúdo.
De que dados precisamos realmente
Embora a exportação contenha muita informação, não precisamos de toda ela para o nosso sistema de conhecimento. O componente mais importante são os textos das conversas. Estes textos contêm o conteúdo efetivo: Ideias, análises, perguntas e respostas. É precisamente este conteúdo que queremos pesquisar mais tarde.
Alguns metadados também podem ser úteis. Estes incluem, por exemplo
- Carimbo de data/hora
- Título da conversa
- Possivelmente números de identificação interna
Esta informação ajuda-nos a classificar melhor o conteúdo mais tarde ou a categorizar uma conversa em termos de tempo. Outros componentes da exportação são menos relevantes para o nosso projeto. Trata-se, por exemplo, de certos metadados técnicos que só têm interesse para o funcionamento interno da plataforma.
Para construir a nossa base de conhecimentos, concentramo-nos deliberadamente no essencial: os textos das conversas e algumas informações contextuais básicas. Quanto mais claramente estruturarmos estes dados, melhor a nossa IA poderá trabalhar com eles mais tarde.
Primeira análise dos dados
Antes de começarmos a trabalhar com scripts automatizados, vale a pena dar uma vista de olhos rápida aos próprios dados. Para tal, abra um dos ficheiros JSON com um editor de texto simples ou com um programa que consiga visualizar bem os ficheiros JSON. Muitos editores de código, como o Visual Studio Code, são muito adequados para este efeito, mas os editores de texto simples também funcionam.
Quando se olha para o ficheiro pela primeira vez, é provável que se veja uma quantidade relativamente grande de dados estruturados. Os ficheiros JSON são constituídos por elementos aninhados, ou seja, campos de dados que, por sua vez, contêm outros campos. Isto pode parecer um pouco complexo no início, mas com um pouco de paciência reconhecerá rapidamente a estrutura básica. Por exemplo, verá que uma conversa é composta por várias mensagens e que cada mensagem representa um objeto separado. O texto real encontra-se normalmente num campo claramente reconhecível.
Este primeiro rastreio tem um objetivo importante: ajuda-o a compreender como os seus dados estão estruturados. Porque, no próximo capítulo, utilizaremos precisamente esta estrutura para ler automaticamente as conversas e prepará-las para o nosso sistema de conhecimento. Por outras palavras: Estamos agora a transformar, passo a passo, um arquivo de dados técnicos numa base de conhecimentos utilizável. E é exatamente por aqui que começamos no próximo capítulo. O objetivo é extrair os dados das conversas e prepará-los de forma a poderem ser pesquisados mais tarde de forma eficiente.
Preparar os dados: Das conversas aos textos analisáveis
Depois de desempacotar a exportação de dados do ChatGPT no capítulo anterior e de obter uma visão geral inicial da estrutura, começa agora a parte técnica do nosso projeto. Embora os dados exportados estejam completos, ainda não estão optimizados para o nosso sistema de conhecimento nesta forma.
A razão é simples: os históricos das conversas são normalmente longos, contêm muitos tópicos e são armazenados numa estrutura legível para os humanos, mas não ideal para pesquisas semânticas ou bases de dados vectoriais. Para que a nossa IA possa encontrar conteúdo relevante mais tarde, temos primeiro de processar estes dados em bruto. Isto significa essencialmente três coisas:
- Extrair as conversas dos ficheiros JSON
- estruturar os textos de forma sensata
- dividir o conteúdo em secções mais pequenas
Este processo é um passo completamente normal nos sistemas de IA modernos e é frequentemente designado por pré-processamento.
Porque é que os dados em bruto não são diretamente adequados
Se der uma vista de olhos a um dos ficheiros JSON, verificará que um único chat é frequentemente composto por muitas mensagens. Um diálogo típico pode ter o seguinte aspeto, por exemplo:
- Questão
- Resposta
- Pedido de informação
- nova declaração
- mais pormenores
- Resumo
Algumas conversas podem conter centenas ou mesmo milhares de palavras. Isto não é um problema para os humanos. Simplesmente lemos um diálogo de cima para baixo.
No entanto, isto não funciona tão bem para uma pesquisa de IA. A razão para isto é que uma única conversa contém frequentemente vários tópicos. Se mais tarde efectuarmos uma pesquisa semântica, o sistema deve encontrar passagens de texto com a maior precisão possível - não conversas inteiras com muitos conteúdos diferentes.
É por isso que os textos grandes são divididos em secções mais pequenas. Estas secções são designadas por partes (chunks). Um pedaço é simplesmente um pequeno bloco de texto que contém um pensamento coerente. Este método melhora significativamente a qualidade da pesquisa posterior.
Extrair históricos de conversação
O primeiro passo prático é ler o conteúdo dos ficheiros JSON. Para o efeito, utilizamos um pequeno script Python. O Python é particularmente adequado para estas tarefas porque contém muitas bibliotecas para processamento de dados e IA.
Primeiro, crie um novo ficheiro, por exemplo:
extract_chats.py
Em seguida, adicionamos um script simples que carrega os dados do chat.
import json
with open("conversations.json", "r", encoding="utf-8") as f:
data = json.load(f)
print("Anzahl der Gespräche:", len(data))Quando executar este script, deverá ver quantas conversas estão contidas na sua exportação. Agora vamos extrair os textos actuais.
texts = []
for conversation in data:
if "mapping" in conversation:
for node in conversation["mapping"].values():
message = node.get("message")
if message:
content = message.get("content")
if content and "parts" in content:
text = " ".join(content["parts"])
texts.append(text)
print("Extrahierte Textabschnitte:", len(texts))Este script percorre a estrutura JSON e recolhe todas as partes de texto das conversas. Isto significa que já concluímos a parte mais importante: extraímos o conteúdo do formato de exportação técnica.
Criar blocos de texto
Agora vem o próximo passo importante: a fragmentação. Em vez de guardar conversas completas, dividimos os textos em secções mais pequenas.
Um tamanho típico para estas secções de texto é entre 300 e 800 palavras ou aproximadamente 500 tokens. Segue-se um exemplo simples de como dividir textos em partes.
def split_text(text, chunk_size=500):
words = text.split()
chunks = []
for i in range(0, len(words), chunk_size):
chunk = " ".join(words[i:i+chunk_size])
chunks.append(chunk)
return chunksAgora podemos aplicar esta função aos nossos textos.
all_chunks = []
for text in texts:
chunks = split_text(text)
all_chunks.extend(chunks)
print("Gesamtzahl der Chunks:", len(all_chunks))Criámos agora muitas secções de texto mais pequenas a partir dos nossos históricos de conversação. Estes blocos de texto são ideais para uma pesquisa posterior numa base de dados vetorial.
Adicionar metadados
Para além do texto propriamente dito, as informações adicionais podem ser muito úteis. Os chamados metadados ajudam-nos a ordenar ou filtrar melhor o conteúdo mais tarde. Os metadados típicos podem ser
- Data da conversa
- Título da conversa
- Fonte (ChatGPT Export)
- ID da chamada
Podemos guardar esta informação juntamente com o texto, por exemplo, desta forma:
documents = []
for conversation in data:
title = conversation.get("title", "Unbekannt")
if "mapping" in conversation:
for node in conversation["mapping"].values():
message = node.get("message")
if message:
content = message.get("content")
if content and "parts" in content:
text = " ".join(content["parts"])
chunks = split_text(text)
for chunk in chunks:
documents.append({
"text": chunk,
"title": title
})Isto já deu aos nossos dados uma estrutura muito melhor. Em vez de um arquivo de chat confuso, temos agora uma coleção de muitas pequenas secções de texto, cada uma das quais com informações contextuais.
É precisamente esta estrutura que será crucial no passo seguinte. Porque agora podemos começar a gerar embeddings a partir destes textos - ou seja, representações matemáticas do conteúdo que mais tarde serão guardadas na nossa base de dados vetorial. E é exatamente disso que trata o próximo capítulo.
Criar incorporações
No capítulo anterior, já colocámos os nossos dados do ChatGPT numa forma utilizável. Extraímos as conversas dos ficheiros JSON, limpámos os textos e dividimo-los em secções mais pequenas - os chamados "chunks".
No entanto, ainda falta um passo crucial para que a nossa IA possa realmente procurar conteúdos de uma forma significativa. Os textos têm de ser traduzidos para uma forma que as máquinas possam comparar. É aqui que os embeddings entram em ação.
Os embeddings são representações matemáticas de textos. Permitem aos computadores comparar o significado dos textos. Dois textos com conteúdos semelhantes recebem vectores semelhantes - mesmo que utilizem palavras diferentes. Esta é precisamente a propriedade de que necessitamos para o nosso sistema de conhecimento. Afinal, a nossa IA não deve procurar apenas palavras idênticas, mas também textos com conteúdos semelhantes.
O que são embeddings
Uma incorporação é basicamente uma lista de números. Estes números descrevem o significado de um texto num espaço matemático. Cada texto é convertido num chamado vetor. Este vetor pode ter o seguinte aspeto, por exemplo:
[0.134, -0.876, 0.442, 0.921, -0.223, ...]
Um único vetor pode conter várias centenas ou mesmo milhares de números. É claro que estes números não são diretamente compreensíveis para os seres humanos. No entanto, para as máquinas, são ideais para calcular as semelhanças entre textos. Se dois textos têm um conteúdo semelhante, os seus vectores estão mais próximos no espaço matemático. Um exemplo:
- Texto A„Como posso exportar os meus dados do ChatGPT?“
- Texto B: „Como é que transfiro as minhas conversas do ChatGPT?“
Embora a redação seja diferente, ambos os textos descrevem basicamente o mesmo tópico. Um bom modelo de incorporação reconhece esta semelhança. Assim, os dois textos recebem vectores semelhantes. Mais tarde, utilizaremos exatamente este princípio para a nossa pesquisa semântica.
Modelos de incorporação com Ollama
Precisamos de um modelo especial para criar embeddings. Felizmente, não temos de recorrer a serviços externos na nuvem para o fazer. Muitos modelos de incorporação podem agora ser operados localmente - e é aqui que o Ollama entra em ação.
Uma vez que o Ollama já está a funcionar no seu sistema, podemos incorporar aí um modelo install. Um modelo muito bom é, por exemplo:
nomic-embed-text
É possível domá-lo com o seguinte comando 1TP12:
ollama pull nomic-embed-text
Outros modelos populares são
- mxbai-embed-large
- bge-grande
- tudo-minilme
Para os nossos objectivos texto nómico-embutido é um ótimo ponto de partida. Este modelo gera embeddings de alta qualidade e funciona localmente sem qualquer problema.
Criar localmente embeddings
Agora queremos alargar o nosso script Python para que possa gerar embeddings. Primeiro 1TP12Criamos uma biblioteca com a qual Python pode se comunicar Ollama.
pip install ollama
Agora podemos abordar o modelo de incorporação diretamente a partir de Python. Segue-se um exemplo simples:
import ollama
response = ollama.embeddings(
model="nomic-embed-text",
prompt="Wie exportiere ich meine ChatGPT-Daten?"
)
print(len(response["embedding"]))Se tudo tiver funcionado, obterá um vetor com várias centenas de números.
Agora vamos aplicar isto aos nossos blocos de conversação.
embeddings = []
for doc in documents:
text = doc["text"]
result = ollama.embeddings(
model="nomic-embed-text",
prompt=text
)
vector = result["embedding"]
embeddings.append({
"text": text,
"embedding": vector,
"title": doc["title"]
})Utilizamos isto para criar um vetor para cada secção de texto. Estes vectores são posteriormente guardados na nossa base de dados.
Porque é que este passo é crucial
Os embeddings estão no centro dos sistemas de conhecimento modernos. Sem os embeddings, só poderíamos pesquisar textos utilizando as clássicas pesquisas por palavras-chave. Isto significaria que o sistema só encontraria conteúdos que contivessem exatamente as mesmas palavras. Mas a linguagem raramente funciona de forma tão simples. Por exemplo, um utilizador pode perguntar:
„Como é que processei os meus dados ChatGPT?“
No entanto, a conversa original poderia ser formulada da seguinte forma:
„Como posso analisar a minha exportação de dados ChatGPT?“
Uma simples pesquisa pode não reconhecer esta ligação. Com as incorporações é diferente. Uma vez que ambos os textos têm significados semelhantes, os seus vectores estão próximos um do outro no espaço matemático. A nossa base de dados pode assim encontrar conteúdos correspondentes, mesmo que a redação seja diferente. É precisamente esta capacidade que torna a pesquisa semântica tão poderosa. Permite a uma IA procurar não só palavras, mas também significados.
E é exatamente por isso que os embeddings são o elemento central do nosso sistema. No próximo capítulo, vamos desenvolver isto e installieren a nossa base de dados de vectores. Vamos armazenar aí os vectores gerados - e criar assim a base para a nossa IA de conhecimento pessoal.
Qdrant 1TP12Adicionar e configurar
Depois de termos criado os embeddings para os nossos dados de conversação no capítulo anterior, temos agora uma coleção de secções de texto e vectores associados. Estes vectores descrevem matematicamente o significado dos textos e constituem assim a base de uma pesquisa semântica. No entanto, atualmente, estes dados só estão disponíveis na memória de trabalho do nosso guião ou em listas simples. Precisamos de uma memória especializada para que a nossa IA possa aceder-lhes mais tarde de forma eficiente.
É exatamente aqui que entra em jogo uma base de dados vetorial. Uma base de dados de vectores é optimizada para armazenar grandes quantidades de tais embeddings e procurar rapidamente vectores semelhantes. Para o nosso projeto, utilizamos a Qdrant, uma base de dados moderna de código aberto que foi especialmente desenvolvida para aplicações de IA.
Neste capítulo 1TP12 vamos instalar o Qdrant, iniciar o servidor e preparar a base de dados para que possamos importar facilmente os nossos dados de conversação mais tarde.
O que é o Qdrant
A Qdrant é uma base de dados especializada para as chamadas pesquisas vectoriais. Enquanto as bases de dados tradicionais armazenam informações em tabelas - como nomes, números ou textos - uma base de dados vetorial trabalha com representações matemáticas de dados.
Isto significa que, em vez de guardar apenas o texto, o Qdrant guarda os embeddings associados. A grande vantagem reside na pesquisa. Se uma pergunta for feita mais tarde, o nosso sistema também converte essa pergunta num vetor. O Qdrant pode então calcular, à velocidade da luz, quais os textos guardados que são mais semelhantes a este vetor. Assim, é possível descobrir, por exemplo:
- que passagens de chat correspondem tematicamente à pergunta
- quais as conversas anteriores com conteúdo semelhante
- que ideias podem ser relevantes no seu arquivo
É precisamente por esta razão que o Qdrant é atualmente utilizado em muitos sistemas modernos de IA - desde pesquisas de documentos a assistentes de conhecimento complexos. Outra vantagem: Qdrant é open source, rapidamente 1TP12izado e funciona sem problemas numa máquina local normal.
Instalação do Qdrant
A maneira mais fácil de installieren Qdrant é via Docker. Se o Docker estiver disponível na sua máquina, pode iniciar o servidor com um único comando. Aqui pode Descarregar o Docker, se ainda não o tiver instalado no seu computador installiert.
docker run -p 6333:6333 qdrant/qdrant
Este comando inicia o servidor Qdrant e abre a porta padrão 6333. Os nossos scripts podem depois comunicar com a base de dados através desta porta.
Se não quiser usar o Docker, existem também outras formas de installiere Qdrant, por exemplo, através de um binário local ou de um gestor de pacotes. No entanto, em muitos projectos práticos, o Docker provou ser a opção mais simples e mais estável.
Depois de o servidor ter sido iniciado, o Qdrant é executado em segundo plano e aguarda os pedidos. Pode agora testar se o servidor está acessível. Para o efeito, abra o seguinte endereço no seu navegador:
http://localhost:6333
Se tudo tiver funcionado, deverá aparecer uma mensagem de estado simples. O servidor está agora pronto para os próximos passos.
Primeiros passos com o Qdrant
Antes de podermos importar os nossos dados de chat, precisamos de criar uma coleção. No Qdrant, uma coleção é comparável a uma tabela numa base de dados clássica. Ela contém os nossos vectores e os dados associados.
Em primeiro lugar, installiere a biblioteca Python para Qdrant:
pip install qdrant-client
Agora podemos estabelecer uma ligação à base de dados no nosso script Python.
from qdrant_client import QdrantClient
client = QdrantClient("localhost", port=6333)Se este código for executado sem uma mensagem de erro, a ligação é bem sucedida. Agora criamos uma coleção para os nossos dados de chat.
from qdrant_client.models import VectorParams, Distance client.recreate_collection( collection_name="chatgpt_archive", vectors_config=VectorParams(size=768, distance=Distance.COSINE), )
Os parâmetros mais importantes são
- nome_da_colecção - o nome da nossa base de dados
- tamanho - o comprimento dos vectores de incorporação
- distância - o método de cálculo da semelhança
O tamanho do vetor depende do modelo de incorporação utilizado. Muitos modelos funcionam com vectores de 768 ou 1024 dimensões. A função de distância cosseno é um dos métodos mais comuns para calcular as semelhanças entre textos. A nossa base de dados está agora pronta a ser utilizada.
Estrutura de dados do plano
Antes de importarmos os nossos dados, vale a pena dar uma vista de olhos rápida à estrutura que queremos guardar. Cada entrada na nossa base de dados vetorial será constituída por vários componentes:
- ID - um identificador único
- Incorporação - o vetor do texto
- Carga útil - Informações adicionais sobre o texto
A carga útil pode conter, por exemplo
- o texto original
- o título da conversa
- a data
- outros metadados
Um exemplo de um registo de dados pode ser o seguinte:
{
"id": 1,
"vector": [0.123, -0.452, 0.889, ...],
"payload": {
"text": "Wie kann ich meinen ChatGPT-Datenexport analysieren?",
"title": "Datenanalyse"
}
}
Esta estrutura tem uma grande vantagem. Os vectores são utilizados para a pesquisa semântica, enquanto a carga útil contém todas as informações que pretendemos apresentar ou analisar mais tarde. Isto significa que o nosso sistema permanece flexível e pode ser facilmente expandido mais tarde.
Isto significa que a parte mais importante da infraestrutura já está preparada. O nosso servidor Qdrant está a funcionar, a base de dados está configurada e sabemos qual será a estrutura dos nossos dados. No próximo capítulo, começamos com o passo crucial: importamos os nossos dados do ChatGPT para a base de dados e transformamos o nosso arquivo de conversas numa base de conhecimentos real e pesquisável.
Importar dados do ChatGPT para o Qdrant
Agora que criámos o Qdrant installiert e uma coleção no capítulo anterior, foi criada a base técnica para a nossa base de dados de conhecimentos. Os nossos embeddings já existem - criámo-los a partir dos dados do ChatGPT - e o Qdrant está a funcionar como servidor de base de dados na nossa máquina.
Agora vem o passo crucial: carregamos os nossos dados para a base de dados. Não só guardamos os próprios vectores, como também os textos e metadados associados. Esta combinação permite que a nossa IA encontre mais tarde conteúdos relevantes e os utilize nas respostas. Neste capítulo, construímos a verdadeira base de conhecimentos do nosso sistema.
Guardar incorporações
Em primeiro lugar, temos de transferir os embeddings gerados para a base de dados. Cada entrada na Qdrant é constituída por três componentes:
- uma identificação
- um vetor (incorporação)
- uma carga útil com dados adicionais
No nosso caso, por exemplo, o payload contém
- a secção de texto
- o título da conversa
- Possivelmente mais metadados
Em Python, podemos preparar esta estrutura com relativa facilidade. Um exemplo:
points = []
for idx, item in enumerate(embeddings):
points.append({
"id": idx,
"vector": item["embedding"],
"payload": {
"text": item["text"],
"title": item["title"]
}
})Isto gera uma lista de pontos de dados que podemos depois guardar em Qdrant. Cada ponto de dados contém, portanto, uma secção de texto, o vetor correspondente e informações de contexto adicionais. Esta estrutura constitui mais tarde a base da nossa pesquisa semântica.
Criar script de importação
Agora, ligamos o nosso script Python à Qdrant e transferimos os dados. Para o fazer, utilizamos o cliente Python Qdrant, que analisámos no capítulo anterior 1TP12. A importação pode ter o seguinte aspeto, por exemplo:
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
client = QdrantClient("localhost", port=6333)
points = []
for idx, item in enumerate(embeddings):
point = PointStruct(
id=idx,
vector=item["embedding"],
payload={
"text": item["text"],
"title": item["title"]
}
)
points.append(point)
client.upsert(
collection_name="chatgpt_archive",
points=points
)
print("Import abgeschlossen:", len(points), "Datensätze gespeichert.")O comando upsert garante que os dados são guardados na coleção. Se já existir um ID, a entrada é actualizada. Caso contrário, é criado um novo registo de dados. Dependendo do tamanho da exportação do ChatGPT, essa importação pode levar alguns segundos ou minutos. Isto é completamente normal para conjuntos de dados maiores - como vários milhares de secções de texto.
Testar a base de dados
Quando a importação estiver concluída, devemos verificar se os nossos dados foram guardados corretamente. O teste mais simples é efetuar uma pesquisa vetorial. Para fazer isso, primeiro criamos uma incorporação para uma pergunta de teste.
query = "Wie kann ich ChatGPT-Daten analysieren?" query_vector = ollama.embeddings( model="nomic-embed-text", prompt=query )["embedding"]
Agora podemos procurar em Qdrant por vectores semelhantes.
search_result = client.search( collection_name="chatgpt_archive", query_vector=query_vector, limit=3 )
Este comando devolve as três secções de texto mais semelhantes da nossa base de dados. Podemos produzi-las assim, por exemplo:
for result in search_result:
print(result.payload["text"])
print("---")Se tudo tiver funcionado, aparecerão as secções de chat do seu arquivo que correspondem à consulta de pesquisa. Agora já sabemos: A nossa base de dados está a funcionar.
Primeira avaliação do desempenho
Este momento é um dos aspectos mais interessantes de todo o projeto. Pela primeira vez, torna-se evidente que o nosso arquivo de conversação pode efetivamente ser utilizado como uma fonte de conhecimento. Pode agora experimentar diferentes consultas de pesquisa. Por exemplo:
- „Artigo da IA“
- „Sistema RAG“
- „Exportação de dados ChatGPT“
- „Ideia de estratégia“
Consoante o conteúdo do seu histórico de conversações, o Qdrant encontrará passagens de texto adequadas. Por vezes, ficará surpreendido com o conteúdo que ressurge. Conversas que há muito esqueceu podem, de repente, voltar a ser relevantes. Isto mostra muito claramente porque é que esta abordagem é tão interessante. As suas antigas conversas de IA já não são apenas um arquivo. Tornam-se uma base de conhecimentos pesquisável.
Atingimos assim um marco importante. Os nossos dados ChatGPT estão agora totalmente armazenados na base de dados vetorial e podem ser pesquisados semanticamente. No próximo capítulo, damos um passo em frente: ligamos a nossa base de dados de conhecimentos à própria IA. Isto permitirá que o modelo linguístico aceda a estes dados no futuro e os incorpore diretamente nas respostas.

Ligar a IA à base de dados de conhecimentos
Até este ponto, já construímos uma grande parte da infraestrutura. Os nossos dados ChatGPT foram extraídos da exportação, divididos em secções de texto mais pequenas, incorporados e finalmente armazenados na base de dados vetorial Qdrant.
No entanto, a nossa IA ainda não está a trabalhar com estes dados. Embora possamos efetuar uma pesquisa vetorial utilizando Python e encontrar passagens de texto adequadas, a própria IA ainda não está ciente disso. Quando lhe fazemos uma pergunta, ela continua a utilizar apenas os seus conhecimentos gerais da língua.
O próximo passo é, portanto, ligar estes dois mundos. Estamos agora a construir um processo em que a IA recebe primeiro conteúdos relevantes da base de dados de conhecimentos e depois os incorpora na sua resposta. Este é precisamente o núcleo de um sistema RAG.
Processo de inquérito
O processo de um pedido de informação muda ligeiramente graças ao nosso sistema de conhecimento. Até agora, uma conversa com uma IA era normalmente assim:
- Fazes uma pergunta →
- A IA processa a pergunta →
- a IA gera uma resposta.
Uma base de dados de conhecimentos é uma etapa adicional. O novo processo tem o seguinte aspeto:
- Fazes uma pergunta →
- a pergunta é convertida numa incorporação →
- a base de dados vetorial procura textos semelhantes →
- Estes textos são transferidos para a IA como contexto →
a IA formula uma resposta. Isto significa que a IA já não trabalha apenas com o seu conhecimento treinado, mas também com os seus próprios dados. Este contexto torna frequentemente as respostas muito mais precisas e personalizadas.
Etapa de recuperação
A primeira parte deste processo é conhecida como recuperação. Recuperar significa simplesmente „ir buscar“. Nesta etapa, o nosso sistema procura na base de dados conteúdos que correspondam ao tópico da pergunta. Primeiro, criamos outra incorporação para a pergunta atual.
query = "Welche Ideen hatte ich zur Nutzung meines ChatGPT-Datenexports?" query_vector = ollama.embeddings( model="nomic-embed-text", prompt=query )["embedding"]
Esta incorporação descreve o significado da pergunta em forma matemática. O Qdrant pode agora procurar vectores semelhantes.
results = client.search( collection_name="chatgpt_archive", query_vector=query_vector, limit=5 )
A base de dados devolve agora as cinco passagens de texto que melhor correspondem à pergunta. Estas passagens de texto formam o contexto para a IA. Reunimo-las numa lista.
context_texts = [] for r in results: context_texts.append(r.payload["text"])
Dispomos agora de uma coleção de conteúdos relevantes do nosso arquivo de chat.
Transferir contexto para Ollama
Agora vem o passo decisivo. Passamos este contexto, juntamente com a pergunta original, para o nosso modelo linguístico. O modelo pode agora utilizar esta informação para formular uma resposta.
Em primeiro lugar, criamos a chamada mensagem. Um prompt é simplesmente o texto que enviamos para a IA.
context = "\n\n".join(context_texts)
prompt = f"""
Du bist ein KI-Assistent, der mit meinem persönlichen Wissensarchiv arbeitet.
Nutze die folgenden Textausschnitte als Kontext:
{context}
Beantworte nun diese Frage:
{query}
"""Agora enviamos esta mensagem para o nosso modelo linguístico no Ollama.
response = ollama.chat(
model="llama3",
messages=[
{"role": "user", "content": prompt}
]
)
print(response["message"]["content"])A IA recebe agora a pergunta e as passagens de texto relevantes da nossa base de dados. Isto permite-lhe gerar respostas com base nos nossos próprios dados.
Geração de respostas
A última etapa é a geração da resposta propriamente dita. O modelo linguístico combina agora duas fontes de conhecimento:
os seus próprios conhecimentos
o contexto da nossa base de dados de conhecimentos
Esta combinação é particularmente poderosa. O modelo pode explicar relações gerais e, ao mesmo tempo, incorporar conteúdos específicos do nosso arquivo. Um exemplo: Se perguntar:
„Que ideias tive para utilizar a minha exportação de dados ChatGPT?“
a IA pode agora aceder a conversas anteriores e criar um resumo estruturado a partir delas. Por exemplo, pode responder:
- Falou sobre a construção de um arquivo de conhecimentos pessoais
- Pretendia desenvolver uma IA local com um sistema RAG
- Desenvolveu a ideia de uma série de artigos
Sem a etapa de recuperação, a IA não teria tido conhecimento desta informação. Com o nosso sistema, o seu arquivo de conversação torna-se uma verdadeira fonte de conhecimento. Isto completa a parte mais importante do nosso sistema. Agora temos:
- uma IA local através de Ollama
- uma base de dados vetorial com os nossos dados de conversação
- uma pesquisa semântica
- um fluxo de trabalho RAG
No próximo capítulo, testaremos este sistema na prática e veremos se a nossa IA de conhecimento pessoal funciona de facto.

Primeiro, as perguntas com o seu conhecimento pessoal IA
Agora que estabelecemos a ligação entre a nossa IA e a base de dados de conhecimentos no capítulo anterior, o sistema está tecnicamente completo. Os nossos dados ChatGPT estão na base de dados vetorial, a IA pode recuperar conteúdos relevantes e todo o processo de um sistema RAG funciona.
Agora vem a parte mais emocionante do projeto: as primeiras consultas reais. Porque só agora podemos ver se o nosso sistema faz realmente o que esperávamos - nomeadamente encontrar conversas anteriores, analisar conteúdos e gerar respostas com significado. Neste capítulo, testamos a nossa IA de conhecimento, analisamos casos de utilização típicos e damos uma vista de olhos a possíveis optimizações.
Exemplo de consultas
Vamos começar com algumas perguntas simples. Uma boa estratégia é começar por fazer perguntas que sabe que estão no seu arquivo de conversação. Por exemplo:
„Que ideias tive para utilizar a minha exportação de dados ChatGPT?“
„O que é que eu escrevi sobre os sistemas RAG?“
„Que estratégias discuti para utilizar a IA?“
Estas perguntas contêm deliberadamente formulações abertas. O objetivo não é encontrar um texto específico, mas descobrir um conteúdo tematicamente adequado. Quando coloca uma pergunta deste tipo ao seu sistema, o processo que criámos no capítulo anterior decorre em segundo plano:
- A pergunta é convertida numa incorporação.
- A base de dados vetorial procura secções de texto semelhantes.
- Estas passagens de texto são transferidas para a IA como contexto.
- A IA gera uma resposta com base neste contexto.
O resultado pode ser surpreendente. Muitas vezes, surgem conversas que há muito se esqueceram. Ideias antigas reaparecem de repente no ecrã - por vezes até num contexto completamente novo.
É precisamente este o ponto forte desta abordagem. O seu arquivo de chat torna-se uma fonte de conhecimento pesquisável.
Qualidade das respostas
Se experimentar algumas perguntas, aperceber-se-á de que a qualidade das respostas pode variar. Isto é perfeitamente normal. A qualidade de um sistema deste tipo depende de vários factores. Um fator importante é o tamanho das secções de texto. Se as secções forem demasiado grandes, podem conter vários tópicos. Isto torna a pesquisa menos exacta.
No entanto, se os pedaços forem demasiado pequenos, por vezes falta o contexto necessário. Outro fator é o modelo de incorporação. Os diferentes modelos reconhecem os contextos de significado de forma diferente. Alguns são particularmente adequados para textos técnicos, outros para linguagem geral.
O número de resultados obtidos também desempenha um papel importante. Por exemplo, se apenas forem recuperadas duas passagens de texto, podem faltar informações importantes. Se, por outro lado, forem carregados demasiados textos, a IA pode ter dificuldade em reconhecer o contexto relevante.
Estes parâmetros podem ser facilmente ajustados mais tarde. O mais importante, antes de mais, é ter um sistema básico a funcionar.
Problemas típicos
Como em qualquer sistema técnico, também aqui podem ocorrer algumas dificuldades. Um problema comum é o facto de a base de dados encontrar textos que são apenas parcialmente relevantes. Isto deve-se ao facto de a pesquisa semântica trabalhar sempre com probabilidades.
Outro problema pode surgir se os textos tiverem sido demasiado fragmentados. Se um pensamento estiver disperso por várias partes, a IA pode ter dificuldade em reconhecer o contexto.
O pedido também desempenha um papel importante. Se o pedido não for claro, a IA pode não utilizar o contexto da melhor forma. Um exemplo de uma mensagem melhor poderia ser o seguinte:
Utilize os seguintes excertos de texto do meu arquivo de conhecimentos,
responder à pergunta da forma mais exacta possível.
Se existirem conteúdos relevantes, faça um resumo dos mesmos.
Estes pequenos ajustamentos podem melhorar significativamente a qualidade das respostas.
Afinação fina
Assim que o sistema estiver basicamente a funcionar, começa a parte mais interessante: a afinação. Aqui pode experimentar e melhorar o seu sistema de conhecimento passo a passo. Algumas optimizações típicas são
- Ajustar o tamanho do bloco
Por vezes, secções de texto mais pequenas proporcionam melhores resultados. Noutros casos, é útil mais contexto. - Utilização de um modelo de incorporação diferente
A alteração do modelo pode melhorar significativamente a qualidade da pesquisa semântica. - Mais contexto para a IA
É possível obter mais resultados da base de dados, por exemplo, dez passagens de texto em vez de cinco. - Utilizar metadados
Se guardar informações adicionais - como a data ou o título da chamada - pode filtrar a pesquisa com maior precisão mais tarde.
Estes ajustamentos fazem parte de qualquer sistema RAG real. Raramente existe um ajuste perfeito para todas as situações. Mas é precisamente este o atrativo de tais sistemas: podem ser continuamente melhorados.
Com este capítulo, realizámos o primeiro teste completo do nosso sistema. Vimos que a nossa IA de conhecimento pessoal é efetivamente capaz de pesquisar conversas antigas e recuperar conteúdos relevantes.
Isto significa que o núcleo do nosso projeto já foi alcançado. Mas o sistema ainda pode ser consideravelmente alargado. No próximo capítulo, veremos como pode integrar fontes de dados adicionais e expandir o seu arquivo de conhecimentos pessoais, passo a passo.
Extensões para o seu sistema de conhecimento de IA pessoal
Já criou um sistema funcional com a configuração anterior. Os seus dados ChatGPT foram extraídos, convertidos em embeddings, armazenados em Qdrant e finalmente ligados a uma IA local. O resultado é uma IA de conhecimento que pode aceder a conversas anteriores.
Mas, em rigor, estamos apenas no início. A arquitetura que construiu não se limita aos dados ChatGPT. Funciona com qualquer tipo de texto. Qualquer coisa que possa ser convertida em documentos ou ficheiros de texto pode fazer parte deste sistema de conhecimento. É aqui que reside o verdadeiro potencial deste tipo de sistemas.
O que basicamente construímos é uma máquina de conhecimento pessoal. E esta máquina pode ser expandida passo a passo. Neste capítulo, analisamos as possibilidades que daí advêm e como pode expandir o seu sistema a longo prazo.
Integrar fontes de dados adicionais
O próximo passo mais óbvio é adicionar mais conteúdo à sua base de conhecimentos. As conversas do ChatGPT são um bom começo, mas normalmente representam apenas uma parte do seu próprio conhecimento. Muitas informações estão disponíveis noutros formatos. Por exemplo:
- artigos próprios
- Notas
- Documentos PDF
- Documentos de investigação
- E-Books
- Protocolos ou listas de ideias
Todo este conteúdo pode ser processado da mesma forma que os nossos dados de conversação. O processo permanece idêntico:
- Extrair texto
- Dividir o texto em partes
- Criar incorporações
- Guardar dados em Qdrant
Um exemplo: Se tiver escrito muitos dos seus próprios artigos, pode importar esses textos para a sua base de dados de conhecimentos. A IA pode aceder-lhes mais tarde e reconhecer correlações. Por exemplo, pode perguntar:
„Que artigos escrevi sobre IA?“
ou
„Que argumentos desenvolvi sobre este tema no passado?“
A IA pesquisa então o seu arquivo de artigos e utiliza o conteúdo que encontra como contexto. Desta forma, o seu sistema evolui passo a passo para um arquivo de conhecimentos abrangente.
Várias bases de dados de conhecimentos
À medida que a quantidade de dados aumenta, pode ser útil separar diferentes áreas. O Qdrant permite-lhe criar várias colecções. Cada coleção pode representar a sua própria base de conhecimentos. Um possível sistema poderia ser assim, por exemplo:
- Coleção 1Conversas ChatGPT
- Coleção 2: Arquivo de artigos
- Coleção 3: notas pessoais
- Coleção 4Documentação técnica
Esta separação tem várias vantagens. Em primeiro lugar, a estrutura mantém-se clara. Sabe-se sempre onde está armazenado determinado conteúdo. Em segundo lugar, as consultas podem ser controladas de forma mais específica. Algumas perguntas talvez devam pesquisar apenas o arquivo de artigos, outras todo o sistema de conhecimento. Um exemplo:
- Uma pergunta de investigação só pode ser pesquisada no arquivo de artigos.
- Uma questão estratégica, por outro lado, poderia ter em conta todas as colecções ao mesmo tempo.
Estas estruturas tornam os sistemas de conhecimento de maior dimensão significativamente mais eficientes.
Actualizações automáticas
Outro passo útil é atualizar o sistema regularmente. No exemplo anterior, processámos a exportação de dados ChatGPT uma vez. No entanto, na prática, estão constantemente a ser criados novos conteúdos.
Novas conversas, novas notas, novos documentos - toda esta informação pode também tornar-se parte do seu arquivo de conhecimentos.
Por isso, vale a pena pensar em actualizações automáticas. Uma solução simples consiste em importar regularmente novos dados. Por exemplo:
- Processar novos dados de conversação uma vez por semana
- Importação automática de novos documentos
- Adicionar imediatamente novos artigos à base de dados
Tecnicamente, isto é relativamente fácil de implementar. Um pequeno script pode verificar regularmente se estão disponíveis novos ficheiros e processá-los automaticamente. Isto permite que o seu sistema de conhecimento cresça continuamente. Com o tempo, é criado um arquivo cada vez mais extenso que documenta os seus pensamentos e projectos.
Integração nas suas próprias aplicações
Até agora, o nosso sistema tem sido utilizado através de simples scripts Python. Mas, a longo prazo, este sistema também pode ser integrado nas suas próprias aplicações. Por exemplo, muitos programadores estão a criar pequenas interfaces Web que lhes permitem utilizar diretamente os seus conhecimentos de IA.
Em vez de iniciar um script, pode simplesmente escrever uma pergunta num campo de entrada. O mesmo processo é executado em segundo plano:
- Criar incorporação
- Pesquisar na base de dados
- Transferir o contexto para a IA
- Gerar resposta
O resultado aparece então diretamente na interface do utilizador. Uma aplicação deste tipo pode assumir formas muito diferentes. Por exemplo:
- uma IA de investigação pessoal
- um assistente de conhecimentos para projectos
- um motor de busca de ideias
- um arquivo de artigos e notas
Torna-se particularmente interessante quando se combinam estes sistemas com outras ferramentas. Por exemplo, um sistema editorial pode aceder automaticamente ao seu arquivo de conhecimentos e utilizar artigos anteriores como base de investigação. Ou um sistema de notas poderia integrar automaticamente novas ideias na sua base de dados.
Por outras palavras, a IA torna-se parte do seu ambiente de trabalho diário. Isto torna claro que o nosso pequeno projeto vai muito além da exportação de dados original do ChatGPT.
Não criámos apenas um arquivo. Criámos uma arquitetura que pode ser expandida conforme necessário. E é precisamente aqui que reside o verdadeiro valor de tais sistemas. Eles não são estáticos. Crescem com o seu conhecimento.
Versão alargada da conduta para descarregar
O script seguinte é uma versão alargada do pipeline do artigo. É mais robusto e muito mais próximo de uma solução produtiva. Três coisas foram melhoradas:
- Indicador de progressoO utilizador pode ver, a qualquer momento, quantos textos já foram processados.
- Importação por lotesOs embeddings são recolhidos e escritos no Qdrant em blocos, o que é significativamente mais rápido do que as importações individuais.
- Pipeline de incorporação mais rápidoO guião funciona de forma estruturada com partes preparadas e reduz as chamadas desnecessárias.
Este script é, portanto, particularmente adequado se a exportação do ChatGPT for maior - vários milhares de conversas, por exemplo. Processo típico:
- Carregar exportação ChatGPT
- Extrair textos
- Dividir o texto em partes
- Criar incorporações
- Importação em lote para a Qdrant
- Efetuar uma consulta de teste
Definições importantes no guião
Alguns valores devem ser ajustados pelo utilizador:
- EXPORT_PFAD
Caminho para os ficheiros conversations.json, na sua maioria numerados, da exportação do ChatGPT. - NOME_DA_COLECÇÃO
Nome da coleção de bases de dados de vectores. - MODELO_DE_EMBED
Modelo de incorporação do Ollama, por exemplo, nomic-embed-text ou mxbai-embed-large - MODELO DE RESPOSTA
Modelo linguístico para a consulta de teste, por exemplo, lama, mistral ou gpt:oss - VECTOR_SIZE
Dimensão do modelo de incorporação.
texto nómico → 768
mxbai-embed-large → 1024 - CHUNK_SIZE
Tamanho das secções de texto.
Normalmente, 300-600 palavras. - BATCH_SIZE
Quantos embeddings são escritos no Qdrant ao mesmo tempo.
Valor típico: 50-200.
Mantenha-se atualizado - sem publicidade
Se quiser manter-se informado sobre as actualizações deste script ou sobre novos downloads, pode subscrever a minha newsletter mensal. O boletim informativo é deliberadamente enxuto, completamente livre de anúncios e aparece apenas uma vez por mês. Nela encontrará uma seleção dos novos artigos mais importantes, conteúdos práticos sobre IA, software e digitalização, bem como informações sobre scripts actualizados ou novas ofertas de descarregamento. Sem spam, sem e-mails diários - apenas o conteúdo mais relevante em formato compacto. Se quiser seguir estes desenvolvimentos continuamente, a newsletter é a forma mais fácil de se manter atualizado.
Perspectivas para a Parte 3: Aperfeiçoar, analisar e otimizar a utilização dos dados
Na terceira parte da série, vamos um passo além e damos uma olhada no que você pode realmente obter do banco de dados de conhecimento que você criou. Agora que os dados do ChatGPT foram armazenados no Qdrant, o foco está na sua utilização efectiva. Damos uma vista de olhos à interface Web do Qdrant, analisamos os dados armazenados e verificamos se a pesquisa semântica já funciona bem. Também analisamos ajustes finos importantes: Como deve ser selecionado o chunking em função do caso de utilização? Como é que o contexto pode ser transferido de forma optimizada para um modelo linguístico local? E como é que a qualidade das respostas pode ser especificamente melhorada? A terceira parte destina-se a todos aqueles que querem tirar mais partido do sistema e desenvolvê-lo conscientemente.
Perguntas mais frequentes
- Qual é o objetivo de integrar a minha exportação de dados do ChatGPT na minha própria IA?
A maior vantagem é que pode utilizar as suas próprias conversas e pensamentos a longo prazo. Muitas pessoas têm conversas intensas com sistemas de IA sobre projectos, ideias, análises ou questões pessoais. Este conteúdo desaparece normalmente no decurso da plataforma. No entanto, se o exportar e o integrar na sua própria base de dados de conhecimentos, torna-se um arquivo pessoal. A sua IA local pode então aceder a este conteúdo, reconhecer correlações e ajudá-lo com novas questões. Em vez de começar sempre do zero, o utilizador baseia-se no seu próprio pensamento, passo a passo. - Não é muito complicado para alguém que não é um programador?
À primeira vista, termos como embeddings, bases de dados vectoriais ou sistemas RAG parecem complexos. Na prática, porém, as etapas individuais são estruturadas de forma relativamente clara. Basicamente, são necessários apenas três componentes: uma IA local (por exemplo, através do Ollama), uma base de dados vetorial como o Qdrant e um pequeno script Python que processa os dados. Muitos dos passos são automáticos. Uma vez configurado, o sistema funciona como um motor de busca normal ou um chatbot - exceto que funciona com os seus próprios conhecimentos. - Que dados contém efetivamente a exportação do ChatGPT?
A exportação ChatGPT contém normalmente todas as conversas que o utilizador teve com o sistema. Isto inclui não só as mensagens de texto propriamente ditas, mas também metadados como títulos de conversas, registos de data e hora e informações estruturais. Os dados estão normalmente disponíveis no formato JSON e podem, portanto, ser processados com relativa facilidade com scripts. Em muitos casos, a exportação também inclui ficheiros multimédia ou linguísticos, se estes tiverem sido utilizados nas conversas. No entanto, é sobretudo o conteúdo de texto que interessa na criação de uma base de dados de conhecimentos. - Por que razão é utilizada uma base de dados vetorial para estes sistemas e não uma base de dados normal?
As bases de dados normais são ideais para a pesquisa de termos ou IDs específicos. No entanto, são menos adequadas para pesquisas semânticas. Uma base de dados vetorial armazena textos não apenas como cadeias de caracteres, mas também como vectores matemáticos que descrevem o significado de um texto. Isto permite que o sistema procure semelhanças no conteúdo. Por exemplo, se pedir „ideias para artigos sobre IA“, a base de dados também pode encontrar conteúdo que contenha outras frases, como „tópicos para artigos de blogue sobre inteligência artificial“. - O que são os embeddings e porque é que são tão importantes?
Os embeddings são representações matemáticas de textos. Um modelo de linguagem converte um texto numa lista de números que descrevem o significado do texto. Os textos com significados semelhantes encontram-se próximos uns dos outros no espaço matemático. Isto permite que uma base de dados vetorial procure posteriormente conteúdos semelhantes. Sem os embeddings, uma pesquisa semântica dificilmente seria possível. Constituem a base dos sistemas RAG modernos e são a razão pela qual estes sistemas são muito mais flexíveis do que as pesquisas clássicas de texto integral. - Qual é o tamanho da minha exportação de dados ChatGPT?
O tamanho não desempenha um papel importante. Mesmo vários milhares de conversas podem ser processadas sem qualquer problema. O que é mais importante é o número de secções de texto geradas, os chamados chunks. Uma exportação maior leva a mais pedaços e, por conseguinte, a mais incorporações. No entanto, as bases de dados vectoriais modernas podem gerir facilmente milhões de entradas deste tipo. Mesmo um pequeno servidor ou um computador de secretária potente é completamente suficiente para um assistente de conhecimentos privado. - Porque é que o texto é dividido em pequenas secções antes de ser processado?
Se guardar conversas completas ou textos extensos diretamente como embeddings, a pesquisa semântica torna-se imprecisa. Um único texto pode conter vários tópicos. Ao dividi-lo em secções mais pequenas, o sistema pode posteriormente efetuar uma pesquisa muito mais precisa. Cada secção descreve um tópico mais claro. Isto permite que a base de dados encontre exatamente as partes de uma conversa que realmente se enquadram na pergunta atual. - Qual é o papel do Ollama neste sistema?
O Ollama funciona como uma plataforma local para modelos linguísticos. Permite-lhe executar modelos de IA diretamente no seu próprio computador. No nosso sistema, o Ollama desempenha duas tarefas: Cria embeddings para textos e gera respostas a perguntas. A vantagem é que todos os dados permanecem locais. Isto significa que as suas conversas e o seu arquivo de conhecimentos nunca saem do seu computador. - Porque é que o Qdrant é utilizado como base de dados vetorial?
Qdrant é uma base de dados vetorial moderna que foi especialmente desenvolvida para aplicações de IA. É rápida, fácil de installieren e está muito bem documentada. Pode também ser facilmente ligada ao Python e a muitos quadros de IA. O Qdrant é, por conseguinte, uma solução particularmente prática para os sistemas de conhecimento locais. As alternativas incluem Chroma, Weaviate ou Pinecone. - O que significa o termo sistema RAG?
RAG significa „Retrieval-Augmented Generation“ (Geração Aumentada por Recuperação). Trata-se de uma arquitetura em que uma IA começa por recuperar informações relevantes de uma base de dados e depois utiliza-as para gerar uma resposta. A IA combina assim os seus próprios conhecimentos com dados externos. Isto permite-lhe dar respostas muito precisas e, ao mesmo tempo, aceder a informações actuais ou pessoais. - Posso também integrar outras fontes de dados neste sistema?
De facto, esta é uma das maiores vantagens desta arquitetura. O sistema não se limita aos dados do ChatGPT. Também pode integrar os seus próprios artigos, notas, PDFs, trabalhos de investigação ou outros documentos. Desde que o conteúdo possa ser processado em forma de texto, pode tornar-se parte da base de conhecimentos. Com o tempo, o seu sistema transformar-se-á num arquivo de conhecimentos abrangente. - Qual a atualidade de um tal sistema de conhecimentos?
A atualidade depende da frequência com que importa novos dados. Por exemplo, pode processar regularmente novas exportações do ChatGPT ou criar um script que reconheça automaticamente novos documentos. Muitos sistemas estão configurados para serem actualizados uma vez por semana ou uma vez por mês. Isto mantém a base de conhecimentos sempre actualizada. - De que hardware necessito para um sistema deste tipo?
Um computador de secretária moderno é suficiente para projectos mais pequenos. Se pretender utilizar um modelo de linguagem maior, uma GPU pode ser útil. No entanto, muitos utilizadores também executam os seus sistemas de conhecimento com sucesso num portátil potente ou num mini-servidor. Acima de tudo, é importante ter memória suficiente e espaço de armazenamento suficiente para a base de dados. - Com que rapidez é que um sistema deste tipo funciona na prática?
A velocidade depende de vários factores, por exemplo, o tamanho da base de dados, o hardware e o modelo de linguagem utilizado. Em muitos casos, uma consulta demora apenas alguns segundos. A pesquisa vetorial propriamente dita é geralmente extremamente rápida. A maior parte do tempo é frequentemente gasto na geração da resposta do modelo de linguagem. - É possível separar várias áreas do conhecimento?
Sim, as bases de dados vectoriais como o Qdrant permitem a utilização de várias colecções. Cada coleção pode representar uma área temática distinta. Por exemplo, pode criar uma coleção para conversas ChatGPT, uma para artigos e outra para notas. Isto permite que as áreas de conhecimento sejam claramente estruturadas e pesquisadas de uma forma direcionada. - Quão seguros estão os meus dados num sistema de IA local?
A grande vantagem de um sistema local é o facto de os seus dados não terem de ser transferidos para serviços externos. Todas as informações permanecem no seu próprio computador ou servidor. Isto é particularmente interessante para conteúdos sensíveis. Naturalmente, deve criar cópias de segurança regulares e proteger o seu sistema contra o acesso não autorizado. - Posso também integrar este sistema nas minhas próprias aplicações?
Sim, a maioria dos componentes pode ser acedida através de interfaces de programação. Isto permite-lhe integrar o seu sistema de conhecimentos nas suas próprias ferramentas, por exemplo, numa interface Web, num sistema editorial ou numa aplicação de notas. Muitos programadores criam pequenas aplicações que tornam a sua base de dados de conhecimentos diretamente acessível através de uma interface de conversação. - Como poderá esta tecnologia evoluir no futuro?
As IA de conhecimento pessoal estão provavelmente apenas no início do seu desenvolvimento. No futuro, esses sistemas poderão integrar automaticamente novos conteúdos, criar resumos ou mesmo dar as suas próprias sugestões de projectos. Quanto mais dados fluírem para um sistema deste tipo, mais valioso ele se torna. A longo prazo, poderá transformar-se numa espécie de memória digital pessoal que estrutura os conhecimentos e os torna acessíveis em qualquer altura.














