Compatibilidad: varias capas, varias preguntas
Actualizar una integración con IA puede implicar cambios distintos que conviene analizar por separado. El SDK es la biblioteca que usa el cliente para comunicarse con un servicio; la API define la interfaz que acepta solicitudes y devuelve respuestas; la configuración puede identificar una versión de API; y el identificador del modelo indica qué modelo se solicita. Estos elementos están relacionados, pero no son intercambiables. Una aplicación puede cambiar de SDK y conservar su versión de API, por ejemplo, o cambiar el identificador de modelo sin modificar la biblioteca. La combinación concreta depende del proveedor y de cómo esté construida la integración.
Por eso, «la actualización funciona» no es una comprobación suficientemente precisa. Hay al menos dos preguntas diferentes. La primera es técnica: ¿el cliente sigue enviando una solicitud aceptada y puede interpretar la respuesta y los errores que recibe? La segunda es funcional: ¿el resultado sigue siendo útil para la tarea de la aplicación? Las pruebas de contrato se ocupan principalmente de la primera. La segunda requiere evaluar el comportamiento de la aplicación y, cuando corresponda, la calidad del modelo.
Un cambio puede superar las verificaciones técnicas y aun así producir una diferencia funcional. También puede ocurrir lo contrario: el texto generado puede parecer correcto en una prueba manual mientras una propiedad del protocolo ya no se interpreta adecuadamente. No conviertas una de esas señales en sustituto de la otra. Registra por separado qué se verificó, con qué evidencia y qué queda pendiente.
La documentación aportada incluye materiales de proveedores sobre integración, migración y novedades. Sirven como punto de partida para localizar información específica, pero los fragmentos disponibles no acreditan un contrato detallado común a todos los proveedores. En consecuencia, esta guía no atribuye campos, tipos, errores ni pasos concretos a una API determinada. Antes de aplicar el procedimiento, completa el inventario con la documentación vigente del servicio que realmente utiliza tu equipo.
Qué capa estás comprobando
Usa esta separación para formular pruebas acotadas. Los nombres de las capas son categorías de análisis; la forma de configurarlas debe confirmarse para cada proveedor.
| Capa | Pregunta de compatibilidad | Qué no demuestra por sí sola |
|---|---|---|
| SDK | ¿La versión instalada permite construir y enviar las operaciones que usa la aplicación? | Que el servicio acepte cualquier solicitud ni que el modelo conserve el mismo comportamiento. |
| API | ¿La solicitud y la respuesta observables siguen el contrato documentado que usa el cliente? | Que el contenido generado sea equivalente o adecuado para el producto. |
| Identificador de modelo | ¿La configuración señala el destino que el equipo pretende usar? | Que dos identificadores produzcan respuestas idénticas. |
| Comportamiento funcional | ¿La aplicación sigue cumpliendo los requisitos de la tarea? | Que el protocolo, el SDK o todos los estados de error estén correctamente cubiertos. |
Inventariar el contrato antes de cambiar nada
Antes de actualizar, registra el estado actual de la integración. Anota el nombre y la versión del SDK instalados, la configuración de API que utiliza el cliente si existe, el identificador de modelo configurado y el componente de la aplicación que realiza la llamada. Incluye también el entorno en el que se ejecuta la prueba: por ejemplo, una configuración de desarrollo o de pruebas. No guardes claves ni otros secretos en el inventario; registra únicamente referencias seguras a la configuración.
A continuación, describe la frontera entre tu aplicación y el servicio. Enumera los campos que la aplicación envía, los tipos que espera para cada uno y qué campos son obligatorios según la documentación consultada. En la respuesta, documenta las propiedades que el cliente realmente lee, sus tipos esperados y cómo trata su presencia o ausencia. No confundas el conjunto completo de datos que un proveedor podría devolver con el subconjunto que tu aplicación necesita consumir.
Haz el mismo ejercicio para los errores documentados y para las respuestas no exitosas que el cliente deba manejar. No conviertas una observación aislada en una regla universal. Si la documentación no especifica una forma, un estado o una condición, anótalo como desconocido o no cubierto, en vez de atribuirle un significado. Esta distinción evita que una prueba local se presente como garantía del proveedor.
Guarda el inventario junto al cambio o en un registro consultable por el equipo. Incluye una fecha de revisión y la referencia documental interna empleada, sin copiar credenciales ni datos de usuarios. El objetivo no es producir una descripción exhaustiva de toda la API: es hacer explícitas las dependencias reales de la aplicación para poder comparar las versiones con un criterio estable.
Inventario mínimo previo a la actualización
Completa estos pasos con datos verificados en la documentación vigente del proveedor y en la configuración de la aplicación.
- 01Anota SDK, versión instalada y ubicación de su configuración.
- 02Registra la configuración de API y el identificador de modelo, si la integración los utiliza.
- 03Enumera los campos de solicitud que el cliente envía y sus tipos esperados.
- 04Enumera las propiedades de respuesta que el cliente consume y cómo trata campos ausentes o inesperados.
- 05Registra únicamente errores y comportamientos que estén documentados o que el equipo haya observado, identificando cuál es cuál.
- 06Marca como pendientes las cuestiones que no puedas confirmar en una fuente primaria vigente.
Pruebas de contrato sin exigir textos idénticos
Una prueba de contrato debe comprobar propiedades observables de la integración, no imponer una frase exacta como requisito general para una respuesta generada. Entre las propiedades que podrían comprobarse, si forman parte del contrato documentado y del uso de la aplicación, están la presencia de un campo requerido, su tipo, la posibilidad de interpretar la respuesta y el tratamiento previsto para un estado de error conocido. Que esas comprobaciones sean apropiadas depende del contrato concreto; no presupongas nombres de campos ni significados que no hayas verificado.
La comparación literal de texto es especialmente frágil cuando el servicio genera contenido. Una variación de redacción no demuestra por sí sola que el protocolo haya cambiado ni que la aplicación haya dejado de cumplir su función. En cambio, una respuesta que ya no puede interpretarse según las propiedades que el cliente requiere sí puede señalar una incompatibilidad técnica. Mantén ambas observaciones en categorías distintas y aplica criterios adecuados a cada una.
Para probar el código que transforma datos, utiliza respuestas controladas. Un doble de prueba o una respuesta sintética permite comprobar de forma repetible qué hace tu cliente ante estructuras definidas por el equipo. Pero una prueba con un doble no demuestra que el servicio real devuelva esa estructura. Para reducir esa incertidumbre, combina las pruebas locales con comprobaciones acotadas contra el servicio en un entorno de prueba, siempre que el acceso y la documentación lo permitan.
El siguiente código es un ejemplo ejecutable de validación de una interfaz interna ficticia. Los nombres y tipos son deliberadamente ilustrativos: no describen la respuesta de un proveedor. La prueba verifica tipos y presencia de propiedades con una respuesta controlada; no realiza llamadas de red ni pretende comprobar la calidad de un modelo. Sustituye esa interfaz por la frontera real de tu adaptador y contrástala con su documentación.
Ejemplo autónomo con la biblioteca estándar de Python. Valida una interfaz interna ficticia y no una API concreta.
import unittest
def validate_response(response):
required = {"request_id": str, "model_ref": str, "content": str}
if not isinstance(response, dict):
raise TypeError("La respuesta debe ser un diccionario")
for field, expected_type in required.items():
if field not in response or not isinstance(response[field], expected_type):
raise ValueError(f"Campo ausente o inválido: {field}")
class ContractTest(unittest.TestCase):
def test_accepts_controlled_response(self):
fixture = {
"request_id": "test-001",
"model_ref": "demo-model",
"content": "respuesta sintética",
}
validate_response(fixture)
if __name__ == "__main__":
unittest.main()
Separar pruebas locales y comprobaciones del servicio
Divide la estrategia por el límite que cada prueba puede observar. Las pruebas unitarias pueden comprobar la construcción de una solicitud y la interpretación de respuestas sintéticas. Las pruebas del adaptador pueden usar dobles para verificar cómo la aplicación reacciona a respuestas controladas. Las comprobaciones contra un servicio real permiten examinar la integración efectiva en las condiciones del entorno de prueba. Ninguna de esas categorías debe presentarse como si cubriera automáticamente las otras.
Mantén los datos sintéticos libres de información sensible. Para las pruebas que llamen al servicio, utiliza una configuración autorizada para pruebas y datos adecuados para ese entorno. Documenta si el resultado depende de disponibilidad externa, configuración o límites que el equipo no controla. No hagas que el éxito de una prueba de estructura dependa de recibir siempre una oración idéntica: comprueba las propiedades del protocolo y deja la evaluación del contenido en un conjunto separado de criterios funcionales.
Una práctica útil es conservar muestras controladas que representen los casos documentados relevantes para el cliente. Para cada muestra, explica qué comportamiento de tu código pone a prueba y cuál es su origen: fixture diseñado por el equipo, respuesta registrada con autorización o caso derivado de documentación. No mezcles esas categorías. Una fixture es una entrada de prueba, no una confirmación de que el proveedor vaya a devolver siempre esa respuesta.
Al comparar la versión anterior con la nueva, ejecuta el mismo conjunto local contra ambas versiones de tu adaptador cuando sea posible. Si una prueba falla, identifica primero el límite afectado: construcción de solicitud, interpretación de respuesta, configuración o llamada real. Después, decide si el fallo revela una incompatibilidad documentada, un supuesto interno que debe actualizarse, una limitación del doble o un problema funcional que merece una evaluación aparte.
Elegir la prueba adecuada
La matriz ayuda a decidir qué conclusión permite extraer cada comprobación. Ajusta las pruebas a los requisitos y a la documentación de la integración concreta.
| Tipo de comprobación | Qué puede validar | Límite de la conclusión |
|---|---|---|
| Unitarias con datos sintéticos | Lógica local, tipos asumidos por el adaptador y tratamiento de fixtures. | No confirma el comportamiento del servicio real. |
| Con dobles de prueba | Reacción del cliente ante respuestas y errores controlados. | No acredita que el proveedor produzca esos casos o estructuras. |
| Contra servicio en entorno de prueba | Que una llamada real funciona bajo la configuración probada. | No demuestra por sí sola todos los casos ni la equivalencia funcional. |
| Evaluación funcional | Si los resultados cumplen criterios de la tarea de la aplicación. | No sustituye las comprobaciones del contrato técnico. |
Revisar la migración y clasificar las diferencias
Antes de modificar dependencias, consulta la guía de migración y las notas de versión pertinentes para el proveedor, el SDK y la API que usas. Comprueba que la documentación corresponde al producto y a la versión examinados. Busca cambios incompatibles, elementos retirados, nombres o tipos modificados, ajustes de configuración y pasos de migración. Si la documentación disponible no aclara un punto, no rellenes el vacío con una suposición: regístralo y pide confirmación o diseña una prueba que permita investigarlo de forma segura.
Clasifica cada diferencia observada según su efecto. Puede ser incompatible si el cliente ya no puede construir la solicitud o interpretar una respuesta necesaria. Puede exigir una adaptación si cambia una expectativa del cliente aunque exista una ruta de migración documentada. Puede ser compatible con la integración técnica y, sin embargo, justificar una evaluación funcional independiente. También puede no afectar al código que usa tu aplicación. La clasificación describe el impacto comprobado, no una propiedad universal de una actualización.
Conserva una comparación legible de la versión anterior y la nueva: configuración, dependencias, resultados de pruebas y cambios aplicados al adaptador. Si una prueba falla, evita eliminarla simplemente para conseguir una ejecución verde. Primero determina si el requisito dejó de ser válido, si el test representaba incorrectamente el contrato o si la integración realmente se rompió. Registra la evidencia y la decisión.
Las fuentes aportadas incluyen una guía de migración del SDK de Python de Agent Platform de Google Cloud, materiales de Microsoft Learn sobre SDK y API REST de Azure Language y novedades de Content Understanding, y una publicación de OpenAI sobre la evolución de su SDK de agentes. Esos títulos identifican documentación pertinente para investigar sus respectivos productos; no bastan para inferir que sus campos, versiones o procesos sean equivalentes, ni para atribuirles detalles técnicos que no están acreditados aquí.
Comparación antes y después
Este proceso limita la comparación a lo que el equipo puede observar y documentar, sin asumir que dos versiones deban producir texto idéntico.
- 01Fija la versión actual y conserva su configuración de prueba.
- 02Lee la documentación de migración y registra los cambios que afectan a componentes realmente usados.
- 03Actualiza la dependencia o configuración en una rama de trabajo y anota cada modificación.
- 04Ejecuta primero las pruebas locales con los mismos datos controlados.
- 05Ejecuta las comprobaciones permitidas contra el servicio de prueba y separa sus resultados de los locales.
- 06Clasifica cada diferencia como incompatibilidad técnica, adaptación necesaria, asunto funcional independiente, diferencia no relevante o incertidumbre pendiente.
Validar en pruebas y desplegar gradualmente
Haz la primera validación en un entorno de prueba cuya configuración sea representativa, pero no exponga datos ni credenciales innecesarios. Comprueba que la dependencia instalada corresponde a la versión prevista y que la configuración de API y el identificador de modelo coinciden con el objetivo de la actualización. Esta comprobación de configuración evita atribuir a un cambio de SDK una diferencia que podría proceder de otra capa.
Define criterios de aceptación antes de ejecutar la prueba. Por ejemplo: que las comprobaciones de estructura acordadas pasen, que el cliente trate los casos documentados cubiertos por la suite, que las pruebas funcionales separadas no muestren un incumplimiento conocido y que las incertidumbres críticas tengan una decisión explícita. No conviertas estos criterios de ejemplo en requisitos universales: selecciona los que correspondan al riesgo y al uso de tu aplicación.
Si el resultado es satisfactorio, planifica un despliegue gradual compatible con la arquitectura y los controles de tu equipo. Observa señales técnicas pertinentes y conserva la posibilidad de volver a la configuración previa. La estrategia concreta depende de cómo se despliegue el producto; no hay un mecanismo único que esta guía pueda prescribir para todos los sistemas. Asegúrate de que el equipo sepa qué cambio se ha desplegado, qué evidencia lo respalda y qué condición motivaría detenerlo o revertirlo.
Cuando no se pueda validar un punto importante —por falta de documentación, acceso a un entorno de prueba o una respuesta verificable—, aplaza la aprobación o registra expresamente la limitación y quién la acepta. La ausencia de un fallo observado no equivale a una prueba completa. Tampoco una llamada real exitosa demuestra que todos los campos, errores y usos de la aplicación sean compatibles.
Lista de aceptación y registro de decisión
Antes de aprobar, revisa que el cambio esté delimitado: versión del SDK, configuración de API y modelo previstos, si aplican, y componentes de la aplicación afectados. Confirma que la documentación de migración consultada pertenece al producto correcto y que sus instrucciones relevantes se han revisado. Si la documentación no responde a una pregunta de contrato, mantenla visible como incertidumbre; no la conviertas en una expectativa de prueba sin respaldo.
Verifica que las pruebas técnicas comprueben propiedades que la aplicación realmente necesita y que el resultado de las pruebas funcionales esté separado. Asegúrate de que los dobles y fixtures estén identificados como controlados, no como respuestas garantizadas del servicio. Registra qué pruebas llamaron al servicio real, bajo qué configuración y qué limitaciones tuvieron. Si un cambio de texto se considera importante para el producto, describe el criterio funcional que lo hace relevante en vez de llamarlo automáticamente una rotura de contrato.
La decisión puede ser aprobar, aplazar o revertir. Aprobar significa que se cumplieron los criterios definidos y que las limitaciones restantes se aceptan explícitamente. Aplazar significa que falta evidencia necesaria o queda un riesgo por resolver. Revertir significa regresar a una configuración anterior cuando el cambio produce un problema que el equipo considera inaceptable. En los tres casos, deja constancia de quién decide, qué observó y qué acción sigue.
Este registro transforma la actualización en una decisión revisable y facilita futuras comparaciones. También permite que otros equipos distingan una incompatibilidad real de una variación de comportamiento o de un límite de cobertura. Para continuar el aprendizaje, el tema puede conectarse con materiales introductorios sobre desarrollo, comparativas de herramientas y descubrimiento de opciones; esa navegación contextual no sustituye la verificación técnica específica.
Decisión de salida
Adapta estos criterios al nivel de riesgo de la integración. Registrar una incertidumbre es preferible a presentarla como resuelta.
| Decisión | Cuándo considerarla | Registro mínimo |
|---|---|---|
| Aprobar | Los criterios acordados pasan y las limitaciones conocidas tienen una decisión explícita. | Versiones, configuración, pruebas ejecutadas, resultados y limitaciones aceptadas. |
| Aplazar | Falta documentación, una prueba relevante o una respuesta a una incertidumbre crítica. | Pregunta pendiente, impacto posible, responsable y evidencia necesaria. |
| Revertir | La actualización causa un problema que supera el umbral aceptado por el equipo. | Cambio revertido, señal observada, alcance afectado y plan de investigación. |
Qué sigue abierto
- Las fuentes aportadas no especifican el proveedor ni las versiones concretas que debe actualizar el lector.
- Los fragmentos disponibles no acreditan campos, tipos, estados de error ni contratos de respuesta de una API concreta.
- Los nombres usados en el ejemplo de Python representan una interfaz interna ficticia, no un esquema de proveedor.
- La aplicabilidad de una guía de migración o de novedades debe confirmarse para el producto y la versión realmente utilizados.
Continúa explorando
Fuentes consultadas
Correcciones y transparencia
Si detectas un dato incorrecto o desactualizado, puedes enviarnos una corrección indicando la página y la fuente que debemos revisar.
Proponer una corrección