Criar Embeddings#
Vamos considerar um exemplo de robô que pega uma instrução sobre um carro de um arquivo de texto, divide-a em fragmentos e calcula um embedding para cada fragmento - um vetor de características para a busca posterior das partes necessárias do documento por similaridade. Os fragmentos de texto, juntamente com os embeddings correspondentes, são gravados em um arquivo CSV. Este projeto é preparatório para o uso do projeto SearchEmbeddings e deve ser executado uma única vez.
O projeto do robô consiste em um diagrama. Assim, se descrevermos passo a passo, este robô funciona da seguinte maneira:
- Lê o conteúdo do arquivo especificado nas propriedades.
- Divide esse conteúdo em fragmentos.
- Calcula o embedding para cada elemento.
- Grava os embeddings obtidos nas Tabelas de Dados.
- Salva os fragmentos de texto com os embeddings correspondentes em um arquivo CSV.
O diagrama do projeto é assim (para conveniência, os blocos do diagrama estão numerados):
- Bloco “Início” (este bloco inicia qualquer diagrama).
- Bloco “Ler linha do arquivo” lê o conteúdo do arquivo sequencialmente (linha por linha). Para este bloco, as seguintes propriedades são especificadas:
- Nome do arquivo (nome do arquivo de onde as informações serão lidas);
- Codificação (codificação do arquivo de onde as informações serão lidas);
- Ignorar linhas vazias (ao ativar a flag, a função de ignorar linhas vazias ao ler informações do arquivo é ativada).
- Bloco “Condição” verifica a condição especificada para ver se é verdadeira, após o que a execução do script continua na direção da saída “Sim” (se a condição for atendida) ou na direção da saída “Não” (se a condição não for atendida).
A condição é escrita no formato: “variável” é igual (==)/ maior (>)/ menor (<) “valor”.
Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.
$Result > 5, ou seja, se o valor da variável $Result for menor que 5, então a saída é “Sim”, caso contrário – a saída é “Não”.
Neste caso, a condição estabelecida é: $Lines.Count > 0, ou seja, esta condição verifica se o valor da variável $Lines é maior que zero, então a saída é “Sim”, caso contrário – a saída é “Não”.
- Bloco “Obter embeddings” permite obter embeddings a partir de uma linha ou lista de linhas usando o serviço Open AI. Para este bloco, as seguintes propriedades são especificadas:
- Texto (texto de entrada para o qual os embeddings serão calculados);
- Modelo (modelo de rede neural para gerar a resposta);
- Como tabela de dados (ao ativar a flag, a função de retornar o resultado na forma de tabela de dados com duas colunas: “Texto” e “Embeddings”);
- Timeout (tempo máximo de espera pela resposta em segundos).
- Bloco “Unir Tabelas de Dados” permite unir duas Tabelas de Dados em uma. Para este bloco, as seguintes propriedades são especificadas:
- Primeira Tabela de Dados;
- Segunda Tabela de Dados;
- Tipo de junção (tipo de junção das tabelas, se os esquemas das tabelas especificadas diferem. Neste caso, o tipo é “Adicionar”, ou seja, adicionar).
- Bloco “Salvar em CSV” permite salvar a Tabela de Dados em um documento CSV. Para este bloco, as seguintes propriedades são especificadas:
- Tabela de Dados (Tabela de Dados que deve ser salva no documento);
- Caminho do arquivo (caminho do arquivo onde a Tabela de Dados deve ser salva);
- Delimitador (símbolo delimitador);
- Codificação (codificação do arquivo).
- Bloco “Log” permite registrar mensagens arbitrárias e/ou valores de variáveis durante a execução do script do robô. Para este bloco, a propriedade “Valor” é especificada. Entre aspas, é indicada uma constante de texto, e o nome da variável começa com o símbolo $. Ou seja, este bloco registra no log do robô uma mensagem sobre a leitura de uma linha do arquivo, indicando essa linha com a variável.
- Bloco “Adicionar elemento à lista” permite adicionar o elemento especificado ao final da lista. Para este bloco, as seguintes propriedades são especificadas:
- Lista (lista à qual o novo elemento deve ser adicionado);
- Elemento (variável que deve ser adicionada à lista).
- Bloco “Condição” verifica a condição especificada para ver se é verdadeira, após o que a execução do script continua na direção da saída “Sim” (se a condição for atendida) ou na direção da saída “Não” (se a condição não for atendida).
A condição é escrita no formato: “variável” é igual (==)/ maior (>)/ menor (<) “valor”.
Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.
$Result > 5, ou seja, se o valor da variável $Result for menor que 5, então a saída é “Sim”, caso contrário – a saída é “Não”.
Neste caso, a condição estabelecida é: $Lines.Count > 20, ou seja, se o valor da variável $Lines for maior que 20, então a saída é “Sim”, caso contrário – a saída é “Não”.
- Bloco “Obter embeddings” permite obter embeddings a partir de uma linha ou lista de linhas usando o serviço Open AI. Para este bloco, as seguintes propriedades são especificadas:
- Texto (texto de entrada para o qual os embeddings serão calculados);
- Modelo (modelo de rede neural para gerar a resposta);
- Como tabela de dados (ao ativar a flag, a função de retornar o resultado na forma de tabela de dados com duas colunas: “Texto” e “Embeddings”);
- Timeout (tempo máximo de espera pela resposta em segundos).
- Bloco “Unir Tabelas de Dados” permite unir duas Tabelas de Dados em uma só. Para este bloco, as seguintes propriedades são especificadas:
- Primeira Tabela de Dados;
- Segunda Tabela de Dados;
- Tipo de união (tipo de união das tabelas, se os esquemas das tabelas especificadas forem diferentes. Neste caso, o tipo é “Add”, ou seja, adicionar).
- Bloco “Salvar em CSV” permite salvar a Tabela de Dados em um documento CSV. Para este bloco, as seguintes propriedades são especificadas:
- Tabela de Dados (Tabela de Dados que deve ser salva no documento);
- Caminho do arquivo (caminho do arquivo onde a Tabela de Dados deve ser salva);
- Delimitador (símbolo delimitador);
- Codificação (codificação do arquivo).
- Bloco “Limpar lista” permite limpar a lista removendo todos os seus elementos. Para este bloco, a propriedade “Lista” é especificada (lista que deve ser limpa).
- Bloco “Fim” (este bloco encerra a execução do script ou retorna o diagrama do subprocesso ao processo principal).