> For the complete documentation index, see [llms.txt](https://docs.airops.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airops.com/docs/pt/acoes/workflow-concepts/workflow-steps/memory-steps/memory-search.md).

# Pesquisar na Base de Conhecimento

Pesquise semanticamente numa Base de Conhecimento

## O que é uma Etapa de Busca na Base de Conhecimento?

A etapa de Busca na Base de Conhecimento permite pesquisar semanticamente os seus dados para alimentar conteúdo personalizado ou recomendações aos usuários.

Para mais informações sobre como configurar uma Base de Conhecimento, consulte a nossa página de documentação [aqui](/docs/pt/contexto/memory-stores.md).

## Como Configurar uma Etapa de Busca na Base de Conhecimento

### Selecionar uma Base de Conhecimento

Selecione o nome da sua Base de Conhecimento no menu suspenso.

{% hint style="info" %}
**Seleção Dinâmica da Base de Conhecimento:** Você pode usar variáveis Liquid para selecionar dinamicamente qual Base de Conhecimento pesquisar em tempo de execução. Isso é útil quando você tem várias Bases de Conhecimento e deseja escolher entre elas com base nas entradas do workflow ou nas saídas de etapas anteriores. Por exemplo: `{{input.knowledge_base_name}}`
{% endhint %}

### Máximo de Resultados

Escolha o número de resultados da Base de Conhecimento a serem retornados.

{% hint style="info" %}
Seu conteúdo é dividido em blocos de 1000 tokens, então cada resultado terá \~1000 tokens.
{% endhint %}

Se você perceber que o seu LLM não está retornando os resultados exatos que você procura, recomendamos aumentar o número de resultados e pedir que ele os sintetize.

### Filtrar a Base de Conhecimento (Opcional)

As Bases de Conhecimento têm dois modos diferentes de filtro. Use filtros para restringir sua pesquisa com base em metadados, incluindo tags de metadados personalizados que você adicionou aos arquivos da sua Base de Conhecimento.

#### Editor Visual

A **Editor Visual** permite filtrar dados com base em qualquer campo de metadados, incluindo:

* **Metadados personalizados** que você adicionou (por exemplo, país, produto, público, tipo de conteúdo)
* **Metadados padrão** herdados da origem
* **Colunas de CSV/Folha de cálculo** ao pesquisar dados estruturados

Por exemplo, se você tiver estudos de caso marcados com um `country` campo de metadados personalizado, você pode filtrar para pesquisar apenas estudos de caso de uma região específica:

<figure><img src="https://31915162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-6ed8ba8ef306c122c903c34554f8e93c2c24d5ea%2FWorkflow%20Steps%20%3E%20Data%20Steps%20%3E%20KB%20Search%20%3E%201st.png?alt=media" alt=""><figcaption><p>Filtrar por um valor via o Editor Visual</p></figcaption></figure>

{% hint style="success" %}
**Filtragem Dinâmica com Entradas**

Torne seus filtros dinâmicos usando entradas do workflow. Por exemplo, crie uma entrada chamada `region` e defina seu filtro como: country igual a `{{input.region}}`. Agora, quando você executar o workflow com diferentes valores de region, pesquisará apenas os arquivos relevantes da Base de Conhecimento.
{% endhint %}

#### Editor de Código

Para casos de uso mais complexos, você pode usar o **Editor de Código** que usa os operadores de consulta e projeção do MongoDB. Aqui estão alguns operadores comuns:

* **$eq** - Igual a (para números, strings, booleanos)
* **$ne** - Diferente de (para números, strings, booleanos)
* **$gt** - Maior que (para números)
* **$gte** - Maior ou igual a (para números)
* **$lt** - Menor que (para números)
* **$lte** - Menor ou igual a (para números)
* **$in** - Em array (para strings ou números)
* **$nin** - Não em array (para strings ou números)

Vamos percorrer um exemplo rápido de como você pode filtrar por Metadados no seu Workflow usando nosso modelo "Q\&A". Neste exemplo específico, já preenchemos nossa Base de Conhecimento para incluir as Constituições de vários países, bem como metadados focados no campo "country" para filtrar.

{% @arcade/embed url="<https://app.arcade.software/share/wdZVVd8LeM0QNGiSf9v9>" flowId="wdZVVd8LeM0QNGiSf9v9" %}

Para que a filtragem seja eficaz, recomendamos ler nosso [documento "Metadados das Bases de Conhecimento"](/docs/pt/contexto/memory-stores/memory-stores-metadata.md) para garantir que você está fornecendo campos de metadados ideais para filtrar.

### Consulta

A frase usada para pesquisar sua base de conhecimento por texto semanticamente semelhante.

Como prática recomendada, sugerimos que você utilize uma variável Liquid para sua consulta. Como seus workflows devem se adaptar às entradas que você fornece, normalmente não é ideal codificar sua consulta com uma variável ou pergunta específica.

Como a Base de Conhecimento retornará os resultados mais *semanticamente* semelhantes, haverá momentos em que fornecer uma longa cadeia de texto terá mais chances de retornar os resultados desejados do que uma frase precisa e direcionada. Encorajamos você a testar o prompt da sua consulta para garantir que ele atenda melhor às suas necessidades.

## Variáveis Liquid nas Etapas da Base de Conhecimento

As variáveis Liquid funcionam em TODAS as etapas da Base de Conhecimento, incluindo:

* **Pesquisar na Base de Conhecimento:** Usar Liquid para consultas, filtros e seleção da Base de Conhecimento
* **Escrever na Base de Conhecimento:** Usar Liquid para conteúdo e valores de metadados
* **Obter Arquivo da Base de Conhecimento:** Usar Liquid para identificadores de arquivos
* **Ler da Base de Conhecimento:** Usar Liquid para seleção de registros

Isso permite workflows totalmente dinâmicos, nos quais as operações da Base de Conhecimento se adaptam com base nas entradas ou nas saídas de etapas anteriores.

## Saída da Etapa de Busca na Base de Conhecimento

A etapa de Busca na Base de Conhecimento retornará uma lista de embeddings da base de conhecimento.

* **ID:** Um ID exclusivo baseado no Chunk ID, Record ID e Vector Store Document ID dos metadados.
* **Pontuação:** Uma [medida de similaridade semântica](https://en.wikipedia.org/wiki/Cosine_similarity).
* **Conteúdo:** O texto (ou colunas) do seu documento que pode ser pesquisado.
* **Nome do Documento:** Nome do documento que você forneceu.
* **URL do Arquivo do Documento:** A URL do arquivo de documento original que você enviou (se houver).
* **Metadados:** Quaisquer colunas que você forneceu como metadados.

```
[
  {
    "id": "vsdi:87:rid:1:cid:0",
    "score": 0.78703,
    "content": "Título do Blog: Como se Tornar um Engenheiro de Prompt\nConteúdo do Blog: Neste blog, vamos mostrar como levar seus prompts...",
    "document_name": "Base de Conhecimento AirOps",
    "document_file_url": "https://app.airops.com/your_document_file.pdf",
    "metadata": {
      "__chunk_id": 0,
      "__record_id": "1",
      "__vector_store_document_id": 87,
      "title": "Como se Tornar um Engenheiro de Prompt",
      "description": "Aprenda a levar seus prompts para o próximo nível.",
    }
  },
  {
    ...
  }
 ]
```

### Formatando Sua Saída para Etapas de LLM

A saída da Etapa de Busca na Base de Conhecimento é um blob JSON, como mostrado acima. No entanto, como muitas vezes você passará essa saída para um LLM, é muito mais eficaz formatar os resultados em linguagem natural.

#### Formatando com a Etapa de Código

Uma das melhores maneiras de lidar com isso é usando nossa Etapa de Código em conjunto com a sintaxe Liquid. Nosso modelo "Q\&A" mostra um ótimo exemplo de como você pode conseguir isso:

<figure><img src="https://31915162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-66e42d4e999883b4940929b36377fab732d28ee5%2Fmemory_search_2.png?alt=media" alt=""><figcaption></figcaption></figure>

Nossa Etapa de Código utiliza JavaScript para formatar o Blob JSON em um formato mais natural para nossa Etapa de LLM interpretar:

```javascript
return step_1.output.map(item => `Nome do Documento: ${item.document_name}\nConteúdo: ${item.content}\nPontuação de Confiança: ${item.score}`).join('\n\n');
```

#### Formatando com Liquid

Para passar contexto e dados formatados para a etapa de LLM, você também pode usar Liquid para formatar os resultados da sua Etapa de Busca na Base de Conhecimento.

Nós modificamos o exemplo de saída anterior acima iterando por cada bloco e retornando o `metadata.title` como no `metadata.description`:

```liquid
// Substitua step_x.output

{% for chunk in step_x.output %} 
    Título: {{chunk.metadata.title}}
    Descrição: {{chunk.metadata.description}}
{% endfor %}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.airops.com/docs/pt/acoes/workflow-concepts/workflow-steps/memory-steps/memory-search.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
