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

# Rechercher dans la base de connaissances

Recherchez sémantiquement dans une base de connaissances

## Qu'est-ce qu'une étape de recherche dans la base de connaissances ?

L'étape de recherche dans la base de connaissances vous permet d'effectuer une recherche sémantique dans vos données afin d'alimenter du contenu personnalisé ou des recommandations pour les utilisateurs.

Pour plus d'informations sur la configuration d'une base de connaissances, consultez notre page de documentation [ici](/docs/fr/contexte/memory-stores.md).

## Comment configurer une étape de recherche dans la base de connaissances

### Sélectionnez une base de connaissances

Sélectionnez le nom de votre base de connaissances dans la liste déroulante.

{% hint style="info" %}
**Sélection dynamique de la base de connaissances :** Vous pouvez utiliser des variables Liquid pour sélectionner dynamiquement la base de connaissances à rechercher au moment de l'exécution. Cela est utile lorsque vous avez plusieurs bases de connaissances et que vous souhaitez choisir entre elles en fonction des entrées du workflow ou des sorties de l'étape précédente. Par exemple : `{{input.knowledge_base_name}}`
{% endhint %}

### Nombre maximal de résultats

Choisissez le nombre de résultats de la base de connaissances à renvoyer.

{% hint style="info" %}
Votre contenu est découpé en segments de 1000 jetons, donc chaque résultat fera environ 1000 jetons.
{% endhint %}

Si vous constatez que votre LLM ne renvoie pas les résultats exacts que vous recherchez, nous vous recommandons d'augmenter le nombre de résultats et de lui demander de les synthétiser.

### Filtrer la base de connaissances (facultatif)

Les bases de connaissances disposent de deux modes de filtrage différents. Utilisez les filtres pour affiner votre recherche en fonction des métadonnées, y compris les balises de métadonnées personnalisées que vous avez ajoutées à vos fichiers de base de connaissances.

#### Éditeur visuel

La **Éditeur visuel** vous permet de filtrer les données selon n'importe quel champ de métadonnées, notamment :

* **Métadonnées personnalisées** que vous avez ajoutées (par exemple, pays, produit, public, type de contenu)
* **Métadonnées standard** héritées de la source
* **Colonnes CSV/feuille** lors de la recherche de données structurées

Par exemple, si vous avez des études de cas étiquetées avec un `country` champ de métadonnées personnalisé, vous pouvez filtrer pour rechercher uniquement dans les études de cas d'une région spécifique :

<figure><img src="https://344527547-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>Filtrer sur une valeur via l'Éditeur visuel</p></figcaption></figure>

{% hint style="success" %}
**Filtrage dynamique avec des entrées**

Rendez vos filtres dynamiques en utilisant les entrées du workflow. Par exemple, créez une entrée appelée `region` et définissez votre filtre sur : pays égal à `{{input.region}}`. Désormais, lorsque vous exécutez le workflow avec différentes valeurs de region, vous ne rechercherez que les fichiers pertinents de la base de connaissances.
{% endhint %}

#### Éditeur de code

Pour des cas d'utilisation plus complexes, vous pouvez utiliser le **Éditeur de code** qui utilise les opérateurs de requête et de projection de MongoDB. Voici quelques opérateurs courants :

* **$eq** - Égal à (pour les nombres, les chaînes, les booléens)
* **$ne** - Différent de (pour les nombres, les chaînes, les booléens)
* **$gt** - Supérieur à (pour les nombres)
* **$gte** - Supérieur ou égal à (pour les nombres)
* **$lt** - Inférieur à (pour les nombres)
* **$lte** - Inférieur ou égal à (pour les nombres)
* **$in** - Dans le tableau (pour les chaînes ou les nombres)
* **$nin** - Pas dans le tableau (pour les chaînes ou les nombres)

Voyons rapidement comment vous pouvez filtrer les métadonnées dans votre workflow à l'aide de notre modèle « Q\&A ». Dans cet exemple précis, nous avons déjà rempli notre base de connaissances pour inclure les constitutions de plusieurs pays, ainsi que des métadonnées centrées sur le champ « country » à filtrer.

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

Afin que le filtrage soit efficace, nous vous recommandons de consulter notre [document « Métadonnées des bases de connaissances »](/docs/fr/contexte/memory-stores/memory-stores-metadata.md) pour vous assurer que vous fournissez des champs de métadonnées optimaux à utiliser comme filtres.

### Requête

La phrase utilisée pour rechercher dans votre base de connaissances du texte sémantiquement similaire.

Comme bonne pratique, nous vous recommandons d'utiliser une variable Liquid pour votre requête. Comme vos workflows sont censés s'adapter aux entrées que vous fournissez, il n'est généralement pas idéal de coder en dur votre requête dans une variable ou une question spécifique.

Parce que la base de connaissances renverra les résultats les plus *sémantiquement* similaires, il arrivera parfois qu'une longue chaîne de texte ait plus de chances de renvoyer les résultats souhaités qu'une phrase ciblée et précise. Nous vous encourageons à tester votre invite de requête afin de vous assurer qu'elle répond au mieux à vos besoins.

## Variables Liquid dans les étapes de base de connaissances

Les variables Liquid fonctionnent avec TOUTES les étapes de base de connaissances, y compris :

* **Rechercher dans la base de connaissances :** Utiliser Liquid pour les requêtes, les filtres et la sélection de la base de connaissances
* **Écrire dans la base de connaissances :** Utiliser Liquid pour le contenu et les valeurs de métadonnées
* **Obtenir le fichier de la base de connaissances :** Utiliser Liquid pour les identifiants de fichiers
* **Lire depuis la base de connaissances :** Utiliser Liquid pour la sélection des enregistrements

Cela permet des workflows entièrement dynamiques dans lesquels les opérations de la base de connaissances s'adaptent en fonction des entrées ou des sorties de l'étape précédente.

## Résultat de l'étape de recherche dans la base de connaissances

L'étape de recherche dans la base de connaissances renverra une liste d'embeddings de la base de connaissances.

* **ID :** Un identifiant unique basé sur les métadonnées Chunk ID, Record ID et Vector Store Document ID.
* **Score :** Un [mesure de similarité sémantique](https://en.wikipedia.org/wiki/Cosine_similarity).
* **Contenu :** Le texte (ou les colonnes) de votre document qui est recherchable.
* **Nom du document :** Nom du document que vous avez fourni.
* **URL du fichier du document :** L'URL du fichier du document original que vous avez téléversé (s'il y en a un).
* **Métadonnées :** Toutes les colonnes que vous avez fournies comme métadonnées.

```
[
  {
    "id": "vsdi:87:rid:1:cid:0",
    "score": 0.78703,
    "content": "Titre du blog : Comment devenir ingénieur de prompts\nContenu du blog : Dans ce blog, nous allons vous montrer comment prendre votre formulation de prompts...",
    "document_name": "AirOps Knowledge Base",
    "document_file_url": "https://app.airops.com/your_document_file.pdf",
    "metadata": {
      "__chunk_id": 0,
      "__record_id": "1",
      "__vector_store_document_id": 87,
      "title": "Comment devenir ingénieur de prompts",
      "description": "Apprenez à faire passer votre manière de formuler des prompts au niveau supérieur.",
    }
  },
  {
    ...
  }
 ]
```

### Formatage de votre sortie pour les étapes LLM

La sortie de l'étape de recherche dans la base de connaissances est un bloc JSON, comme illustré ci-dessus. Cependant, comme vous passerez souvent cette sortie à un LLM, il est beaucoup plus efficace de formater les résultats en langage naturel.

#### Formatage avec l'étape de code

L'une des meilleures façons de gérer cela est d'utiliser notre étape de code en conjonction avec la syntaxe Liquid. Notre modèle « Q\&A » montre un excellent exemple de la manière dont vous pouvez y parvenir :

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

Notre étape de code utilise JavaScript pour formater le bloc JSON dans un format plus naturel que notre étape LLM pourra interpréter :

```javascript
return step_1.output.map(item => `Nom du document : ${item.document_name}\nContenu : ${item.content}\nScore de confiance : ${item.score}`).join('\n\n');
```

#### Formatage avec Liquid

Pour transmettre du contexte et des données formatées à l'étape LLM, vous pouvez également utiliser Liquid pour formater les résultats de votre étape de recherche dans la base de connaissances.

Nous modifions la sortie de notre exemple précédent ci-dessus en itérant sur chaque segment et en renvoyant le `metadata.title` et `metadata.description`:

```liquid
// Remplacez step_x.output

{% for chunk in step_x.output %} 
    Titre : {{chunk.metadata.title}}
    Description : {{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/fr/actions/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.
