Lección 17: La cejilla y las afinaciones
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.
La lección 16 preguntó dónde poner los dedos para tocar un acorde. Antes vienen dos preguntas: dónde va la cejilla y cómo están afinadas las cuerdas. Dos skills del chatbot las responden sin modelo; las dos se crearon el 2026-05-14 para resolver dos “dealbreakers” (obstáculos insalvables) del backlog de GA. El enrutador envía “what shape do I play in E with capo 4” (¿qué forma toco en E con la cejilla en el traste 4?) a skill.capo, que ejecuta CapoSkill, y “what is DADGAD tuning” (¿qué es la afinación DADGAD?) a skill.alternatetunings, que ejecuta AlternateTuningsSkill (GaPlugin.cs líneas 83 y 93). La primera hace aritmética de semitonos; la segunda consulta una tabla de nueve afinaciones (CapoSkill.cs líneas 6-23, AlternateTuningsSkill.cs líneas 6-23).
Todos los enlaces a GA apuntan al commit a826864, el commit fijado del curso, salvo los que nombran otro. Entre el commit fijado y el main de GA en f4f5b4a (2026-10-01), CapoSkill solo añade el indicador Declined a su rechazo, lo que no cambia sus respuestas. AlternateTuningsSkill cambió además las expresiones que leen el nombre de una afinación. Así que el programa pregunta a la skill de cejilla en el commit fijado, y a la de afinaciones en el commit fijado y en GaMain, el programa de la lección 16 compilado a partir del main de GA. Los dos compilan las preguntas sobre afinaciones a partir de code/ga-ai/Shared/TuningsProbe.cs. Las salidas proceden de:
dotnet run --project code/ga-ai/GaAi -c Release -- l17dotnet run --project code/ga-ai/GaMain -c Release -- l17Qué prompts llegan a las dos skills
Sección titulada «Qué prompts llegan a las dos skills»El CanHandle de las dos skills devuelve false, con el comentario “semantic-routing only” (solo enrutamiento semántico) (CapoSkill.cs línea 47, AlternateTuningsSkill.cs línea 50), y lo sigue haciendo en main. En main, cuando el enrutador no puede calcular el embedding de una pregunta, se la da a la primera intención, en orden de registro, cuya skill la acepta en CanHandle (SemanticIntentRouter.cs línea 321, OrchestratorSkillIntent.cs línea 29). El programa arranca el host del chatbot como en la lección 15 y le pasa al CanHandle de cada skill los 22 prompts de ejemplo de las dos skills:
== Without embeddings: the first skill, in registration order, whose CanHandle accepts each example promptprompt first skill that accepts itWhat shape do I play in E with capo 4 noneSong is in E, what chord shape with capo on 4 noneCapo on 3, song in G, what shape noneI play a C shape with capo 3 — what does it sound like noneWhat does a G shape sound like with capo 2 noneCapo on 5, song in A noneIf I capo on 2 and play an Em shape, what's the sounding chord skill.chordinfoWhat's the sounding key if I play in G with capo on 5 noneCapo 7, D shape — sounding chord noneWhat chord shape for B major with capo 4 skill.chordvoicingswhat is DADGAD tuning nonewhat's drop D tuning nonehow do I tune to drop C nonedrop C tuning notes nonehow do I tune to open G noneopen D tuning notes nonewhat is double drop D tuning nonewhat's half step down tuning nonewhole step down tuning notes noneDGCGCD tuning explained nonehow is DADGAD different from standard nonewhat tuning is Eb Ab Db Gb Bb Eb noneskill intents 32; CanHandle of skill.capo and skill.alternatetunings accepts 0 of their 22 example prompts- Sin embeddings no responde ninguna de las dos skills, aunque ninguna necesita un modelo. El respaldo se añadió en
mainpara que las skills deterministas respondan cuando el servicio de embeddings está caído. Las skills de cejilla y de afinaciones son deterministas y nunca reciben una pregunta por esa vía. Dos de los ejemplos de la skill de cejilla van a otras skills: la de información de acordes se queda con el que nombra Em, y la de voicings, con el que pide una “chord shape for B major” (forma de acorde para B mayor).
La cejilla
Sección titulada «La cejilla»Una cejilla sube cada cuerda tantos semitonos como el número de su traste. El guitarrista toca la forma, y lo que se oye es la forma más el traste. CapoSkill lee la pregunta con dos expresiones, una para una forma y otra para una tonalidad que suena, y prueba primero la de la forma (líneas 52-64, líneas 89-104):
private static readonly Regex SoundingToShape = new(@"(?:song\s+(?:is\s+)?in\s+|key\s+(?:is\s+|of\s+)?|in\s+)(?<key>[A-Ga-g][b#♭♯]?)(?:\s+(?<qual>major|minor|maj|min))?\b[^.?!]*?\bcapo\s+(?:on\s+|fret\s+|at\s+)?(?<n>\d{1,2})\b" + @"|" + @"\bcapo\s+(?:on\s+|fret\s+|at\s+)?(?<n2>\d{1,2})\b[^.?!]*?(?:song\s+(?:is\s+)?in\s+|key\s+(?:is\s+|of\s+)?|in\s+)(?<key2>[A-Ga-g][b#♭♯]?)(?:\s+(?<qual2>major|minor|maj|min))?\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);
// Pattern B: "<shape> shape with capo <N>" → SOUNDING // Shape-side anchor: "<note> shape" or "play a <note> shape" or "<note>m shape" private static readonly Regex ShapeToSounding = new(@"\b(?:play(?:ing)?\s+(?:a\s+|an\s+)?)?(?<shape>[A-Ga-g][b#♭♯]?m?)\s+shape\b[^.?!]*?\bcapo\s+(?:on\s+|fret\s+|at\s+)?(?<n>\d{1,2})\b" + @"|" + @"\bcapo\s+(?:on\s+|fret\s+|at\s+)?(?<n2>\d{1,2})\b[^.?!]*?\b(?:play(?:ing)?\s+(?:a\s+|an\s+)?)?(?<shape2>[A-Ga-g][b#♭♯]?m?)\s+shape\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);El programa le hace a la skill sus 10 prompts de ejemplo y compara cada respuesta con lo que pide el prompt: la forma que hay que tocar o el acorde que suena.
== CapoSkill's example prompts: what each asks, and the answerprompt asks answer verdictWhat shape do I play in E with capo 4 shape C shape C rightSong is in E, what chord shape with capo on 4 shape C shape C rightCapo on 3, song in G, what shape shape E shape E rightI play a C shape with capo 3 — what does it sound like sounds Eb sounds D# right, theoretical spellingWhat does a G shape sound like with capo 2 sounds A sounds A rightCapo on 5, song in A shape E shape E rightIf I capo on 2 and play an Em shape, what's the sounding chord sounds F#m sounds F#m rightWhat's the sounding key if I play in G with capo on 5 sounds C shape D wrong directionCapo 7, D shape — sounding chord sounds A sounds A rightWhat chord shape for B major with capo 4 shape G declined declined== Other phrasingsprompt asks answer verdictsong in Em, capo 2, what shape shape Dm declined declinedsong in E minor, capo 2, what shape shape Dm shape Dm rightWhat shape do I play in e with capo 4 shape C shape C rightwhat shape for F with capo 3 shape D declined declinedcapo on 3 in G, what shape shape E shape E rightCapo on 2, song in F#, what shape shape E shape D# wrong chordsong in C#, capo 4, what shape shape A shape G# wrong chordsong in B♭, capo 1, what shape shape A shape A# wrong chordI'm in a band, capo 2, song is in G shape F shape G wrong chordPlaying in D with capo 2, what key does it sound in? sounds E shape C wrong directionI play a C7 shape with capo 3, what does it sound like sounds Eb7 declined declinedwhat does a Cmaj7 shape sound like with capo 2 sounds Dmaj7 declined declinedcapo 2, Dsus4 shape, what chord do I hear sounds Esus4 declined declined- El sentido de la pregunta lo decide la formulación, no lo que se pregunta. Salvo que la pregunta nombre una forma, una tonalidad detrás de “in” se toma por la tonalidad que suena, y la skill responde con la forma que hay que tocar. Su propio ejemplo “What’s the sounding key if I play in G with capo on 5” (¿en qué tonalidad suena si toco en G con la cejilla en el traste 5?) recibe la forma D en lugar de lo que suena, C, y lo mismo le pasa a “Playing in D with capo 2, what key does it sound in?” (si toco en D con la cejilla en el traste 2, ¿en qué tonalidad suena?).
- El artículo “a” se lee como la tonalidad A. Las dos expresiones no distinguen mayúsculas de minúsculas, así que en “I’m in a band, capo 2, song is in G” (toco en un grupo, cejilla en el 2, la canción está en G) al primer “in” le sigue “a”, y la skill responde con la forma para A.
- Una tonalidad con sostenido o bemol sin “major” ni “minor” detrás se lee como su sola letra. La tonalidad termina en
\b, un límite de palabra.#,♯y♭no son caracteres de palabra, así que detrás de ellos el límite falla, y la expresión retrocede hasta quedarse con la letra sola. “Capo on 2, song in F#” recibe la forma D♯ en lugar de E, “song in C#, capo 4”, G♯ en lugar de A, y “song in B♭, capo 1”, A♯ en lugar de A.bes una letra, así que “Bb” se lee entero. La lección 7 decía que esta skill y la de afinaciones aceptan♭y♯: sus expresiones prevén los dos signos, pero aquí los pierden. Con “major” o “minor” detrás de la tonalidad, el límite cae después de la palabra, y por eso la cuadrícula del curso, más abajo, se lee bien. - La skill rechaza lo que sus expresiones no prevén. Una tonalidad tiene que ir detrás de “in” o de “key”, así que se rechaza “What chord shape for B major with capo 4” (¿qué forma de acorde para B mayor con la cejilla en el traste 4?), uno de sus propios ejemplos. Una tonalidad menor tiene que escribirse con la palabra, así que se rechaza “song in Em”. Una forma es una letra, una alteración y una
mopcional, así que se rechazan las formas C7, Cmaj7 y Dsus4.
La grafía de las respuestas
Sección titulada «La grafía de las respuestas»La skill escribe su respuesta con sostenidos, salvo que la tonalidad o la forma que ha leído lleve un bemol o, si se trata de una forma, que la pregunta diga “flat” (líneas 178-191):
/// <summary> /// Pick the enharmonic spelling that matches the user's preferred side. /// If the user said "Eb major" → flats. If "F# major" → sharps. /// Default: sharps (guitarist convention). /// </summary> private static string SpellPc(int pc, bool preferFlats) => preferFlats ? FlatNames[((pc % 12) + 12) % 12] : SharpNames[((pc % 12) + 12) % 12];
private static bool KeyIsFlat(string keyRaw) => keyRaw.IndexOf('b') >= 0 || keyRaw.IndexOf('♭') >= 0;
private static bool ShapeIsFlat(string shapeRaw, string fullMessage) => shapeRaw.IndexOf('b') >= 0 || shapeRaw.IndexOf('♭') >= 0 || fullMessage.Contains("flat", StringComparison.OrdinalIgnoreCase);El programa pregunta por las 30 tonalidades, mayores y menores, que se escriben con una armadura, con la cejilla en los trastes 1 a 11, y luego por las ocho formas abiertas con la cejilla en los mismos trastes. Marca una respuesta como right, theoretical spelling (correcta, grafía teórica) cuando la nota es correcta pero la tonalidad o el acorde que nombra no se escribe con ninguna armadura, como D♯ mayor:
== "Song is in <key>, what shape with capo <fret>": 30 keys, frets 1 to 11key prompts right right, theoretical spelling wrong declinedmajor 165 127 27 (A# D# G#) 0 11 (Cb)minor 165 159 6 (Dbm Gbm) 0 0the answers' "an Am shape at capo N would sound as …m": 319, a wrong chord 0, a theoretical minor key 16== "What does a <shape> shape sound like with capo <fret>": the eight open shapes, frets 1 to 11shape prompts right wrong declined right, theoretical spellingC 11 8 0 0 3, capo 3: D#, 8: G#, 10: A#A 11 8 0 0 3, capo 1: A#, 6: D#, 11: G#G 11 8 0 0 3, capo 1: G#, 3: A#, 8: D#E 11 8 0 0 3, capo 4: G#, 6: A#, 11: D#D 11 8 0 0 3, capo 1: D#, 6: G#, 8: A#Am 11 11 0 0 0Em 11 11 0 0 0Dm 11 11 0 0 0- La aritmética nunca falla. En las dos cuadrículas, ninguna respuesta da un acorde equivocado.
- La grafía, a menudo sí. 27 formas de la cuadrícula mayor, y 3 de las 11 respuestas para cada forma abierta mayor, son A♯, D♯ o G♯ mayor, que un manual escribe B♭, E♭ y A♭. El propio comentario de la clase dice que una forma de C con la cejilla en el traste 3 suena como E♭ (línea 13); la skill responde D♯. Una tonalidad menor escrita con bemoles da su forma en bemoles: D♭m y G♭m, que un manual escribe C♯m y F♯m.
- Se rechaza C♭ mayor. La tabla de fundamentales no tiene C♭ (líneas 67-76), aunque su armadura tiene siete bemoles.
Dónde poner la cejilla
Sección titulada «Dónde poner la cejilla»La pregunta que un guitarrista se hace primero es la inversa: dónde poner la cejilla para tocar en una tonalidad con las formas abiertas C, A, G, E y D. La aritmética es la misma, hecha al revés. El programa la hace para las 12 tonalidades y lista los trastes del 0 al 7 que dan una forma abierta:
== "Where should I put the capo to play in <key> with open chords?"key frets 0 to 7 that give an open shape: C A G E D the skill's answerC 0 C, 3 A, 5 G declinedDb 1 C, 4 A, 6 G declinedD 0 D, 2 C, 5 A, 7 G declinedEb 1 D, 3 C, 6 A declinedE 0 E, 2 D, 4 C, 7 A declinedF 1 E, 3 D, 5 C declinedF# 2 E, 4 D, 6 C declinedG 0 G, 3 E, 5 D, 7 C declinedAb 1 G, 4 E, 6 D declinedA 0 A, 2 G, 5 E, 7 D declinedBb 1 A, 3 G, 6 E declinedB 2 A, 4 G, 7 E declined- La skill rechaza las 12. Las dos expresiones necesitan un número de traste en la pregunta.
Las afinaciones
Sección titulada «Las afinaciones»AlternateTuningsSkill lee el nombre de una afinación con nueve expresiones, una por cada afinación de su tabla (líneas 53-74), y responde con las seis notas, empezando por la cuerda grave, y con lo que se mueve cada cuerda respecto a la afinación estándar:
private static readonly (Regex Pattern, string Key)[] TuningPatterns = [ // DADGAD — contiguous or hyphenated (new Regex(@"\b(?:dadgad|d-a-d-g-a-d)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "dadgad"), // Drop D — but NOT "double drop D" (new Regex(@"(?<!\bdouble\s)(?<!\bdouble-)\bdrop[\s-]?d\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "drop-d"), // Double drop D (new Regex(@"\bdouble[\s-]?drop[\s-]?d\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "double-drop-d"), // Drop C — the (?![#b]) rejects "drop C#" / "drop Cb", which are // different tunings not in this table (better no match than a wrong one). (new Regex(@"\bdrop[\s-]?c\b(?![#b])", RegexOptions.IgnoreCase | RegexOptions.Compiled), "drop-c"), // Open G (new Regex(@"\bopen[\s-]?g\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "open-g"), // Open D (new Regex(@"\bopen[\s-]?d\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "open-d"), // DGCGCD (Sonic Youth / Pink Floyd style) (new Regex(@"\bdgcgcd\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "dgcgcd"), // Half step down (new Regex(@"\bhalf[\s-]?step[\s-]?down\b|\beb\s+standard\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "half-step-down"), // Whole step down (new Regex(@"\bwhole[\s-]?step[\s-]?down\b|\bd\s+standard\b", RegexOptions.IgnoreCase | RegexOptions.Compiled), "whole-step-down"), ];== AlternateTuningsSkill's example prompts: the tuning each one getsprompt answer verdictwhat is DADGAD tuning DADGAD rightwhat's drop D tuning Drop D righthow do I tune to drop C Drop C rightdrop C tuning notes Drop C righthow do I tune to open G Open G rightopen D tuning notes Open D rightwhat is double drop D tuning Double Drop D rightwhat's half step down tuning Half-step down (Eb standard) rightwhole step down tuning notes Whole-step down (D standard) rightDGCGCD tuning explained DGCGCD righthow is DADGAD different from standard DADGAD rightwhat tuning is Eb Ab Db Gb Bb Eb Half-step down (Eb standard) right== The nine tunings of the skill's table: notes and moves from standard, against a textbooktuning notes moves from standard as a textbookDADGAD D A D G A D -2st same same same -2st -2st rightDrop D D A D G B E -2st same same same same same rightDouble Drop D D A D G B D -2st same same same same -2st rightDrop C C G C F A D -4st -2st -2st -2st -2st -2st rightOpen G D G D G B D -2st -2st same same same -2st rightOpen D D A D F# A D -2st same same -1st -2st -2st rightDGCGCD D G C G C D -2st -2st -2st same +1st -2st rightHalf-step down (Eb standard) Eb Ab Db Gb Bb Eb -1st -1st -1st -1st -1st -1st rightWhole-step down (D standard) D G C F A D -2st -2st -2st -2st -2st -2st right- La tabla es correcta. Los 12 ejemplos reciben su afinación, y las notas y los cambios de las nueve afinaciones son los de un manual.
Una afinación dada por sus notas
Sección titulada «Una afinación dada por sus notas»Cuando no coincide ningún nombre, la skill lee las seis primeras notas de la pregunta y busca en su tabla una afinación con la misma grafía (líneas 203-211, líneas 228-238):
private static string[]? TryParseSixNoteTuning(string msg) { var matches = Regex.Matches(msg, @"\b[A-Ga-g][b#♭♯]?\b"); if (matches.Count < 6) return null; // Take the first 6 — accept that if the user mentions extra pitches // elsewhere in the prompt we might pick up garbage. Common phrasings // tend to put the 6 notes right next to each other. var arr = new string[6]; for (var i = 0; i < 6; i++) arr[i] = NormalizeNote(matches[i].Value); return arr; }El programa pregunta “what tuning is …” (¿qué afinación es…?) con las notas de las nueve afinaciones, de la afinación estándar y de la estándar en E♭ escrita con sostenidos, en cuatro notaciones: ASCII, ♯ y ♭, guiones entre las notas, y minúsculas. Espera la afinación de la tabla con las mismas alturas o, si ninguna las tiene, las notas de la pregunta:
== "what tuning is …" with the six notes, at the pin: the tuning each notation getstuning ASCII ♯ and ♭ hyphens lower caseDADGAD right right right rightDrop D right right right rightDouble Drop D right right right rightDrop C right right right rightOpen G right right right rightOpen D other notes other notes other notes other notesDGCGCD right right right rightHalf-step down (Eb standard) right other notes right rightWhole-step down (D standard) right right right rightstandard right right right rightEb standard, in sharps another tuning another tuning another tuning another tuningquestions 44: answered with the tuning asked or its notes 35, with another named tuning 4, other answers 5 Open D, every notation: no name, reads D A D F A D Half-step down (Eb standard), ♯ and ♭: no name, reads E A D G B E Eb standard, in sharps, every notation: Whole-step down (D standard)- La expresión pierde los sostenidos, y los bemoles escritos
♭. Termina en\b, igual que la tonalidad en la skill de cejilla. F♯ se lee como F, así que las notas de open D, D A D F♯ A D, se leen como D A D F A D, que no coinciden con ninguna afinación, en ninguna de las notaciones. E♭ A♭ D♭ G♭ B♭ E♭ se lee como E A D G B E, la afinación estándar, que la skill no nombra. - La estándar en E♭ escrita con sostenidos recibe el nombre de Whole-step down. D♯ G♯ C♯ F♯ A♯ D♯ se lee como D G C F A D, una afinación un semitono más grave en cada cuerda, y la respuesta da su nombre y su tabla.
- En
main, la lectura de las seis notas es la del commit fijado, yGaMainimprime la misma tabla.
Afinaciones fuera de la tabla
Sección titulada «Afinaciones fuera de la tabla»El programa pregunta por diez afinaciones por su nombre, fuera de la tabla o escritas con una alteración, y compara las notas de la respuesta con las de la afinación pedida:
== Tunings outside the table, at the pinprompt asks for answer verdictwhat is open D minor tuning D A D F A D Open D: D A D F# A D another tuningwhat is open G minor tuning D G D G Bb D Open G: D G D G B D another tuningwhat is open E tuning E B E G# B E declined declinedwhat is open C tuning C G C G C E declined declinedwhat is drop B tuning B F# B E G# C# declined declinedwhat is C standard tuning C F Bb Eb G C declined declinedwhat is drop C# tuning C# G# C# F# A# D# declined declinedwhat is drop C♯ tuning C# G# C# F# A# D# Drop C: C G C F A D another tuningwhat is drop D♭ tuning Db Ab Db Gb Bb Eb Drop D: D A D G B E another tuningwhat is standard tuning E A D G B E declined declined"What does an Em shape look like in drop-D": Drop D, the answer names Em: no== Tunings outside the table, on mainprompt asks for answer verdictwhat is open D minor tuning D A D F A D Open D: D A D F# A D another tuningwhat is open G minor tuning D G D G Bb D Open G: D G D G B D another tuningwhat is open E tuning E B E G# B E declined declinedwhat is open C tuning C G C G C E declined declinedwhat is drop B tuning B F# B E G# C# declined declinedwhat is C standard tuning C F Bb Eb G C declined declinedwhat is drop C# tuning C# G# C# F# A# D# declined declinedwhat is drop C♯ tuning C# G# C# F# A# D# declined declinedwhat is drop D♭ tuning Db Ab Db Gb Bb Eb declined declinedwhat is standard tuning E A D G B E declined declined"What does an Em shape look like in drop-D": Drop D, the answer names Em: no- Open D minor recibe open D, y open G minor, open G. La expresión de open D se detiene en la
d, y el “minor” que sigue no se lee. La respuesta da F♯ donde el guitarrista pidió F, y B donde pidió B♭. - En el commit fijado, “drop C♯” recibe drop C, y “drop D♭”, drop D. La expresión de drop C del commit fijado excluye un
#o unaben ASCII detrás de su letra, pero no♯ni♭, y la de drop D no hace esa comprobación. Enmain, las expresiones de drop D, double drop D, drop C, open G y open D excluyen los cuatro signos, y la skill rechaza las dos preguntas (líneas 57-67 enmain). - Las afinaciones fuera de la tabla se rechazan, como quiere el comentario de drop C: “better no match than a wrong one” (mejor ninguna coincidencia que una equivocada). La afinación estándar es una de ellas.
- El comentario de la clase promete una respuesta que el código no da. Cita “What does an Em shape look like in drop-D” (¿cómo queda una forma de Em en drop D?) con “caveat about altered low E string” (advertencia sobre la cuerda E grave alterada) (línea 15). La skill responde con la tabla de drop D, que no nombra Em.
Hasta dónde llega el curso
Sección titulada «Hasta dónde llega el curso»- No se ejecutan ni el enrutador ni el modelo. Saber qué intención elige el enrutador para estas preguntas en producción necesita los embeddings (por verificar).
- La grafía teórica es la prueba del curso: una tonalidad o un acorde, mayor o menor, que con esa fundamental y esa cualidad no tiene armadura. Un guitarrista que lee una hoja de acordes puede aceptar A♯ por B♭; una armadura, no.
- La skill de cejilla solo se ejecuta en el commit fijado. En
main,CapoSkilldifiere en el indicadorDeclinedde su rechazo, según se lee en el diff.
Comunicado upstream
Sección titulada «Comunicado upstream»- Se comunicaron después de escribir esta lección: en la issue de GA #787, el sentido de la pregunta, las alteraciones, los rechazos y la grafía de la skill de cejilla, y su
CanHandle; en la #788, la lectura de las seis notas por la skill de afinaciones, las afinaciones abiertas menores y la advertencia prometida para drop D.
Ejercicios
Sección titulada «Ejercicios»- ¿Por qué se rechaza “song in Em, capo 2, what shape”? ¿Qué responde la skill del commit fijado a “song in E min, capo 2, what shape”?
- ¿Cómo puede un guitarrista obtener B♭ en lugar de A♯ al preguntar “What does an A shape sound like with capo 1”?
- En el commit fijado, ¿qué responde la skill de afinaciones a “what tuning is D A D Gb A D”? ¿Cuál de sus dos pasos le impide nombrar open D?
- En el commit fijado, ¿por qué se rechaza “what is drop Db tuning”, mientras que “what is drop D♭ tuning” recibe drop D?
Soluciones
- Detrás de la tonalidad, la expresión pide un límite de palabra, o un espacio y uno de
major,minor,majomin. “Em” es una sola palabra, así que el límite falla entre E y m, y la pregunta se rechaza. “song in E min, capo 2, what shape” recibe la forma Dm. Comprobado ejecutando la skill del commit fijado, fuera de la salida esperada del curso. - Con la palabra “flat” en cualquier parte de la pregunta, por ejemplo “What does an A shape sound like with capo 1, in flats”: para una forma, la skill escribe bemoles cuando la pregunta contiene “flat”, y responde B♭. Comprobado ejecutando la skill del commit fijado, fuera de la salida esperada del curso.
- Ningún nombre, con las notas D A D Gb A D. Aquí la lectura es completa, porque
bes una letra, peroNotesMatchcompara grafías: G♭ no es F♯. Comprobado ejecutando la skill del commit fijado, fuera de la salida esperada del curso. - En ASCII,
bes una letra, así que no hay límite de palabra entreDyb, y la expresión de drop D no coincide. Tampoco hay seis notas, así que la skill rechaza la pregunta.♭no es un carácter de palabra, así que entreDy♭sí hay límite, y la expresión coincide. Comprobado ejecutando la skill del commit fijado, fuera de la salida esperada del curso.
Puntos clave
Sección titulada «Puntos clave»- Una respuesta aritmética se puede comprobar contra un manual prompt a prompt: aquí, cada tonalidad que tiene armadura, en cada traste, y 44 afinaciones dadas por sus notas.
- Una expresión que lee una tonalidad tiene que tomar la alteración junto con la letra:
\bdetrás de#,♯o♭falla, y la expresión se queda con la letra. - Una skill que deduce el sentido de la pregunta de su formulación responde a la pregunta contraria cuando cambia la formulación.
- La grafía forma parte de la respuesta: D♯ y E♭ son el mismo traste, no la misma tonalidad.
- Una skill que no necesita modelo debería poder alcanzarse sin él.
Fuentes
Sección titulada «Fuentes»- GuitarAlchemist/ga en
a826864:Common/GA.Business.ML/Agents/Skills/CapoSkill.cs,Common/GA.Business.ML/Agents/Skills/AlternateTuningsSkill.cs,Common/GA.Business.Core.Orchestration/Plugins/GaPlugin.cs. - GuitarAlchemist/ga en
f4f5b4a: las mismas dos skills,Common/GA.Business.ML/Agents/Intents/SemanticIntentRouter.cs,Common/GA.Business.Core.Orchestration/Intents/OrchestratorSkillIntent.cs. - Los programas del curso:
code/ga-ai/GaAi/Lesson17.cs,code/ga-ai/GaMain/Program.cs,code/ga-ai/Shared/TuningsProbe.cs.