C#, AI, Python : quels outils pour quelles tâches ?

Le fantasme initial
Développant des applications en C# et .NET depuis un bon moment, il me paraissait judicieux de garder la même stack technique et d'utiliser mes connaissances pour commencer à développer des applications faisant appel à de l’AI et des LLM.
Après tout, Microsoft fournit des librairies pour manipuler les vecteurs d’embeddings, on a droit à de nombreuses fonctions et structures pour faciliter l’accès aux LLMs. Et puis, aussi, Microsoft a investi de l’argent dans OpenAI, ça doit aider, non ?
… et la réalité
J’y ai cru. J’ai essayé. J’ai passé du temps à réécrire des morceaux de code pour gérer mes embeddings, pour appeler mes instances locales de LM Studio et parser les résultats.
Au début, je me disais : Il est hors de question d’utilise Python, voyons ! .NET est une stack très solide, c’est toujours un plaisir de développer avec, et programmer en Python quand on a l’habitude de langages très structurés, ça peut devenir un challenge…
Seulement voilà.
Ce que je n’avais pas pris en compte, c’était l’incroyable écosystème autour de l’AI - quasi - exclusivement en Python.
Pourquoi ? Les acteurs utilisent ce langage pour sa capacité à itérer très rapidement, à tester via Jupyter Notebook, à essayer des choses puis à les rendre opérationnelles en très peu de temps.
Les librairies sont accessibles en Python. Les acteurs, qui viennent des data science, et ne connaissent pas forcément autre chose que Python, bâtissent donc des briques supplémentaires dans cet écosystème.
Tout va très vite en AI, et tout se retrouve très vite en Python.
Un écosystème qui va trèèès vite
Ainsi, quand j’ai commencé à faire fonctionner mon système de recherche utilisant un LLM en local via LM Studio (Microsoft poussant bien sur à utiliser Azure, il a fallu coder beaucoup de choses à la main), j’ai eu envie de chaîner des traitements, comme avec LangChain…
Ce qui est plus facile à dire qu’à faire.
Et n’ayant pas trouvé de LangChain en .NET, il a fallu bidouiller… Pour se rendre compte qu’il me manquait d’autres outils, que matplotlib était sacrément intéressant pour rapidement générer des graphes, qu’utiliser une base Vectorielle était sympa mais pas évident en C#…
Bref, j’en suis revenu au bon sens paysan qui caractérise l’agriculteur du Poitou : à chaque tâche son outil.
Et donc, comment faire ?
Du coup, revenons à un concept un peu suranné mais toujours d’actualité : la séparation des responsabilités.
Visual Studio étant d’une grande souplesse, j’ai tout simplement créé un projet Python pour hoster tous mes besoins en AI. Ce projet est un web service en REST ; en utilisant FastAPI (https://fastapi.tiangolo.com/), des méthodes GET et POST ont été rapidement mises en place pour autoriser le lancement des traitements au niveau du LLM.
Quant à mon application Web cliente, elle est dans un projet séparé en C# et Blazor, et elle appelle mon service REST Python ; elle me permet d’avancer beaucoup plus vite .
Moralité
Moralité : utilisez l’outil adapté au besoin. Il y a toujours moyen de faire communiquer ces différentes technologies.
Je ne crois pas qu’on fasse mieux que Python pour de l’AI de nos jours ; cela nécessite peut être de ré-apprendre un langage, mais cela en vaut toujours la peine.
Autre bonus : le jour où vous travaillerez avec un data scientist, il pourra être productif tout de suite sans avoir à se former à une nouvelle techno qui ne l’intéressera pas forcément…