Aller au contenu
learn

L'IA de GA : OPTIC-K, ML, agents et chatbot — Mission

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.

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.

  1. 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.
  2. 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.
  3. 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 :

  • 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
  • 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.