L'IA de GA : OPTIC-K, ML, agents et chatbot — Mission
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
Pourquoi j’apprends ça
Section intitulée « Pourquoi j’apprends ça »Guitar Alchemist (GA) a un chatbot pour guitaristes. Derrière lui, il y a une description en 240 nombres de chaque forme d’accord à la guitare, appelée OPTIC-K, un index de 313 047 de ces descriptions, un routeur qui décide quel morceau de code répond à une question, et une poignée d’agents qui appellent un modèle de langage. La documentation autour est abondante et en partie périmée, et le code bouge chaque semaine.
Je veux savoir ce qui se passe vraiment : quels nombres reçoit un accord, pourquoi deux accords ressortent comme semblables, ce que contient le fichier d’index, et ce que fait le chatbot d’une question quand aucun modèle n’est joignable. Pour le découvrir, j’appelle les classes de GA depuis un programme, j’affiche ce qu’elles renvoient, et je le compare à ce que disent les commentaires et les documents. Là où les deux divergent, la différence va dans le journal.
À qui s’adresse ce cours
Section intitulée « À qui s’adresse ce cours »Tu écris du C#. Tu connais float[], LINQ, l’injection de dépendances et ASP.NET Core assez pour lire un Program.cs. Tu n’as besoin d’aucune connaissance en apprentissage automatique : le cours utilise trois idées, chacune expliquée là où elle apparaît pour la première fois.
- Un embedding (plongement vectoriel) est un tableau de nombres de longueur fixe qui décrit un objet, de sorte que des objets semblables reçoivent des tableaux semblables.
- La similarité cosinus mesure à quel point deux tels tableaux pointent dans la même direction : 1 pour la même direction, 0 pour rien en commun.
- La recherche des plus proches voisins renvoie les tableaux stockés les plus proches d’un tableau de requête.
Trois autres cours de ce site couvrent les bases, et celui-ci renvoie vers eux au lieu de les répéter :
- Théorie musicale pour Guitar Alchemist : classes de hauteurs, voicings, vecteurs d’intervalles et classes d’ensembles, le vocabulaire qu’encode OPTIC-K ;
- Apprentissage automatique, appliqué dans IX : caractéristiques, distances, plus proches voisins et partitionnement, écrits à la main ;
- Programmation agentique avec Claude Code et Codex : la boucle d’outils, les hooks, les skills et les serveurs MCP, du point de vue d’un développeur qui utilise des agents.
À la fin de ce cours, je saurai
Section intitulée « À la fin de ce cours, je saurai »- dessiner la pile IA de GA : quel projet calcule les embeddings, lequel écrit l’index, lequel route un message de chat, et ce que font ix, Demerzel et TARS autour ;
- lire un vecteur OPTIC-K partition par partition, calculer à la main la similarité pondérée de deux voicings, et dire à quoi le vecteur est invariant et à quoi il ne l’est pas ;
- ouvrir un fichier d’index OPTK, expliquer son en-tête, et prédire ce que renvoie une recherche et pourquoi ;
- suivre un message de chat à travers les hooks, les gardes déterministes, le routeur d’intentions et les agents de GA, et expliquer pourquoi certaines questions fonctionnent sans modèle et d’autres échouent ;
- évaluer les réponses musicales d’un skill déterministe avec un petit oracle écrit de ma main, et dire où cet oracle s’arrête ;
- lire un flux d’événements envoyés par le serveur comme le fait le standard HTML, et vérifier que le texte qu’un client reconstruit est bien celui que le serveur a calculé ;
- exécuter, à côté du code épinglé, un correctif absent du commit épinglé, et tester une garde avec des entrées pour lesquelles elle n’a pas été écrite ;
- tester une suite de tests : appliquer ses vérifications à des réponses pour lesquelles elles n’ont pas été écrites et à des réponses fausses exprès, et lire ce qui passe ;
- tester un skill sur toutes les entrées qu’il peut recevoir, avec le calcul d’un manuel pour oracle, et lui faire passer ses propres prompts d’exemple ;
- distinguer, dans l’IA de GA, ce qui fonctionne aujourd’hui, ce qui est en construction, et ce qui n’est que prévu.
| # | Leçon | Dans GA | Si tu écris du C# |
|---|---|---|---|
| 1 | La carte | les cinq couches, le pipeline de l’index, l’hôte du chatbot, les dépôts voisins | lire un conteneur d’injection de dépendances, WebApplicationFactory |
| 2 | Les embeddings OPTIC-K | EmbeddingSchema, MusicalEmbeddingGenerator, VoicingAnalyzer |
records positionnels, TensorPrimitives |
| 3 | L’index et la recherche | OptickIndexWriter, OptickIndexReader, OptickSearchStrategy, MusicalQueryEncoder |
formats binaires, fichiers mappés en mémoire, tas top-k |
| 4 | Le chatbot et ses agents | ProductionOrchestrator, SemanticIntentRouter, SemanticRouter, skills, hooks |
services hébergés, replis, tester un hôte dans le processus |
| 5 | Le skill d’improvisation | ImprovisationSkill face à la théorie accord–gamme, ticket #744 |
expressions régulières générées par source, lire AgentResponse.Data, écrire un oracle de test |
| 6 | La réponse sur le fil | SseChunker, les deux WriteSseLineAsync, les lecteurs de la page et de ga-client, #743 et #746 |
événements envoyés par le serveur, Regex.Split et assertions de voisinage, porter un client pour le tester |
| 7 | Les noms d’accords qu’il ne lit pas | InvalidChordNames (#749), les expressions d’accords de ImprovisationSkill, ticket #745 |
alias extern et CS0436, limites de mot dans les expressions régulières |
| 8 | L’examen maison du chatbot | prompts.yaml et PromptCorpusTests, DiatonicChordsSkill (Path B), ModesSkill |
YamlDotNet, StringComparison, tester une suite de tests avec des réponses fausses |
| 9 | Tous les intervalles, toutes les tonalités | IntervalSkill, ScaleInfoSkill, RelativeKeySkill, KeyNaming, le DetermineQuality du domaine |
tests exhaustifs, \b et assertion avant dans les expressions régulières, branches par défaut des switch |
| 10 | Ce à quoi le modèle doit se fier | ga_dsl_eval, les closures domain.diatonicChords, domain.transposeChord et domain.commonTones, les fichiers SKILL.md des trois skills Path B |
appeler l’outil d’un modèle sans le modèle, une lettre par degré, réutiliser un oracle d’une leçon à l’autre |
| 11 | Les accords que lit le skill des tonalités | KeyIdentificationService au commit épinglé et sur main, ga_key_identify, KeyIdentificationSkill, le SKILL.md de key-identification |
extraire des chiffrages d’un texte, un classement et la sélection bâtie dessus, appeler des méthodes privées par réflexion |
| 12 | Ce que répondent les skills de progression | ProgressionMoodSkill, ProgressionCompletionSkill, leurs fichiers SKILL.md, KeyIdentificationService au commit épinglé et sur main |
un test sur les mots qui choisit une réponse fixe, un modèle restreint à une liste calculée, le routage de repli par mots-clés |
| 13 | Ce que répond l’analyse de progression | la closure domain.analyzeProgression au commit épinglé et sur main, ga_dsl_list_closures, le brouillon progression-analysis, KeyIdentificationService.IsChordDiatonic |
compiler le fichier F# d’un autre commit contre le projet épinglé, les exemples d’un brouillon comme test, des chiffres romains tirés de la gamme et de l’accord |
| 14 | Ce que répond le skill de substitution | ChordSubstitutionSkill, ga_chord_substitutions et ga_chord_compare, GrothendieckService.FindNearby, GrothendieckDelta, la closure domain.chordSubstitutions |
une distance sous laquelle toute une classe d’ensembles est à égalité, une égalité départagée par l’ordre de stockage, des entrées optionnelles qu’un outil exige |
| 15 | Les notes d’un accord | ChordInfoSkill, ChordVocabulary, ChordSpelling, ga_chord_info et le SKILL.md chord-info |
la première correspondance d’une expression régulière, ToLowerInvariant au-delà de l’ASCII, un aller-retour comme test |
| 16 | Les voicings d’un accord | ChordVoicingsSkill, TypedMusicalQueryExtractor, ChordPitchClasses, OptickSearchStrategy et ADR-0002, au commit épinglé et sur main |
un second clone d’une dépendance à un autre commit, vérifier une réponse en la jouant, un filtre sur les noms, un filtre abandonné sans un mot dans la réponse |
| 17 | Le capodastre et les accordages | CapoSkill, AlternateTuningsSkill et le repli hors ligne, au commit épinglé et sur main |
vérifier un calcul contre un manuel sur chaque tonalité et chaque case, une limite de mot après une altération, un sens de calcul tiré de la formulation, l’orthographe comme partie de la réponse |
| 18 | La conduite des voix | VoiceLeadingSkill et le repli hors ligne |
vérifier contre une recherche exhaustive une réponse qui se dit optimale, une doublure choisie sans recherche, une table de chiffrages derrière une expression plus étroite, une recherche de bémol insensible à la casse |
| 19 | Les paires de voicings | ga_voice_leading_pair dans GaMcpServer, sa recherche au commit épinglé et sur main, et le skill de conduite des voix en attente |
un classement qui ne vérifie jamais ce qu’il classe, davantage de candidats qui dégradent la réponse, un appariement trié qui n’est minimal qu’entre tailles égales, un ordre des cordes qu’un consommateur a corrigé et qu’un autre transmet tel quel |
| 20 | Les progressions générées | ga_generate_progression dans GaMcpServer, les tables à douze tonalités de GA, le raccord avec ga_voice_leading_pair au commit épinglé et sur main, et le skill de progression en attente |
une orthographe tirée de l’armure plutôt que du nom, deux sources qui s’accordent sur un accord faux, un paramètre sans limite, des réponses pour des mouvements isolés qui ne font pas un chemin |
| 21 | La recherche de voicings | ga_search_voicings et ga_voicing_vocabulary dans GaMcpServer, le lecteur de requêtes, le registre des tags et le skill de recherche de voicings de GA, au commit épinglé et sur main, et le skill de recherche de voicings en attente |
un mot lu puis abandonné, beaucoup de tags sur peu de bits, un tag qui n’est pas un filtre, des mots comparés par sous-chaîne, une plage de scores hors d’atteinte |
| 22 | Les accords semblables | IcvNeighborsSkill et IntervalClassVectorSkill dans GA.Business.ML, GrothendieckService.FindNearby et les indices de routage, au commit épinglé et sur main, et le skill icv-neighbors en attente |
des ancres de routage que l’analyseur ne lit pas, une table qui se rabat sur une triade majeure, un tri sur des coûts égaux, des voisins qui ne dépendent que du vecteur |
| 23 | La distance et le chemin harmoniques | GrothendieckDeltaSkill et IcvShortestPathSkill dans GA.Business.ML, GrothendieckDelta et GrothendieckService.FindShortestPath, au commit épinglé et sur main |
une distance qui n’est jamais nulle, une interprétation qui ne lit qu’une règle, du mojibake dans une réponse, une recherche qui ne peut pas aboutir, des étapes comptées comme des ensembles |
| 24 | Les classes d’ensembles et l’analyseur Grothendieck | SetTheoryEquivalenceSkill et GrothendieckParseSkill dans GA.Business.ML, et GrothendieckOperationsParser dans GA.Business.DSL, au commit épinglé et sur main |
une relation jamais lue, un ensemble lu à partir de son dernier nombre, un analyseur dont les espaces sont déjà mangées, une réponse qui ne parle d’aucun accord |
| 25 | Ce qui atteint le skill de transposition | DefaultRoutingHintProvider, TransposeSkill, SkillMdPlugin et les deux routeurs de l’hôte du chatbot, au commit épinglé et sur main |
un indice qui manque les propres exemples du skill, un skill qu’aucun repli n’atteint, une valeur par défaut qui répond à toute question que personne ne prend |
| 26 | Le catalogue des modes | ModesSkill, Modes.yaml et ModesConfig, au commit épinglé et identiques sur main |
des modes qui ne sont pas la gamme de leur famille, des noms coupés par un commentaire YAML, des formules numérotées par position |
| 27 | Les notes qui sonnent en dehors | OutsideNotesSkill et ChordVocabulary, au commit épinglé et identiques sur main |
des tensions qu’aucune gamme d’accord ne contient, une 11 dans les accords de treizième, des chiffrages coupés, des dièses dans des accords en bémols |
| — | Journal |
Prérequis
Section intitulée « Prérequis »- Le SDK .NET 10 et Git. Sous Windows, lance les scripts du cours depuis Git Bash.
- Environ 20 Mo de disque pour le clone partiel de GA, et environ 1,1 Go une fois les projets de GA et le programme du cours compilés.
- Une connexion réseau pour la première exécution seulement, pour cloner GA et restaurer les paquets NuGet. Ensuite, tout s’exécute hors ligne.
- Pas besoin de guitare, mais les formes d’accords de la leçon 2 sont les premières qu’apprend un guitariste.
Ressources
Section intitulée « Ressources »- GuitarAlchemist/ga au commit
a826864, en particulier sonCLAUDE.md, les documents du schéma OPTIC-K et la feuille de route du chatbot. - Clifton Callender, Ian Quinn et Dmitri Tymoczko, “Generalized Voice-Leading Spaces”, Science 320, 2008 : l’article qui a nommé les équivalences OPTIC.
- Jared Updike, Harmonious : une référence exhaustive des accords et des gammes pour piano et guitare. Sa page Equivalence Groups illustre chaque équivalence OPTIC par des diagrammes d’accords, et ajoute le K d’OPTIC-K, pour la complémentarité.
- Tests d’intégration dans ASP.NET Core, pour
WebApplicationFactory, et Microsoft.Extensions.AI, les abstractions par lesquelles le chatbot de GA appelle les modèles.