# Search Embeddings

Vamos considerar o exemplo de um robô que é a segunda parte do projeto “AI Chat With Own Document” (na [primeira parte](https://docs.sherparpa.ru/pt/sherpa-rpa/sherpa-designer/primery-robotov/ai-chat-with-own-document/create-embeddings) o robô calculou os embeddings a partir de fragmentos do arquivo de texto especificado e os gravou em um arquivo no formato CSV). Este robô utiliza os embeddings previamente obtidos e a rede neural ChatGPT para responder a quaisquer perguntas sobre o conteúdo do documento. Ou seja, ao operar este robô, é possível inserir quaisquer consultas em linguagem natural, e a rede neural fornecerá uma resposta com base no conteúdo do documento.

O projeto do robô consiste em um diagrama. Assim, se descrevermos passo a passo, este robô funciona da seguinte maneira:

1. Carrega o arquivo CSV criado na primeira parte do projeto com fragmentos de texto e seus respectivos embeddings.
2. Abre uma janela para entrada de consulta.
3. Executa a consulta do usuário.
4. Caso o usuário tenha inserido uma string (palavra), obtém os embeddings para essa string (palavra).
5. Envia a consulta para o modelo GPT.
6. Abre uma janela com a resposta à consulta do modelo GPT.
7. Após isso, abre uma janela para entrada de consulta e executa a consulta do usuário.

O diagrama do projeto é assim (para conveniência, os blocos do diagrama estão numerados):<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdAqvEZJ3KaQ8H16JlSOkgr4TcJrdtl6crZpNYDSxGKyEm1LE53JK4sdDsjbIrFbQEN8ku8DPKnLpxvsRyTEgpBBhaP6erkURcmJb5CCRoTkccifsN8s-SU8M6C1Ypb19Ub2O00ASq0lC8-yKFDDxZLChY?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfSLDcQoTB7-9ElrTwZUgiQ8Tg89lf1NEDhvDTeE41EZQifX9Z7sWtMeiBClageBYZGqQjA6SdVJ7xALx3sNIZB1rpnSp_B7pzrLvUUl-GUrWXylg-vHvV74cIvBnQ3GiaSZKIV9k83cPR-bd3VmVh40ODd?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

1. **Bloco “Início”** (a partir deste bloco começa qualquer diagrama).
2. O bloco “Carregar do CSV” permite carregar a Tabela de Dados de um documento CSV. Para este bloco, as seguintes propriedades são especificadas:

* Caminho do arquivo (caminho do arquivo do qual a Tabela de Dados deve ser carregada);
* Delimitador (símbolo delimitador);
* Codificação (codificação do arquivo).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfnsix4ZXfEEtwsm4RnZNddE0N6mMqw4s-M1n6njnVMrI93KAoHPBh-17ckRQyiL66G3tN_VibTUO0jhm6fvy-HgqgYpDCREVsSJY6FUYGX2_tmxJ0oTjlXffpERSLlTZ73cpCJ1FfrfVMahUccS_PQp-Qs?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

3. **Bloco “Janela para entrada de texto”** mostra uma janela modal destinada a receber informações do usuário. Para este bloco, as seguintes propriedades são especificadas:

* Título (texto que será exibido no título da janela de diálogo);
* Mensagem (texto que será exibido dentro da janela de diálogo).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfOHLB8bYv11BDhsF68fggWdW20-01tPTQBoc7Hm4sL-CkboFI2qMb6RJZ7i35msfZYemJX92F-XpbqtLuycyceB4SZ8z_Lyy17Cxyzpake4gtEfZKVlSXlscTSd_hzMKsJZx8R-kmxth4CCaYaBMcjJ1ll?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

4. **Bloco “Condição”** verifica a condição especificada para veracidade, após o que a execução do cenário continua em direção à saída “Sim” (se a condição for atendida) ou em direção à saída “Não” (se a condição não for atendida).

A condição é registrada 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 é: $TextQuery.Length == 0. Ou seja, se o comprimento da string for igual a zero, então a saída é “Sim”.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeLnv36adJubnuarHFIvY7FtnBj1Jedp-HAKq3cKrUwBLqfyDK2lFvYZBzvIS2WV2uKz55u2s1u6cbvCcOYWq97NUULkNzD20-RtTL1I_rCMeHkpybZiBYGSRU7ELqC7YIcljV3_LE6rUF96nSjwgtFpw?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

5. **Bloco “Obter embeddings”** permite obter embeddings para uma string ou lista de strings utilizando 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 da rede neural para geração de resposta);
* Timeout (tempo máximo de espera pela resposta em segundos).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXel5PCjUpfZmi-5nhkNz4PxAWPEgFHwEPnjONaVCQT24nY2Y1RBHe6UJBa2YPn91j1KvdFygbTNTjJiPkbpNkCSot2fWov0ONVgjLlCn2nIswSXyZYfo5_bqpkmiKcDbvyXWB4fZZT21kXQ38RPZZgwLhs?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

6. **Bloco “Log”** permite registrar mensagens e/ou valores de variáveis no log durante a execução do cenário do robô. Para este bloco, a propriedade “Valor” é especificada. Entre aspas, é indicada uma constante textual, e o nome da variável começa com o símbolo $. Ou seja, este bloco registra no log do robô os embeddings obtidos a partir da string do usuário, obtidos no bloco anterior.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcW3ZIV_cG-4s1HEp_ddsafzSDtp9yu0pz3paue9WTHCP_oMt872mj6maXyvQR8lOeTiEEqioQN8yk9MBVVZrRjOX88uoLz-ySkOmdxftXlwoxD5vhB2-3_qSBlPYqBdyeYBpw4fWZWAYAO7zu1ETVLgdFH?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

7. **Bloco “Encontrar embeddings”** para um determinado embedding de consulta encontra na base de conhecimento, que consiste em uma tabela de objetos e seus embeddings, as strings mais semelhantes e retorna os índices dessas strings em forma de lista, ordenada em ordem decrescente de similaridade. Os embeddings tanto para a consulta quanto para a tabela de embeddings, na qual a busca é realizada, podem ser obtidos através do bloco Obter embeddings. Na primeira utilização do bloco, ocorre a construção da base de dados de vetores e isso pode levar um tempo considerável. Em chamadas subsequentes do bloco com o mesmo "ID da base", a base de dados de vetores já criada será utilizada e a velocidade de operação do bloco aumenta consideravelmente. Para este bloco, as seguintes propriedades são especificadas:

* Embedding da consulta (embedding para o qual é necessário encontrar strings semelhantes na tabela);
* Base de conhecimento (tabela na qual a busca será realizada, uma das colunas deve conter embeddings, outras colunas da tabela podem conter quaisquer dados do usuário);
* Coluna de embeddings (índice da coluna da tabela (por padrão, o valor é 1), indicada na propriedade "Base de conhecimento", onde os embeddings estão localizados);
* Número de resultados (Número máximo de linhas de resultados retornadas pelo bloco da base de conhecimento (por padrão, o valor é 5).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcevNZ4H30NPomOggFsGBuiUg2e_04IL4kGddp0qCF0m46BBrjkGCHjygNSRcmjF5aJnEAFxdWM-6nbhTFSu5GDOTMHSgu4Av9979I-k4ayiI8s4bL3ii24iSc4cyYf7XjIXYMgavNX122QAu_D115ptH0?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

8. **Bloco “Atribuir valor à variável”** estabelece novos valores para uma ou mais variáveis. Neste caso, nas propriedades, são especificados dois valores que devem ser atribuídos às variáveis: à variável $AIQuery deve ser atribuído o valor “Answer the question using only knowledge base listed below.\`nQuestion: {query}\`nKnowledge base: \`n{strresult}", e à variável $strresult – um valor vazio (para posterior gravação na variável da resposta à consulta do usuário).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfXxOBQofWTwyfKjEC18VKqNd-oek3L1DHaZUzXQ6-1wbfa3CmpZeLIjREPfew81qGL3VHvUnO5YF7lItLoiTClu6efSHf75J7MW_rKHDt_Tp9fqhT9cxHOVcrZQB343hU7snLko0C2mOUUXVFHeNJh-n4?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

9. **Bloco “Laço Para cada (Lista)”** percorre ciclicamente todos os elementos em uma lista especificada.

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXffjgJ8I97j5hW5qOomYtV9-KYianFSSVIDb0F4FwuqYK0JBwJqf-mityizF-s_fzgO6XIDxoorF8zM-5yOzFf60sNvCGiruPqjjIhlv8CMei_L95sbMyeFB85A-Fo5GoWt5NTFYm_bRr_Zpytkk2txbLNc?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>
10. **Bloco “Atribuir valor à variável”** estabelece novos valores para uma ou mais variáveis. Neste caso, nas propriedades, está indicado um valor que deve ser atribuído à variável.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfLSr8x5jK8yw9juNhCAmXryd4nEW7fxCRLNPUFwLg8ttu5ev3NlrxL022b_BN3OiF4sumSKias7cv-HrxbJ8rklQCsNeX-Fv08CNi5trrqyEWTLPge99U2HLWrPLNcm5ygoDFnVCHLbKQ9RJyf_-Yy7t6P?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

11. **Bloco “Atribuir valor à variável”** estabelece novos valores para uma ou mais variáveis. Neste caso, nas propriedades, estão indicados dois valores que devem ser atribuídos às variáveis especificadas.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcbyxvYz6RkogsSrXe1nLvzCISGNe44_6VUeE20hTDI0wXneaalG6Dt3V3jrHUsdhG0RaotAxn2jXcoKuPcZWJmL5SNjzSp8kQQOn9ayMdR7B0YUt2ExMZ-cvKg4FVI7QVISWScHf6pTVx_ytFvvgcBdEQ?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

12. **Bloco “Log”** permite registrar mensagens arbitrárias e/ou valores de variáveis no log durante a execução do script do robô. Para este bloco, está especificada a propriedade “Valor”. Entre aspas, está 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ô o valor da variável $AIQuery (a consulta resultante ao GPT). Por sua vez, a variável $AIQuery inclui o texto do usuário e a Base de Conhecimento.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcg8zqQWeIurBNRqRZsN8jZe7yMtoO-zGoL-gAfLvTDQg3g1GzNsDpCdCJfzucsvaAoe0WDwUqae2IGRA4-ZRjGr2XJa78g6IsNZZ-opiUAENNXpevMY5u8eA4nJhbMvQUokQS5GTpjCeJzZDuGh7IKWTS2?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

13. **Bloco “Solicitação ao modelo GPT”** permite enviar solicitações para os modelos generativos clássicos da Open AI antes do ChatGPT e receber respostas. Para este bloco, estão especificadas as seguintes propriedades:

* Solicitação (solicitação em linguagem natural);
* Modelo (modelo para geração de texto);
* Temperatura (número decimal entre 0 e 1, que indica o grau de "aleatoriedade" ou "criatividade" do resultado, onde 0 é o resultado menos criativo e 1 é o mais aleatório);
* Timeout (tempo máximo de espera pela resposta em segundos).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfs87PUP3qoXJNCjZ4rfCckgFus6xiKcwmJlm4dPY6vshzvLrgkbcJydslUeEv-fkT8yHeBIPLpTqaTsSBbyrvt4v7hpUGP0NHupy-PiDtK1gRW_8OqMYYmeSOB1D0I5yDSpmetBpyi7iM7yZIdhWdOe1it?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

14. **Bloco “Janela de mensagem”** mostra ao usuário uma janela de diálogo modal, com um título, texto e um conjunto de botões definidos. Para este bloco, estão especificadas as seguintes propriedades:

* Título (texto que será exibido no título da janela de diálogo);
* Mensagem (variável que será exibida dentro da janela de diálogo, neste caso, é a variável $Response, que é a resposta do modelo generativo à solicitação);
* Botões (botões que estarão disponíveis para o usuário clicar).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfRqA6XSOIeQlGxO9tXCfdLQeo4-OSoiWcUAAee4IgxpJuGI1ower4_FOaTHcic1BybgajOVQxWBLw00y-LgdUolwcwadPSvXENbDCUAZq_Eiy3qmRf2oy2GZsmBPsU4vAjAA1dSNPHzUrdcZ6ECAagF_Ma?key=A0aTFSxqdqslY-UYAcmeGA" alt=""><figcaption></figcaption></figure>

\
15\. **Bloco “Fim”** (este bloco encerra a execução do script ou retorna o diagrama do subprocesso ao processo principal).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/pt/sherpa-rpa/sherpa-designer/primery-robotov/ai-chat-with-own-document/search-embeddings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
