# Recherche dans les fichiers

Recherchez parmi les fichiers attachés à l'agent et obtenez les lignes correspondantes avec leur contexte.

## Vue d'ensemble

`file_search` construit un index ligne par ligne de chaque fichier attaché et expose une fonction unique appelable par le LLM. Chaque résultat renvoie le nom de fichier, le numéro de ligne, l'extrait et un score — le modèle peut donc citer précisément ou affiner sa recherche.

Ce n'est **pas** un vector store. La recherche par mot-clé + flou tourne en process, ce qui garantit une faible latence (pas d'embedding) et rend les résultats facilement explicables. Adapté : briefs, transcripts, CSV, code source, runbooks, logs. Inadapté : grandes bases de connaissances, Q/R sémantique sur des milliers de docs — utilisez le nœud RAG.

## Attacher des fichiers

Deux façons :

1. **Dans la modale de l'outil** — glisser-déposer ou bouton de parcours. Les fichiers passent par `/api/v1/files/upload` et sont épinglés à l'outil.
2. **Pendant l'exécution** — les fichiers fournis par un trigger `file_picker` ou un nœud amont arrivent dans le contexte et deviennent interrogeables.

Extensions textuelles supportées : `.txt`, `.md`, `.csv`, `.json`, `.log`, `.py`, `.js`, `.ts`, `.tsx`, `.jsx`, `.html`, `.xml`, `.yaml`, `.yml`, plus extraction PDF best-effort (20 premières pages). Au-delà de ~200 Ko le fichier est tronqué ; les binaires non-PDF sont ignorés.

## Configuration

| Champ | Valeurs | Notes |
| --- | --- | --- |
| Fichiers | Liste d'uploads | N'importe quel nombre ; ré-indexés au premier appel de chaque exécution. |
| Mode de recherche | `keyword`, `fuzzy`, `both` | Défaut `both`. Voir ci-dessous. |

**Modes**

- `keyword` — sous-chaîne insensible à la casse. Strict, rapide, zéro faux positif.
- `fuzzy` — ratio de similarité `difflib` (seuil 0,55). Tolère fautes et approximations.
- `both` — combine les deux et classe par score. Recommandé.

Le LLM peut aussi passer `mode` à l'appel pour surcharger la config. `top_k` est plafonné à 25 (défaut 5).

## Exemple

Fichiers attachés : `briefs-t3.md`, `notes-concurrents.txt`.

Tour utilisateur : *« A-t-on noté quelque chose sur les nouveaux tarifs d'Acme ? »*

Appel du modèle :

```json
{ "query": "tarifs Acme", "top_k": 5, "mode": "both" }
```

Réponse renvoyée au modèle :

```json
{
  "query": "tarifs Acme",
  "mode": "both",
  "matches": [
    {
      "file": "notes-concurrents.txt",
      "line_number": 42,
      "snippet": "Acme est passé au tarif par siège le 14 oct., 29 $/siège/mois.",
      "score": 2.84
    }
  ]
}
```

Le modèle formule alors une réponse courte en citant l'extrait.

## Bonnes pratiques

- **Nommez vos fichiers pour la recherche.** Le nom apparaît dans la sortie. `tarifs-2026-t1.md` est plus exploitable que `doc1.md`.
- **Extraits courts.** Chaque ligne devient une unité indexable ; coupez les paragraphes longs aux phrases.
- **Limitez `top_k` dans le prompt.** Défaut 5, max 25. Précisez *« appelle file_search avec top_k=3 »* pour un contexte réduit.

## Pièges

- Les PDF ne sont extraits que sur 20 pages. Découpez les longs PDF.
- DOCX non supporté en v1 — convertissez en PDF ou MD.
- L'index est reconstruit au premier appel, puis mis en cache pour le reste de l'exécution. Un fichier ajouté en cours de run sera visible à l'exécution suivante.
- Si aucun fichier ne matche, le tool renvoie `{"matches": [], "message": "No indexable files attached..."}` — le modèle s'excuse en général au lieu de réessayer.

---

*Source: https://agentbuilder.systalink.sn/docs/tool-file-search — human documentation.*
*Other language: [/docs-md/en/tool-file-search.md](/docs-md/en/tool-file-search.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
