Skip to content

knowledge_search

KnowledgeSearchTool — filtered BM25 retrieval with source attribution.

Wraps KnowledgeStore so agents can search ingested documents by text query and optional provenance filters (source, doc_type, author, date range). Optionally delegates to a TwoStageRetriever for BM25 + reranking.

Depuis le 23 août 2026, l'outil sait aussi se construire SEUL : sans magasin injecté, il monte à la première recherche la même pile hybride que la recherche profonde — KnowledgeStore + OllamaEmbedder (nomic-embed-text) + HybridSearch (BM25 et vecteurs, fusion RRF). C'est ce qui l'a fait entrer dans la trousse du chat : le savoir personnel (notes Obsidian, Apple Notes, documents ingérés) était indexé, embarqué… et inaccessible au modèle. Ollama absent = repli BM25 seul, jamais un échec.

Classes

KnowledgeSearchTool

KnowledgeSearchTool(
    store: Optional[KnowledgeStore] = None,
    retriever: Optional["TwoStageRetriever"] = None,
)

Bases: BaseTool

Search the knowledge store using filtered BM25 retrieval.

Results include source attribution so agents can cite provenance. When a TwoStageRetriever is supplied it is used in place of the store's direct retrieve method, enabling optional semantic reranking.

Source code in src/diapason/tools/knowledge_search.py
def __init__(
    self,
    store: Optional[KnowledgeStore] = None,
    retriever: Optional["TwoStageRetriever"] = None,
) -> None:
    self._store = store
    self._retriever = retriever
    self._hybride: Any = None  # monté paresseusement, voir _pile_hybride

KnowledgeGetDocumentTool

Bases: BaseTool

Le document ENTIER derrière un extrait de recherche.

Le dernier kilomètre (Atlas, 25 août 2026) : knowledge_search rend des extraits de 300 caractères alors que l'index porte le corps COMPLET des mails et des notes. Cet outil recoud les chunks — « retrouve le mail de X sur Y » devient recherche puis lecture, corps entier, même hors ligne, même Ollama éteint.