La IA de GA: OPTIC-K, ML, agentes y chatbot — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué aprendo esto
Sección titulada «Por qué aprendo esto»Guitar Alchemist (GA) tiene un chatbot para guitarristas. Detrás hay una descripción de 240 números de cada forma de acorde de guitarra, llamada OPTIC-K, un índice de 313.047 de esas descripciones, un enrutador que decide qué parte del código responde a una pregunta, y un puñado de agentes que llaman a un modelo de lenguaje. La documentación que lo rodea es extensa y en parte está desactualizada, y el código cambia cada semana.
Quiero saber qué pasa de verdad: qué números recibe un acorde, por qué dos acordes salen parecidos, qué contiene el archivo del índice y qué hace el chatbot con una pregunta cuando no hay ningún modelo accesible. La forma de averiguarlo es llamar a las propias clases de GA desde un programa, imprimir lo que devuelven y compararlo con lo que dicen los comentarios y los documentos. Cuando los dos no coinciden, la diferencia va al diario.
Para quién es este curso
Sección titulada «Para quién es este curso»Escribes C#. Conoces float[], LINQ, la inyección de dependencias y ASP.NET Core lo bastante como para leer un Program.cs. No necesitas saber nada de aprendizaje automático: el curso usa tres ideas, cada una explicada donde aparece por primera vez.
- Un embedding (vector de incrustación) es un array de números de longitud fija que describe un objeto, de modo que objetos parecidos reciben arrays parecidos.
- La similitud del coseno mide cuánto apuntan dos de esos arrays en la misma dirección: 1 para la misma dirección, 0 si no tienen nada en común.
- La búsqueda de vecinos más cercanos devuelve los arrays almacenados más próximos a un array de consulta.
Otros tres cursos de este sitio cubren el trasfondo, y este enlaza con ellos en lugar de repetirlos:
- Teoría musical para Guitar Alchemist: clases de altura, voicings, vectores interválicos y clases de conjuntos, el vocabulario que codifica OPTIC-K;
- Aprendizaje automático, aplicado en IX: variables, distancias, vecinos más cercanos y agrupamiento, escritos a mano;
- Programación agéntica con Claude Code y Codex: el bucle de herramientas, los hooks, las skills y los servidores MCP, desde el lado de un desarrollador que usa agentes.
Al terminar este curso, sabré
Sección titulada «Al terminar este curso, sabré»- dibujar la pila de IA de GA: qué proyecto calcula los embeddings, cuál escribe el índice, cuál enruta un mensaje de chat, y qué hacen ix, Demerzel y TARS a su alrededor;
- leer un vector OPTIC-K partición por partición, calcular a mano la similitud ponderada de dos voicings y decir a qué es invariante el vector y a qué no;
- abrir un archivo de índice OPTK, explicar su cabecera y predecir qué devuelve una búsqueda y por qué;
- seguir un mensaje de chat a través de los hooks, las guardas deterministas, el enrutador de intenciones y los agentes de GA, y explicar por qué algunas preguntas funcionan sin modelo y otras fallan;
- calificar las respuestas musicales de una skill determinista con un pequeño oráculo propio, y decir hasta dónde llega ese oráculo;
- leer un flujo de eventos enviados por el servidor como lo hace el estándar HTML, y comprobar que el texto que reconstruye un cliente es el texto que calculó el servidor;
- ejecutar junto al código fijado una corrección que no está en el commit fijado, y poner a prueba una guarda con entradas para las que no se escribió;
- poner a prueba un conjunto de pruebas: aplicar sus comprobaciones a respuestas para las que no se escribieron y a respuestas erróneas a propósito, y leer lo que pasa;
- poner a prueba una skill con todas las entradas que puede recibir, con la aritmética de un manual como oráculo, y ejecutar contra ella sus propios prompts de ejemplo;
- distinguir, en la IA de GA, lo que funciona hoy, lo que se está construyendo y lo que solo está planeado.
| # | Lección | En GA | Si escribes C# |
|---|---|---|---|
| 1 | El mapa | las cinco capas, la cadena del índice, el host del chatbot, los repositorios hermanos | leer un contenedor de DI, WebApplicationFactory |
| 2 | Embeddings OPTIC-K | EmbeddingSchema, MusicalEmbeddingGenerator, VoicingAnalyzer |
records posicionales, TensorPrimitives |
| 3 | El índice y la búsqueda | OptickIndexWriter, OptickIndexReader, OptickSearchStrategy, MusicalQueryEncoder |
formatos binarios, archivos proyectados en memoria, montículos top-k |
| 4 | El chatbot y sus agentes | ProductionOrchestrator, SemanticIntentRouter, SemanticRouter, skills, hooks |
servicios hospedados, respaldos, probar un host dentro del proceso |
| 5 | La skill de improvisación | ImprovisationSkill frente a la teoría acorde–escala, issue #744 |
expresiones regulares con generador de código fuente, leer AgentResponse.Data, escribir un oráculo de pruebas |
| 6 | La respuesta en el cable | SseChunker, los dos WriteSseLineAsync, los lectores de la página y de ga-client, #743 y #746 |
eventos enviados por el servidor, Regex.Split y aserciones de búsqueda (lookarounds), portar un cliente para probarlo |
| 7 | Nombres de acorde que no sabe leer | InvalidChordNames (#749), las expresiones de acordes de ImprovisationSkill, issue #745 |
extern alias y CS0436, límites de palabra en expresiones regulares |
| 8 | El propio examen del chatbot | prompts.yaml y PromptCorpusTests, DiatonicChordsSkill (Path B), ModesSkill |
YamlDotNet, StringComparison, poner a prueba un conjunto de pruebas con respuestas erróneas |
| 9 | Cada intervalo, cada tonalidad | IntervalSkill, ScaleInfoSkill, RelativeKeySkill, KeyNaming, el DetermineQuality del dominio |
pruebas exhaustivas, \b y búsqueda hacia delante en expresiones regulares, ramas por defecto de un switch |
| 10 | En qué se le dice al modelo que confíe | ga_dsl_eval, las closures domain.diatonicChords, domain.transposeChord y domain.commonTones, los SKILL.md de las tres skills de Path B |
llamar a la herramienta de un modelo sin el modelo, una letra por grado, reutilizar un oráculo de una lección a otra |
| 11 | Los acordes que lee la skill de tonalidad | KeyIdentificationService en el commit fijado y en main, ga_key_identify, KeyIdentificationSkill, el SKILL.md de key-identification |
sacar símbolos de un texto en prosa, una clasificación y la selección construida sobre ella, llamar a métodos privados por reflexión |
| 12 | Lo que responden las skills de progresión | ProgressionMoodSkill, ProgressionCompletionSkill, sus SKILL.md, KeyIdentificationService en el commit fijado y en main |
una prueba de palabras que elige una respuesta fija, un modelo restringido a una lista calculada, enrutamiento de respaldo por palabras clave |
| 13 | Lo que responde el análisis de progresiones | la closure domain.analyzeProgression en el commit fijado y en main, ga_dsl_list_closures, el borrador progression-analysis, KeyIdentificationService.IsChordDiatonic |
compilar el archivo F# de otro commit contra el proyecto fijado, los ejemplos de un borrador como prueba, números romanos sacados de la escala y del acorde |
| 14 | Lo que responde la skill de sustitución | ChordSubstitutionSkill, ga_chord_substitutions y ga_chord_compare, GrothendieckService.FindNearby, GrothendieckDelta, la closure domain.chordSubstitutions |
una distancia bajo la cual toda una clase de conjuntos empata, un empate resuelto por el orden de almacenamiento, entradas opcionales que una herramienta exige |
| 15 | Las notas de un acorde | ChordInfoSkill, ChordVocabulary, ChordSpelling, ga_chord_info y el SKILL.md chord-info |
la primera coincidencia de una expresión regular, ToLowerInvariant más allá del ASCII, un viaje de ida y vuelta como prueba |
| 16 | Los voicings de un acorde | ChordVoicingsSkill, TypedMusicalQueryExtractor, ChordPitchClasses, OptickSearchStrategy y ADR-0002, en el commit fijado y en main |
un segundo clon de una dependencia en otro commit, comprobar una respuesta tocándola, un filtro por nombres, un filtro descartado sin decirlo en la respuesta |
| 17 | La cejilla y las afinaciones | CapoSkill, AlternateTuningsSkill y el respaldo sin conexión, en el commit fijado y en main |
comprobar la aritmética contra un manual en cada tonalidad y cada traste, un límite de palabra detrás de una alteración, un sentido leído en la formulación, la grafía como parte de la respuesta |
| 18 | La conducción de voces | VoiceLeadingSkill y el respaldo sin conexión |
comprobar contra una búsqueda exhaustiva una respuesta que se dice óptima, una duplicación elegida sin búsqueda, una tabla de cifrados detrás de una expresión más estrecha, una búsqueda de un bemol que no distingue mayúsculas de minúsculas |
| 19 | Los pares de voicings | ga_voice_leading_pair en GaMcpServer, su búsqueda en el commit fijado y en main, y la skill de conducción de voces en espera |
una clasificación que nunca comprueba lo que clasifica, más candidatos que empeoran la respuesta, un emparejamiento ordenado que solo es mínimo con el mismo número de notas, un orden de cadena que un consumidor corrigió y otro transmite tal cual |
| 20 | Las progresiones generadas | ga_generate_progression en GaMcpServer, las tablas de doce tonalidades de GA, el enlace con ga_voice_leading_pair en el commit fijado y en main, y la skill de progresiones en espera |
una grafía que parte de la armadura y no del nombre, dos fuentes que coinciden en un acorde equivocado, un parámetro sin límite, respuestas a movimientos sueltos que no forman un camino |
| 21 | La búsqueda de voicings | ga_search_voicings y ga_voicing_vocabulary en GaMcpServer, el lector de consultas, el registro de tags y la skill voicing-search de GA, en el commit fijado y en main, y la skill voicing-search en espera |
una palabra leída y luego descartada, muchos tags sobre pocos bits, un tag que no es un filtro, palabras comparadas por subcadena, un rango de puntuaciones inalcanzable |
| 22 | Los acordes parecidos | IcvNeighborsSkill e IntervalClassVectorSkill en GA.Business.ML, GrothendieckService.FindNearby y las pistas de enrutamiento, en el commit fijado y en main, y la skill icv-neighbors en espera |
anclas de enrutamiento que el parser no lee, una tabla que recurre a una tríada mayor, una ordenación sobre costes iguales, vecinos que solo dependen del vector |
| 23 | La distancia y el camino armónicos | GrothendieckDeltaSkill e IcvShortestPathSkill en GA.Business.ML, GrothendieckDelta y GrothendieckService.FindShortestPath, en el commit fijado y en main |
una distancia que nunca es cero, una interpretación que lee una sola regla, mojibake en una respuesta, una búsqueda que no puede tener éxito, pasos contados como conjuntos |
| 24 | Las clases de conjuntos y el analizador Grothendieck | SetTheoryEquivalenceSkill y GrothendieckParseSkill en GA.Business.ML, y GrothendieckOperationsParser en GA.Business.DSL, en el commit fijado y en main |
una relación que nunca se lee, un conjunto leído desde su último número, un analizador cuyos espacios ya se han comido, una respuesta que no habla de ningún acorde |
| 25 | Lo que llega a la skill de transposición | DefaultRoutingHintProvider, TransposeSkill, SkillMdPlugin y los dos enrutadores del host del chatbot, en el commit fijado y en main |
una pista que no reconoce los propios ejemplos de la skill, una skill a la que ningún respaldo llega, un valor por defecto que responde a toda pregunta que nadie reclama |
| 26 | El catálogo de modos | ModesSkill, Modes.yaml y ModesConfig, en el commit fijado e iguales en main |
modos que no son la escala de su familia, nombres cortados por un comentario de YAML, fórmulas numeradas por posición |
| 27 | Las notas que suenan fuera | OutsideNotesSkill y ChordVocabulary, en el commit fijado e iguales en main |
tensiones que ninguna escala de acorde contiene, una 11 dentro de los acordes de trecena, cifrados cortados, sostenidos en acordes con bemoles |
| — | Diario |
Requisitos previos
Sección titulada «Requisitos previos»- El SDK de .NET 10 y Git. En Windows, ejecuta los scripts del curso desde Git Bash.
- Unos 20 MB de disco para el clon parcial de GA, y alrededor de 1,1 GB una vez compilados los proyectos de GA y el programa del curso.
- Una conexión de red solo para la primera ejecución, para clonar GA y restaurar los paquetes NuGet. Después, todo funciona sin conexión.
- No hace falta guitarra, pero las formas de acorde de la lección 2 son las primeras que aprende un guitarrista.
Recursos
Sección titulada «Recursos»- GuitarAlchemist/ga en
a826864, en particular suCLAUDE.md, los documentos del esquema OPTIC-K y la hoja de ruta del chatbot. - Clifton Callender, Ian Quinn y Dmitri Tymoczko, “Generalized Voice-Leading Spaces”, Science 320, 2008: el artículo que dio nombre a las equivalencias OPTIC.
- Jared Updike, Harmonious: una referencia exhaustiva de acordes y escalas para piano y guitarra. Su página Equivalence Groups ilustra cada equivalencia OPTIC con diagramas de acordes y añade la K de OPTIC-K, de complementariedad.
- Pruebas de integración en ASP.NET Core, para
WebApplicationFactory, y Microsoft.Extensions.AI, las abstracciones con las que el chatbot de GA llama a los modelos.