> 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/es/acciones/workflow-concepts/workflow-steps/memory-steps/memory-search.md).

# Buscar en la base de conocimientos

Busca semánticamente en una base de conocimiento

## ¿Qué es un paso de búsqueda en la base de conocimientos?

El paso de búsqueda en la base de conocimientos te permite buscar semánticamente tus datos para ofrecer contenido personalizado o recomendaciones a los usuarios.

Para obtener más información sobre cómo configurar una Base de Conocimiento, consulta nuestra página de documentación [aquí](/docs/es/contexto/memory-stores.md).

## Cómo configurar un paso de búsqueda en la base de conocimientos

### Selecciona una Base de Conocimiento

Selecciona el nombre de tu Base de Conocimiento en el menú desplegable.

{% hint style="info" %}
**Selección dinámica de la base de conocimientos:** Puedes usar variables de Liquid para seleccionar dinámicamente qué base de conocimientos buscar en tiempo de ejecución. Esto es útil cuando tienes varias bases de conocimientos y quieres elegir entre ellas según las entradas del flujo de trabajo o las salidas del paso anterior. Por ejemplo: `{{input.knowledge_base_name}}`
{% endhint %}

### Máximo de resultados

Elige el número de resultados de la base de conocimientos que se devolverán.

{% hint style="info" %}
Tu contenido se divide en fragmentos de 1000 tokens, por lo que cada resultado tendrá \~1000 tokens.
{% endhint %}

Si ves que tu LLM no devuelve los resultados exactos que buscas, te recomendamos aumentar el número de resultados y pedirle que los sintetice.

### Filtrar la base de conocimientos (opcional)

Las bases de conocimientos tienen dos modos de filtro diferentes. Usa filtros para acotar tu búsqueda según los metadatos, incluidas las etiquetas de metadatos personalizadas que hayas añadido a los archivos de tu base de conocimientos.

#### Editor visual

La **Editor visual** te permite filtrar datos según cualquier campo de metadatos, incluyendo:

* **Metadatos personalizados** que hayas añadido (p. ej., país, producto, audiencia, tipo de contenido)
* **Metadatos estándar** heredados de la fuente
* **Columnas de CSV/hoja** al buscar datos estructurados

Por ejemplo, si tienes casos de éxito etiquetados con un `country` campo de metadatos personalizado, puedes filtrar para buscar solo dentro de los casos de éxito de una región específica:

<figure><img src="https://3036434873-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>Filtra un valor mediante el Editor visual</p></figcaption></figure>

{% hint style="success" %}
**Filtrado dinámico con entradas**

Haz que tus filtros sean dinámicos usando entradas del flujo de trabajo. Por ejemplo, crea una entrada llamada `región` y establece tu filtro en: country es igual a `{{input.region}}`. Ahora, cuando ejecutes el flujo de trabajo con distintos valores de región, solo buscarás en los archivos de base de conocimientos relevantes.
{% endhint %}

#### Editor de código

Para casos de uso más complejos, puedes usar el **Editor de código** que usa los operadores de consulta y proyección de MongoDB. Aquí tienes algunos operadores comunes:

* **$eq** - Igual a (para números, cadenas, booleanos)
* **$ne** - Distinto de (para números, cadenas, booleanos)
* **$gt** - Mayor que (para números)
* **$gte** - Mayor o igual que (para números)
* **$lt** - Menor que (para números)
* **$lte** - Menor o igual que (para números)
* **$in** - En el array (para cadenas o números)
* **$nin** - No en el array (para cadenas o números)

Vamos a repasar un ejemplo rápido de cómo puedes filtrar por metadatos en tu flujo de trabajo usando nuestra plantilla "Q\&A". En este ejemplo concreto, ya hemos poblado nuestra base de conocimientos para incluir las constituciones de varios países, así como metadatos centrados en el campo "country" para filtrar.

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

Para que el filtrado sea eficaz, recomendamos leer nuestro [documento "Metadatos de bases de conocimientos"](/docs/es/contexto/memory-stores/memory-stores-metadata.md) para asegurarte de que estás proporcionando los campos de metadatos óptimos para filtrar.

### Consulta

La frase utilizada para buscar en tu base de conocimientos texto semánticamente similar.

Como buena práctica, recomendamos que utilices una variable de Liquid para tu consulta. Como tus flujos de trabajo están pensados para adaptarse a las entradas que proporcionas, por lo general no es lo mejor codificar tu consulta de forma fija a una variable o pregunta específica.

Como la base de conocimientos devolverá los resultados más *semánticamente* similares, habrá ocasiones en las que proporcionar una cadena de texto larga tendrá más probabilidades de devolver los resultados deseados que una frase precisa y específica. Te animamos a probar tu prompt de consulta para asegurarte de que se ajusta mejor a tus necesidades.

## Variables de Liquid en los pasos de base de conocimientos

Las variables de Liquid funcionan en TODOS los pasos de base de conocimientos, incluyendo:

* **Buscar en la base de conocimientos:** Usa Liquid para consultas, filtros y selección de la base de conocimientos
* **Escribir en la base de conocimientos:** Usa Liquid para contenido y valores de metadatos
* **Obtener archivo de la base de conocimientos:** Usa Liquid para identificadores de archivo
* **Leer de la base de conocimientos:** Usa Liquid para la selección de registros

Esto permite flujos de trabajo totalmente dinámicos en los que las operaciones de la base de conocimientos se adaptan según las entradas o las salidas del paso anterior.

## Salida del paso de búsqueda en la base de conocimientos

El paso de búsqueda en la base de conocimientos generará una lista de embeddings de la base de conocimientos.

* **ID:** Un ID único basado en los metadatos Chunk ID, Record ID y Vector Store Document ID.
* **Puntuación:** Una [medida de similitud semántica](https://en.wikipedia.org/wiki/Cosine_similarity).
* **Contenido:** El texto (o las columnas) de tu documento que se pueden buscar.
* **Nombre del documento:** Nombre del documento que proporcionaste.
* **URL del archivo del documento:** La URL del archivo original del documento que subiste (si hay uno).
* **Metadatos:** Cualquier columna que hayas proporcionado como metadatos.

```
[
  {
    "id": "vsdi:87:rid:1:cid:0",
    "score": 0.78703,
    "content": "Título del blog: Cómo convertirte en ingeniero de prompts\\nContenido del blog: En este blog, te mostraremos cómo llevar tu forma de crear prompts...",
    "document_name": "Base de conocimientos de 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": "Cómo convertirte en ingeniero de prompts",
      "description": "Aprende cómo llevar tus prompts al siguiente nivel.",
    }
  },
  {
    ...
  }
 ]
```

### Formatear tu salida para los pasos de LLM

La salida del paso de búsqueda en la base de conocimientos es un blob JSON como se muestra arriba. Sin embargo, como a menudo pasarás esta salida a un LLM, es mucho más eficaz si formateas los resultados en lenguaje natural.

#### Formateo con el paso de código

Una de las mejores maneras de manejar esto es usando nuestro paso de código junto con la sintaxis de Liquid. Nuestra plantilla "Q\&A" muestra un gran ejemplo de cómo puedes lograrlo:

<figure><img src="https://3036434873-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>

Nuestro paso de código utiliza JavaScript para formatear el blob JSON en un formato más natural para que lo interprete nuestro paso de LLM:

```javascript
return step_1.output.map(item => `Nombre del documento: ${item.document_name}\nContenido: ${item.content}\nPuntuación de confianza: ${item.score}`).join('\n\n');
```

#### Formateo con Liquid

Para pasar contexto y datos formateados al paso de LLM, también puedes usar Liquid para formatear los resultados de tu paso de búsqueda en la base de conocimientos.

Modificamos el ejemplo de salida anterior iterando sobre cada fragmento y devolviendo el `metadata.title` y `metadata.description`:

```liquid
// Replace step_x.output

{% for chunk in step_x.output %} 
    Título: {{chunk.metadata.title}}
    Descripción: {{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/es/acciones/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.
