← Réalisations

Dona: un assistant personnel agentique, local d'abord

Résumé

Dona répond à partir de données personnelles: documents Google Drive, agendas, et compte bancaire professionnel. L'architecture est local-first: les documents, le retrieval, les embeddings et la vision restent sur la machine via Ollama; seules les demandes sensibles passent par une branche dédiée s'appuyant sur des modèles open-weights hébergés en Europe, où chaque écriture exige une confirmation humaine explicite. Les citations des réponses sont validées par le code, pas par le modèle.

01Le problème

Un assistant utile doit connaître vos documents, vos agendas, vos finances. Les assistants cloud imposent d'envoyer tout cela à un tiers. Dona explore une autre voie: garder le maximum sur la machine, et n'accorder à chaque demande que le niveau de capacité, et d'exposition, qu'elle exige réellement.

Le second problème est la fiabilité: un assistant qui invente n'est pas un assistant. Chaque affirmation de Dona doit pouvoir être tracée jusqu'à sa source, et chaque action sensible doit être approuvée avant d'être exécutée.

02L'architecture: un routeur, trois branches

Chaque question est d'abord routée par un petit modèle qui répond en un mot. Trois branches: la conversation légère (modèle local, sans outils), l'agent local (documents et agendas, via Ollama), et l'agent critique (bancaire, sur des modèles open-weights hébergés en Europe). En cas de doute, le routeur choisit la branche critique; en cas de panne du routeur, tout retombe sur la branche locale, le mode dégradé reste fonctionnel hors ligne.

question routeur 1 mot - doute = critique sur la machine (Ollama) conversation sans outils agent local documents + agendas (MCP) retrieval hybride BM25 francais + dense, RRF Chroma - ingestion incrementale heberge UE (RGPD) agent critique bancaire - Qonto MCP confirmation humaine avant ecriture reponse en streaming citations validees par le code, sources depuis les artifacts encadre bleu = appel LLM - zones en pointilles = ou tournent les modeles
Fig. 1 - Le routeur dirige chaque question vers la branche la moins exposée capable d'y répondre.

03Ingestion et retrieval

Les documents Drive sont transcrits en Markdown, les PDF page par page par un modèle de vision local, puis découpés en suivant leurs titres et indexés dans Chroma. L'ingestion est incrémentale: seuls les fichiers modifiés sont retraités, et les anciens chunks ne sont supprimés qu'une fois les nouveaux construits.

Le retrieval combine recherche dense (embeddings locaux) et lexicale (BM25 avec tokenisation française: accents, stopwords, stemming), fusionnées par Reciprocal Rank Fusion. L'agent peut soumettre plusieurs reformulations d'une même question, chaque paire question-méthode produisant son propre classement avant fusion. Toute la couche est déterministe: aucun LLM dans le chemin de recherche.

04Les outils

05Les garde-fous, par le code

Le principe directeur: ne jamais demander au modèle ce que le code peut garantir. Les citations d'une réponse ne deviennent des sources que si leur marqueur correspond exactement à un extrait réellement remonté par le retrieval; les marqueurs inventés sont supprimés. Les échecs d'outils sont détectés par le code et signalés à l'utilisateur, le modèle ne raconte jamais ses propres échecs. Le texte remonté par les outils est traité comme des données: les instructions qui s'y trouveraient sont ignorées. Et le raisonnement interne des modèles n'est jamais transmis au navigateur.

06La stack

CoucheChoix
Inférence localeOllama: agent local, embeddings, vision pour la transcription
Branche critiquemodèles open-weights hébergés en Europe (RGPD)
AgentLangChain / LangGraph: routeur, trois branches, middlewares
IndexChroma + BM25 français, fusion RRF
OutilsMCP: Google Calendar (2 comptes), Qonto (OAuth)
InterfaceFlask, streaming NDJSON
Qualité101 tests sur doublures, sans réseau ni LLM; documentation interactive

07État

Dona est open source et activement développé. Le dépôt inclut une documentation interactive: carte du système avec drill-down jusqu'au fichier, et simulations pas à pas de l'ingestion, du retrieval et de la réponse.

@software{dona,
  author = {Vinceslas, Medhy},
  title  = {Dona: local-first agentic personal assistant},
  url    = {https://github.com/Mdhvince/Dona},
  note   = {Open source, Myelink}
}
Voir le code sur GitHub Me contacter