
Por qué la transcripción con IA malinterpreta los términos técnicos (y cómo lo arreglamos)
Una sesión en vivo entendió "what is the pointer in C++" como "what is the point in life". Este es el rastro forense desde esa transcripción hasta GeekBye v2.0.11: sesgo por keyterms, una condición de carrera que tiraba la conexión y el día en que nuestro propio arreglo salió al revés.
El 2 de julio hicimos una sesión de prueba y le preguntamos a GeekBye en voz alta una pregunta sencilla: "What is the pointer in C++?" ("¿qué es el puntero en C++?").
La transcripción en vivo respondió con poesía:
[23:16:37] You: Tell me, what is the point in life? [23:16:52] You: Handy Plus. [23:17:02] You: What the pointer in Plus Plus? [23:17:09] You: C.
Misma sesión, y las métricas de salud contaban el resto: 3 conexiones de transcripción caídas en 163 segundos y un agujero de 51 segundos en la transcripción. Y una pista más que acabó siendo la que más importaba: nuestro pase de recuperación posterior a la sesión —que vuelve a transcribir el audio guardado localmente para rellenar huecos— dejó la frase casi bien: "a pointer in plus, plus? What the pointer in plus, plus C++."
El audio estaba bien. El modelo en vivo simplemente no tenía motivos para esperar C++.
Esta es la historia de GeekBye v2.0.11, contada a partir de las transcripciones y los logs de producción reales.
Por qué los modelos de voz malinterpretan tu vocabulario
El reconocimiento de voz es un problema de predicción. Ante un audio ambiguo, el modelo elige las palabras más probables, y para un modelo de propósito general, "point in life" (el sentido de la vida) es una frase mucho más probable que "pointer in C++" (el puntero en C++). Cualquier ingeniero que haya visto la transcripción de una reunión convertir Kubernetes en "cube and eddies" conoce este fallo.
La solución no es un micrófono mejor. Es el sesgo por keyterms: decirle al modelo, antes de que empiece la sesión, qué palabras improbables son probables para ti. Nuestro proveedor de voz admite hasta 50 términos de sesgo por sesión. Y aquí viene la parte embarazosa: la fontanería para esos términos existía de extremo a extremo en nuestro stack —cliente, backend, proveedor— y nada la había poblado jamás. Todas las sesiones corrían con cero ayuda de dominio.
Arreglo 1: tu perfil se convierte en el vocabulario del modelo
GeekBye ya conoce tu dominio: está en tu perfil activo. v2.0.11 deriva keyterms de sesgo del nombre y la descripción del perfil: términos con símbolos (C++, Node.js), acrónimos (SQL, AWS), nombres en camel case (TypeScript, PostgreSQL) y nombres propios. Un perfil que mencione tu stack ahora hace que ese stack sea esperado en lugar de exótico.
El día en que el arreglo lo empeoró todo
Nuestra primera versión trataba cada palabra con mayúscula inicial como un nombre propio. En una build interna de prueba (esto nunca llegó a los clientes), un perfil escrito en prosa envió al modelo esta lista de sesgo:
Senior, Writing, Direct, For, Includes, Write, Role, Intent…
Sesgar un modelo de voz hacia la palabra "For" es peor que no sesgarlo en absoluto. En la siguiente sesión de prueba, la palabra "speak" —pronunciada con claridad, varias veces— volvió como "Clicky", "Hey, Vicky" y "Peter Paderty". La lección nos costó una tarde: sesgar solo con términos distintivos. Las palabras con mayúscula inicial ahora solo cuentan cuando aparecen en mitad de una frase (una señal genuina de nombre propio); los encabezados de markdown, donde todas las palabras van en mayúscula, nunca contribuyen. Ese mismo perfil ahora deriva exactamente LinkedIn, AI, CEO, MCP, y la sesión de validación transcribió correctamente audio multilingüe con cambios rápidos de idioma durante 199 segundos seguidos, 189 segmentos de transcripción, cero errores.
Arreglo 2: la carrera que tiraba las conexiones
Los keyterms explicaban las palabras mal oídas. No explicaban las tres conexiones caídas.
Esa pista llevó a algo más sutil. Nuestro proveedor hace commit (finaliza) la transcripción según su propia detección de actividad de voz, alrededor de un segundo después de entrar el silencio. Nuestro cliente también envía un commit de seguridad a los 250 milisegundos de silencio, para vaciar cualquier frase parcial colgada. La confirmación del proveedor de que ya hizo commit tarda de uno a tres segundos en volver. Haz la cuenta con esos tres números: siempre que el proveedor hacía commit primero, nuestro commit de seguridad se disparaba contra un búfer casi vacío, y la respuesta del proveedor no era un simple rechazo educado. Tiraba la conexión. Cada pausa al hablar era lanzar una moneda al aire.
v2.0.11 incluye dos capas contra esto:
- En la app: cuando llega una transcripción confirmada, el cliente ahora sabe que el búfer del proveedor acaba de vaciarse y se salta el commit de seguridad redundante.
- En nuestro backend, el mismo día: el proxy que se sitúa entre la app y el proveedor replica exactamente la contabilidad de audio del proveedor —ve cada frame de audio y cada confirmación de commit con latencia cero— y sencillamente se niega a reenviar cualquier commit que el proveedor rechazaría. Esta capa protege a todas las versiones del cliente a la vez, incluidos los usuarios que no han actualizado.
Lo vimos funcionar en producción en menos de una hora. La salvaguarda interceptó commits condenados que llevaban 178 ms y 256 ms de audio en búfer; cada uno de ellos, antes de ese día, habría sido una conexión caída garantizada y un hueco en las notas de reunión de alguien. Una sesión continua de 60 minutos esa tarde registró cinco intercepciones y cero caídas. Antes del arreglo, esa misma mañana un usuario real había reiniciado su grabación cinco veces en seis minutos peleándose exactamente con este bug.
Dos arreglos menores que acompañan a esta versión
Los insights de IA ahora esperan a que haya sustancia. Aquellos fragmentos ininteligibles del principio alimentaban los chips de sugerencias en vivo de GeekBye, que producían con toda confianza temas como "Defining Life's Ultimate Purpose" ("definiendo el propósito último de la vida") a partir de una pregunta de C++ mal oída. Las sugerencias ahora esperan a que la sesión tenga masa conversacional real.
El texto recuperado recibe el hablante correcto. El pase de recuperación que transcribió bien nuestra pregunta de C++ la había atribuido a "Them". La línea de tiempo del audio guardado localmente ahora registra quién estaba hablando, de modo que los segmentos recuperados se atribuyen correctamente a You o Them.
El marcador
| Métrica (medida, no estimada) | Antes | Después de v2.0.11 + salvaguarda de backend |
|---|---|---|
| Caídas de conexión en la sesión de prueba | 3 en 163s | 0 |
| Mayor agujero en la transcripción | 51s | ~6s de hueco máximo en validación |
| "pointer in C++" | "point in life" | correcto, con vocabulario sesgado |
| Commits condenados que llegaban al proveedor | todos | 0 (interceptados en el backend) |
Si estás construyendo sobre APIs de voz en tiempo real
Tres lecciones transferibles de esta versión:
- Alimenta la función de sesgo. Si tu proveedor de STT admite keyterms o phrase hints, poblarlos con un vocabulario pequeño y distintivo es la mejora de precisión más barata que existe; poblarlos con palabras comunes es una pérdida de precisión.
- Nunca compitas contra la máquina de estados del propio proveedor desde el lado equivocado de un viaje de ida y vuelta por la red. Nuestro cliente no podía ganar una carrera de información de 250 ms contra 3 s. La salvaguarda debe vivir donde convergen ambas señales: en nuestro caso, el proxy del backend.
- Valida con una build real antes de publicar. La regresión de los keyterms se detectó porque cada versión de GeekBye se prueba como build firmada y notarizada contra producción antes de publicarse. La versión mala existió durante unas horas en una máquina interna, no en tu Mac.
GeekBye v2.0.11 ya está disponible; si estás en v2, ya lo tienes vía actualización automática. Para el trabajo de fiabilidad sobre el que se apoya esta versión, consulta por qué tu notetaker de IA se detiene con un Wi-Fi malo y qué cambió en GeekBye v2. Para saber cómo funciona la transcripción en vivo en el día a día, empieza por transcripción en tiempo real en GeekBye.

