Correcta, pero inútil
La accesibilidad es que una función la pueda usar gente con necesidades distintas. Importa porque una respuesta correcta que nadie puede usar sigue siendo un fallo.
El chat de un banco da una respuesta correcta en un párrafo largo de palabras difíciles. Un cliente lee despacio. Otra usa un lector de pantalla. Un tercero tiene mala cobertura y espera diez segundos.
Al final de esta lección
Nota
Puedo hacer que una función de IA la pueda usar gente con necesidades distintas.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Lector de pantalla | un programa que lee una página en voz alta | |
| Lenguaje claro | frases cortas y palabras de cada día | |
| Jerga | una palabra difícil que solo conocen los expertos | posteriormente |
| Tiempo de lectura | lo que tarda en leerse una respuesta | |
| Alternativa | otra manera de hacer el mismo trabajo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El lenguaje claro se puede medir con reglas
El lenguaje claro no es una sensación. Puedes fijar reglas. Ninguna frase de más de 12 palabras. Ninguna palabra de una lista corta de jerga. Ninguna respuesta de más de 40 palabras.
Una regla se puede pasar por cada respuesta grabada. Las que la incumplen son las que hay que reescribir.
El tiempo, la espera y otras vías
Calcula el tiempo de lectura: palabras por 60, entre palabras por minuto. Una respuesta de 40 palabras a 120 por minuto tarda 20 segundos. Quien lee despacio necesita más.
Muestra una espera visible cuando la respuesta tarda, y deja que la persona la detenga. Ofrece una alternativa al chat: un botón, un formulario o un teléfono.
Un error frecuente
Advertencia
Mucha gente cree que la accesibilidad solo trata de la discapacidad, así que puede esperar. Trata de todos: una persona cansada, quien empieza a leer, una mala cobertura. Aplica las reglas a cada respuesta y ofrece otra vía, no solo un cuadro de chat.
Escribe el ayudante del modelo, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Los tokens de una respuesta, o null si no trae ninguno.' 'function count(data, name) {' ' return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el ayudante del modelo, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' ' try {' ' const res = await fetch(base + \"/v1/chat/completions\", {' ' method: \"POST\",' ' headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' ' body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"estado \" + res.status);' ' const d = await res.json();' ' return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' ' } catch (error) {' ' console.log(\"Muestra grabada: ningún modelo respondió (\" + error.message + \").\");' ' return { text: sample, inTokens: null, outTokens: null, recorded: true };' ' }' '}' 'module.exports = { ask };' >> model.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el revisor de lenguaje claro, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const RULES = { maxSentence: 12, maxWords: 40, jargon: [\"utilizar\", \"posteriormente\", \"parámetro\"], wpm: 120 };' 'const REPLIES = [' ' { id: \"r1\", text: \"Pulsa el botón verde. Luego elige una fecha.\" },' ' { id: \"r2\", text: \"Debe posteriormente utilizar el parámetro del menú para cambiar la fecha antes de confirmar.\" },' ' { id: \"r3\", text: \"Tu pedido va de camino. Debería llegar el viernes. Si no llega, dínoslo y lo revisaremos.\" },' '];' > access.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el revisor de lenguaje claro, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function words(text) {' ' return text.split(\" \").filter(function (w) { return w.length > 0; });' '}' 'function sentences(text) {' ' return text.split(\".\").map(function (s) { return s.trim(); }).filter(function (s) { return s.length > 0; });' '}' >> access.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el revisor de lenguaje claro, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function problems(text) {' ' const out = [];' ' const longest = Math.max.apply(null, sentences(text).map(function (s) { return words(s).length; }));' ' if (longest > RULES.maxSentence) out.push(\"frase larga\");' ' if (words(text).length > RULES.maxWords) out.push(\"demasiado largo\");' ' const hard = words(text.toLowerCase()).filter(function (w) { return RULES.jargon.includes(w); });' ' if (hard.length > 0) out.push(\"palabras difíciles\");' ' return out;' '}' >> access.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el revisor de lenguaje claro, parte 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' for (const r of REPLIES) {' ' const secs = Math.ceil((words(r.text).length * 60) / RULES.wpm);' ' console.log(r.id + \" \" + words(r.text).length + \" palabras, \" + secs + \" s, \" + JSON.stringify(problems(r.text)));' ' }' ' const msg = \"Reescribe con palabras sencillas: Debe posteriormente utilizar el parámetro del menú para cambiar la fecha.\";' ' const reply = await ask([{ role: \"user\", content: msg }], \"Después, usa el menú para cambiar la fecha.\", 30);' ' console.log(\"sencillo: \" + reply.text);' '}' 'main();' >> access.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta el revisor de lenguaje claro
docker exec -w /home/node/project agent node access.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué imprime el Run
| Línea | Qué muestra |
|---|---|
| r1 8 palabras, 4 s, [] | Corta y sencilla, sin problemas |
| r2 14 palabras, 7 s, ["frase larga","palabras difíciles"] | Una frase larga con dos palabras difíciles |
| r3 16 palabras, 8 s, [] | Por debajo de cada límite, así que pasa |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.