Chatbot Shiny (R) sur l'agriculture au Burkina Faso : ellmer + tool calling + RAG (ragnar) pour ancrer les reponses dans des donnees et fiches techniques reelles.
# Assistant agricole - Burkina Faso
Chatbot Shiny (R) qui répond à des questions sur l'agriculture au Burkina Faso : production par culture, météo, contexte macro-économique, disponibilité alimentaire régionale, et savoir-faire agronomique (itinéraires techniques). Construit autour de **ellmer** (interface LLM), **R6** (le système orienté objet sous-jacent) et d'un pipeline **RAG** (ragnar) pour ancrer les réponses dans de vraies fiches techniques plutôt que dans la mémoire du modèle.
## Sommaire
- Introduction
- Aperçu
- Concepts clés
- ellmer
- R6
- RAG
- Le chatbot
- Fonctionnalités
- Architecture
- Sources de données
- Installation
- Lancement
- Limites connues
## Introduction
Ce projet répond à une question précise : un modèle de langage seul invente des chiffres dès qu'on lui demande une statistique agricole. Ici, le modèle ne fait jamais de calcul ni de rappel de mémoire pour une donnée chiffrée ou un conseil technique - il passe systématiquement par un outil (appel d'API, lecture d'un fichier, recherche documentaire) et cite sa source. Le rôle du modèle se limite à comprendre la question, choisir le bon outil, et mettre en forme la réponse.
L'interface reprend les codes d'un chatbot moderne (discussions multiples, édition de message, thème clair/sombre, export) mais reste un projet R "from scratch" : aucun framework de chat pré-construit, tout le rendu HTML/CSS/JS est écrit à la main pour un contrôle total.
## Aperçu
## Concepts clés
### ellmer
`ellmer` est le package R (Posit/tidyverse) qui fournit une interface unifiée vers différents fournisseurs de LLM (Google Gemini, OpenAI, Anthropic, Ollama...). Sans lui, il faudrait réimplémenter à la main l'appel HTTP, le format des messages, la boucle d'appel d'outils, et le streaming pour chaque fournisseur séparément.
Ce que `ellmer` apporte concrètement à ce projet :
- `chat_google_gemini(system_prompt = ...)` crée un objet `Chat` connecté à l'API Gemini avec la clé `GOOGLE_API_KEY`.
- `chat$reg …