sábado, 6 de junio de 2026

Error creando índice tipo VECTOR en Oracle AI Database 26ai- ORA-51962: The vector memory area is out of space for the current container



Estas trabajando con campos tipo vector en Oracle AI Database 26ai y deseas crear un índice de tipo vectorial y recibes un ORA-51962. Qué debes hacer. ?

Primero que todo, un índice vectorial es una estructura de datos especializada que permite localizar rápidamente los vectores más similares a un vector de consulta dentro de un espacio multidimensional, evitando tener que comparar el vector buscado contra todos los vectores almacenados.

En Oracle AI Database 26ai, los índices vectoriales están diseñados para acelerar operaciones de Nearest Neighbor Search (NNS) utilizadas en sistemas de búsqueda semántica, RAG (Retrieval-Augmented Generation), recomendación de contenido, detección de similitud y aplicaciones de inteligencia artificial.

ORA-51962 significa que el Vector Pool del contenedor actual no tiene espacio libre suficiente o que el parámetro que controla esta estructura a nivel del SGA no ha sido configurado.

Oracle AI Database 26ai, no configura valores de facto para el parámetro VECTOR_MEMORY_SIZE. El valor de facto del parámetro es 0.

El error puede dar, ya sea porque el parámetro esta con valor 0 o bien, que el espacio en el "Pool", ha sido agotado.

Una consulta a la vista dinámica de la base de datos v$vector_index, te permite validar como se esta utilizando el espacio del VECTOR POOL.


Puedes también utilizar la siguiente consulta para obtener un mejor detalle de ocupación en MBytes.

SET LINESIZE 220
SET PAGESIZE 100

COLUMN owner              FORMAT A20
COLUMN index_name         FORMAT A35
COLUMN partition_name     FORMAT A25
COLUMN index_organization FORMAT A30
COLUMN distance_type      FORMAT A15
COLUMN allocated_mb       FORMAT 999,999,990.00
COLUMN used_mb            FORMAT 999,999,990.00
COLUMN pct_used           FORMAT 990.00
COLUMN pct_free           FORMAT 990.00

SELECT owner,
       index_name,
       index_organization,
       distance_type,
       index_dimensions,
       num_vectors,
       ROUND(allocated_bytes / 1024 / 1024, 2) AS allocated_mb,
       ROUND(used_bytes      / 1024 / 1024, 2) AS used_mb,
       ROUND((used_bytes / NULLIF(allocated_bytes, 0)) * 100, 2) AS pct_used,
       ROUND((1 - (used_bytes / NULLIF(allocated_bytes, 0))) * 100, 2) AS pct_free,
       index_used_count,
       con_id
FROM   v$vector_index
ORDER  BY pct_used DESC NULLS LAST;

Puedes obtener una versión más resumida de la ocupación de los índices con la siguiente consulta.

SELECT owner,
       index_name,
       SUM(num_vectors) AS total_vectors,
       ROUND(SUM(allocated_bytes) / 1024 / 1024, 2) AS allocated_mb,
       ROUND(SUM(used_bytes)      / 1024 / 1024, 2) AS used_mb,
       ROUND((SUM(used_bytes) / NULLIF(SUM(allocated_bytes), 0)) * 100, 2) AS pct_used
FROM   v$vector_index
GROUP  BY owner, index_name
ORDER  BY pct_used DESC;


Si la situación es que el parámetro no ha sido configurado, debes seguir los siguientes pasos.

Te mostraré como hacer la configuración del parámetro y como luego se puede crear el índice sin inconvenientes.

Detalle importante, el parámetro no es dinámico, por tanto, vas a necesitar reiniciar el contenedor de base de datos.


SQL*Plus: Release 23.26.1.0.0 - Production on Sat Jun 6 22:44:12 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Sat Jun 06 2026 21:41:10 +00:00

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW
ON documentos_pdf (EMBEDDING)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE
WITH TARGET ACCURACY 95
PARAMETERS (
  TYPE HNSW,
  NEIGHBORS 32,
  EFCONSTRUCTION 500
);

ON documentos_pdf (EMBEDDING)
   *
ERROR at line 2:
ORA-51962: The vector memory area is out of space for the current container.
Help: https://docs.oracle.com/error-help/db/ora-51962/

SQL> connect / as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> SHOW PARAMETER vector_memory_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
vector_memory_size                   big integer 0

SQL> alter system set vector_memory_size=1g scope=both;
alter system set vector_memory_size=1g scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-51950: The Oracle Database Vector Memory size cannot be increased.
Help: https://docs.oracle.com/error-help/db/ora-02097/


SQL> alter system set vector_memory_size=1g scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 1.5717E+10 bytes
Fixed Size                  5027392 bytes
Variable Size            1979711488 bytes
Database Buffers         1.2650E+10 bytes
Redo Buffers                8855552 bytes
Vector Memory Area       1073741824 bytes
Database mounted.
Database opened.
SQL> SHOW PARAMETER vector_memory_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ vector_memory_size big integer 1G SQL> connect sh/sh@pdb1 Connected SQL> CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW ON documentos_pdf (EMBEDDING) ORGANIZATION INMEMORY NEIGHBOR GRAPH DISTANCE COSINE WITH TARGET ACCURACY 95 PARAMETERS ( TYPE HNSW, NEIGHBORS 32, EFCONSTRUCTION 500 );
Index created.

Para que sirve este índice.?

índice vectorial HNSW sobre la columna EMBEDDING de la tabla DOCUMENTOS_PDF

para acelerar búsquedas de similitud semántica en Oracle AI Database 26ai.

Veámosla línea por línea:

CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW
ON documentos_pdf (EMBEDDING)
  • Crea un índice llamado IDX_CHUNKS_EMBEDDING_HNSW.
  • El índice se construye sobre la columna EMBEDDING.
  • Dicha columna contiene vectores generados por un modelo de embeddings
  • (texto, imágenes, audio, etc.).

Ejemplo:

[0.125, -0.234, 0.567, ...]

Cada vector representa el significado semántico de un chunk de documento.

ORGANIZATION INMEMORY NEIGHBOR GRAPH

Indica que Oracle utilizará una estructura de datos optimizada para búsquedas

ANN (Approximate Nearest Neighbor).

En lugar de comparar el vector de búsqueda contra todos los registros de la tabla:

Vector Consulta
|
v
Comparar contra 10 millones de vectores

Oracle construye un grafo donde cada vector conoce a sus vecinos más cercanos:

      A
/ | \
B C D
|\/ \|
E----F

La búsqueda "navega" por el grafo hasta encontrar los vectores más similares.

Beneficio:

  • Mucho más rápido.
  • Menor uso de CPU.
  • Escalable a millones de embeddings.

DISTANCE COSINE

Define la métrica de similitud.

Oracle calculará: Cosine Similarity entre el vector buscado y los vectores almacenados.

Matemáticamente:

A · B
-------
|A||B|

Valores:

ResultadoInterpretación
1Idénticos
0.9Muy similares
0.5Relación moderada
0Sin relación

Para RAG y documentos generalmente es la opción más utilizada.

Ejemplo:

Consulta:"¿Qué es Oracle RAC?"

Aunque el documento diga:"Real Application Clusters permite..."

los embeddings tendrán direcciones parecidas y la distancia coseno será pequeña.

WITH TARGET ACCURACY 95

Oracle intentará devolver aproximadamente el 95% de los vecinos que encontraría

una búsqueda exacta.

Existe un compromiso entre:

ExactitudVelocidad
100%Más lenta
95%Muy rápida
90%Más rápida
80%Extremadamente rápida

En RAG normalmente:

90 - 95 %

es un excelente equilibrio.

PARAMETERS

TYPE HNSW

Utiliza el algoritmo:Hierarchical Navigable Small World

Actualmente es uno de los algoritmos ANN más utilizados en sistemas vectoriales modernos.

También es usado en motores como:

  • FAISS
  • Milvus
  • Qdrant
  • OpenSearch

NEIGHBORS 32

También conocido como parámetro M en HNSW.

Indica cuántas conexiones tendrá cada nodo del grafo.

Visualmente:

Vector A
|
+----32 vecinos

Mayor valor: NEIGHBORS 64

  • Más memoria.
  • Índice más grande.
  • Mejor calidad de búsqueda.

Menor valor:NEIGHBORS 16

  • Menor tamaño.
  • Menor precisión.

Valor 32 suele ser una configuración equilibrada.

EFCONSTRUCTION 500

EFCONSTRUCTION 500

Controla la calidad durante la construcción del índice.

Cuando Oracle inserta cada vector:

Nuevo Vector
|
v
Busca 500 candidatos
|
v
Escoge los mejores vecinos

Valores típicos:

ValorCalidad
100Básica
200Buena
500Muy buena
1000Excelente

Con:EFCONSTRUCTION 500

Oracle dedica más trabajo al construir el índice para obtener mejores

resultados posteriormente.

Impacto:

  • Creación más lenta.
  • Índice de mayor calidad.
  • Búsquedas más precisas.

miércoles, 3 de junio de 2026

OLLDA, Oracle Listener Log Discovery and Analyzer por José Valdézio, Oracle ACE Pro.

 


Hola gente


@Jvaldeziodba ha creado una gran herramienta para hacer análisis de los logs generados por el servicio LISTENER de la base de datos.

Cuando pensamos en temas de seguridad, monitoreo, reporteria, regulatorios, etc, siempre nos da un dolor de cabeza enorme, cuando nos piden brindar un informe sobre las conexiones efectuadas a la base de datos, las IP de origen, los programas utilizados, conexiones existosas y fallidas.

OLLDA viene a simplificar todo este análisis de una manera magistral.

He solicitado el visto bueno de su creador José Valdézio, Brasileño; quién es miembro del Programa Oracle ACE, para mostrarles como se configura e instala la herrramienta en un entorno In-House, sin exponer información fuera de organización y para no incumplir normas regulatorias. En esta presentación les voy a ayudar a como interpretar y navegar por las múltiples opciones que pone a disposición la herramienta.

A estar atentos al link de la sesión.

Pueden conocer más sobre este proyecto en: https://lnkd.in/eP4hTpcp o directamente en su blog: https://lnkd.in/eu98juMf

Perfil linkedin: https://lnkd.in/evsfsjGj

ORA-00800: soft external error, arguments, Set Priority Failed, VKTM

Hace unos días atrás experimenté un error poco común.

El Alert de la base de datos mostraba la siguiente información:
adrci> show alert

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************
Output the results to file: /tmp/alert_10232_1404_cdb_1.ado
adrci> exit

Errors in file /opt/app/oracle/diag/rdbms/cdb/cdb/trace/cdb_vktm_14835.trc  (incident=128072) (PDBNAME=CDB$ROOT):
ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Incident details in: /opt/app/oracle/diag/rdbms/cdb/cdb/incident/incdir_128072/cdb_vktm_14835_i128072.trc
Error attempting to elevate VKTM's priority: no further priority changes will be attempted for this process

Al observar la información de referencia de los incidentes, los mismos mostraban el contenido a continuación:
adrci> show incident

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY         CREATE_TIME
-------------------- ------------------- ----------------------------------------
128072               ORA 800             2026-05-27 03:47:30.907000 -06:00
133193               ORA 800             2026-05-27 03:55:48.114000 -06:00
2 rows fetched

adrci> show incident -mode brief

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************

**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
   INCIDENT_ID                   128072
   STATUS                        ready
   CREATE_TIME                   2026-05-27 03:47:30.907000 -06:00
   PROBLEM_ID                    9
   CLOSE_TIME                    
   FLOOD_CONTROLLED              none
   ERROR_FACILITY                ORA
   ERROR_NUMBER                  800
   ERROR_ARG1                    Set Priority Failed
   ERROR_ARG2                    VKTM
   ERROR_ARG3                    Check traces and OS configuration
   ERROR_ARG4                    Check Oracle document and MOS notes
   ERROR_ARG5                    
   ERROR_ARG6                    
   ERROR_ARG7                    
   ERROR_ARG8                    
   ERROR_ARG9                    
   ERROR_ARG10                   
   ERROR_ARG11                   
   ERROR_ARG12                   
   SIGNALLING_COMPONENT          background_proc
   SIGNALLING_SUBCOMPONENT       
   SUSPECT_COMPONENT             
   SUSPECT_SUBCOMPONENT          
   ECID                          
   IMPACTS                       0

**********************************************************
INCIDENT INFO RECORD 2
**********************************************************
   INCIDENT_ID                   133193
   STATUS                        ready
   CREATE_TIME                   2026-05-27 03:55:48.114000 -06:00
   PROBLEM_ID                    9
   CLOSE_TIME                    
   FLOOD_CONTROLLED              none
   ERROR_FACILITY                ORA
   ERROR_NUMBER                  800
   ERROR_ARG1                    Set Priority Failed
   ERROR_ARG2                    VKTM
   ERROR_ARG3                    Check traces and OS configuration
   ERROR_ARG4                    Check Oracle document and MOS notes
   ERROR_ARG5                    
   ERROR_ARG6                    
   ERROR_ARG7                    
   ERROR_ARG8                    
   ERROR_ARG9                    
   ERROR_ARG10                   
   ERROR_ARG11                   
   ERROR_ARG12                   
   SIGNALLING_COMPONENT          background_proc
   SIGNALLING_SUBCOMPONENT       
   SUSPECT_COMPONENT             
   SUSPECT_SUBCOMPONENT          
   ECID                          
   IMPACTS                       0
2 rows fetched
En bases de datos Oracle, el proceso VKTM (Virtual Keeper of Time) es un proceso en segundo plano que actúa como el "reloj maestro" de la instancia. Se encarga de publicar y sincronizar la hora (tanto en segundos como en alta resolución) para evitar llamadas repetitivas al sistema operativo y garantizar un rendimiento óptimo.

En dicho servidor, habíamos experimentado serios problemas de rendimiento con un proceso pesado de cierre nocturno, dejándo el mismo por decirle de alguna manera inciclado. Los jobs de la base de datos no levantaban automáticamente ni manualmente. La primera acción, fue reiniciar el contenedor de base de datos. Cuando aplicamos el procedimiento "clásico" de todo informático, el proceso de cierre de día, concluyó sin inconvenientes y los jobs volvieron a arrancar por cuenta propia sin errores.

Durante la noche de ese mismo día, volvió a repetirse el escenario de la noche anterior. Los jobs estaban abajo nuevamente y no levantaban manualmente.

Para complicar más el tema, los jobs que consumían un dblink a otra base de datos, dejaban bloqueados los objetos involucrados en el proceso, provocando también que los EOD del otro servidor fallaran en su intento por concluir.

El problema se había duplicado.

Revisando nuevamente el alert, revise el detalle de los errores que previamente había visto, pero que no había tenido tiempo para investigar.

Con lo que encontré en el ALERT, procedí a consultar en el MOS y  este apuntaba a 2 posibles causas del error.

La menos probable es que existiera un problema con los permisos de un archivo binario en el $ORACLE_HOME con el nombre oradism.

oradism es una utilidad especializada en segundo plano de Oracle Database en sistemas Unix/Linux que permite al software de Oracle realizar operaciones del sistema operativo que requieren privilegios como el usuario "root", principalmente bloquear/desbloquear la memoria del Área Global del Sistema (SGA) y establecer prioridades de ejecución más altas para procesos críticos

[oracle@asrv_001 ~]$ less /opt/app/oracle/diag/rdbms/cdb/cdb/incident/incdir_128072/cdb_vktm_14835_i128072.trc
[oracle@asrv_001 ~]$ ls -l $ORACLE_HOME/bin/oradism
-rwsr-x---. 1 root oinstall 147848 Apr 17  2019 /opt/app/oracle/product/19c/bin/oradism
[oracle@asrv_001 ~]$ ps -ef | grep vktm
oracle   13493 25178  0 09:32 pts/0    00:00:00 grep --color=auto vktm
oracle   17437     1  0 03:55 ?        00:00:02 ora_vktm_cdb

Lo segundo me dice la nota es que verificara la configuración de un parámetro a nivel de sistema operativo: cpu.rt_runtime_us.

Este es un parámetro del kernel Linux relacionado con la planificación (scheduler) de procesos de tiempo real (Real-Time Scheduling).

Su función es limitar cuánto tiempo de CPU pueden consumir los procesos con políticas de planificación de tiempo real (SCHED_FIFO y SCHED_RR) para evitar que monopolizen completamente los CPUs y bloqueen los procesos normales del sistema.

[oracle@asrv_001 ~]$ exit
logout
[opc@asrv_001 ~]$ sudo -s /bin/bash
[root@asrv_001 opc]# cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
0

El valor "0" indica que los procesos de tiempo real NO pueden ejecutar tiempo de CPU. Sin embargo, en la práctica Oracle Database no utiliza procesos RT, por lo que probablemente no notarás ningún impacto directo, pero ...

Revisando otras publicaciones, encontré que otras personas habían experimientado un problema parecido y habían resuelto seteando el parámetro a un valor de 950000 que por lo general es el valor de facto en servidores con Oracle Database.

Lo hice en caliente primero para ver si sucedía algo malo. 

Como no encontré problemas, procedí a configurar un servicio que se encargará de registrar el cambio cada vez que el sistema reiniciara.
[root@asrv_001 opc]# echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us


[root@asrv_001 opc]# ls -lat /usr/local/bin/
total 24
drwxr-xr-x.  2 root root   49 Mar 17  2023 .
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..

[root@asrv_001 opc]# cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
950000
[root@asrv_001 opc]# cat /usr/local/bin/set_oracle_rt

#!/bin/bash
echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us

[root@asrv_001 opc]# vi /usr/local/bin/set_oracle_rt

[root@asrv_001 bin]# cat /etc/systemd/system/oracle-rt.service
[Unit]
Description=Oracle RT Runtime Fix
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_oracle_rt
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
[root@asrv_001 bin]#

[root@asrv_001 opc]# cd /usr/local/bin/
[root@asrv_001 bin]# ls -lat
total 28
drwxr-xr-x.  2 root root   70 May 27 09:40 .
-rw-r--r--.  1 root root   82 May 27 09:40 set_oracle_rt
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..
[root@asrv_001 bin]# chmod +x set_oracle_rt
[root@asrv_001 bin]# ls -lat
total 28
drwxr-xr-x.  2 root root   70 May 27 09:40 .
-rwxr-xr-x.  1 root root   82 May 27 09:40 set_oracle_rt
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..
[root@asrv_001 bin]# vi /etc/systemd/system/oracle-rt.service
[root@asrv_001 bin]# systemctl daemon-reload
[root@asrv_001 bin]# systemctl enable oracle-rt.service
Created symlink from /etc/systemd/system/multi-user.target.wants/oracle-rt.service to /etc/systemd/system/oracle-rt.service.
[root@asrv_001 bin]# systemctl start oracle-rt.service
[root@asrv_001 bin]# systemctl status oracle-rt.service
● oracle-rt.service - Oracle RT Runtime Fix
   Loaded: loaded (/etc/systemd/system/oracle-rt.service; enabled; vendor preset: disabled)
   Active: active (exited) since Wed 2026-05-27 09:42:27 CST; 38s ago
  Process: 16295 ExecStart=/usr/local/bin/set_oracle_rt (code=exited, status=0/SUCCESS)
 Main PID: 16295 (code=exited, status=0/SUCCESS)

May 27 09:42:27 asrv_001 systemd[1]: Starting Oracle RT Runtime Fix...
May 27 09:42:27 asrv_001 systemd[1]: Started Oracle RT Runtime Fix.
[root@asrv_001 bin]# cat /usr/local/bin/set_oracle_rt
#!/bin/bash
echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
[root@asrv_001 bin]#

Resultado obtenido, desde que configuré el servicio con el seteo del parámetro, no he vuelto a registar el error en la bitácora de la base de datos, ni he tenido problemas con el desempeño del EOD, ni con la inicialización de los JOBS.

Así, que si tienes algo parecido, quizás esta sea la solución.

martes, 2 de junio de 2026

Suma tu empresa como patrocinador y ahgamos un evento inolvidable- LAOUC TOUR 2026 Costa Rica.

 


Hola gente


Después de muchos años, nuevamente estoy involucrado de forma directa en la organización del evento anual de Grupo de Usuarios Oracle de la región Latinoamérica, LAOUC TOUR.

En conjunto con los otros integrantes de las distintas comisiones, estaremos trabajando para hacer de este año, un evento éxitoso y para ellos necesitamos del apoyo de todo el ecosistema Oracle del país.

Mayoristas, Parnters, Desarrolladoras de Software y empresas en general contamos con ustedes para lograr la meta.

A todos ustedes que estén interesados en participar como "PATROCINADORES" del evento, les invito a contactarme a mi cuenta de correo electrónico ronald.vargas.quesada@gmail.com o por mensaje en esta red.

#LAOUCTOUR2026 #OracleCommunity


Un año más dentro del Programa Oracle ACE 2012-2027

 



Un año más continuaré en el Programa Oracle ACE como Oracle ACE Director, nivel que tengo desde el año 2014.
Agradecer a Gerald Venzl Oana-Aurelia Bonu Cassandra Call por el apoyo que nos brindan a todos los miembros a nivel mundial. Sin ustedes, muchas de las cosas no serían posibles.

domingo, 31 de mayo de 2026

Cuál es mi mayor limitación me cuenta chatgpt.?

 

Hola gente. Hace un par de meses atrás, tomé la decisión de dejar "Standby" la subscripción de una herramienta que temporalmente no estaría utilizando y empecé a pagar subscripción en OpenAI. Y en estos 60 días, he comprendido un poco mejor, como utilizar esta herramienta en mi beneficio. Cuando hice la siguiente pregunta, la respuesta me asombró: Porque no cuentas con mayor capacidad para poder comprender en su totalidad y completar por completo la tarea que te solicite. No es un reclamo, es que quiero saber y entender cuales son las limitaciones que actualmente tienes y como puedo ayudarte a ser más eficiente.? Por supuesto que los creados de OpenAI me podrían regañar, por utilizar más palabras de las necesarias y crear un ambiente de reconocimiento de la IA como una entidad individual y con conciencia, algo que sabemos no es así. Pero las respuestas me llevaron a cuestionar por unos momentos, como estoy utilizando la herramienta en sí. En resumen sus puntos de respuesta sin detalles fueron: 1. No tengo acceso a la realidad 2. Mi contexto siempre es incompleto 3. No poseo conciencia 4. No puedo verificar todo lo que digo 5. No ejecuto un razonamiento ilimitado 6. No puedo descubrir requisitos que nunca fueron expresados Luego del detalle de cada punto, continuó con: Cómo puedes ayudarme a ser más eficiente.? Curiosamente, esto sí tiene una respuesta muy concreta. Las mejores conversaciones que tenemos suelen incluir: 1. Objetivo final 2. Restricciones 3. Nivel de profundidad esperado 4. Pensar en mí como un arquitecto técnico Objetivo + Restricciones + Contexto + Audiencia Si me preguntas cuál es mi limitación más importante hoy, no diría que es la memoria, ni la velocidad, ni el acceso a información. Diría que es esta: "No sé cuáles son las preguntas que aún no has formulado." Con esta última parte, sentí que todo el peso de la culpa de no obtener la respuesta correcta, recae 100% en mi persona, porque me hace falta aún más cuestionarme las cosas. Hay una frase que repito una y otra vez, antes de iniciar una capacitación, "No existen preguntas tontas, sólo tontos que no preguntan.!", esto lo aprendí de un profesor muy querido hace muchos años. En la vida real, suponemos siempre, más de la cuenta. Creemos que la otra persona piensa y razona como nosotros y que por tanto, no es necesario hablar más de la cuenta. Esto nos provoca siempre, grandes problemas.

En el Espacio, tan importante como la potencia es la fiabilidad, que tiene que ver con la IA esta afirmación.?

 


Hola gente. La disputa de la carrera espacial de los años 60 entre los dos grandes bloques de la Guerra Fría: Estados Unidos y la Unión Soviética, nos dejó una gran cantidad de enseñanzas. Aunque existían objetivos científicos y tecnológicos, el verdadero trasfondo era demostrar la superioridad tecnológica, militar, económica e ideológica de cada sistema político. La extinta URSS ganó las primeras carreras de esta disputa; el primer satélite artificial, el primer humano en el espacio y la primera caminata espacial. Pero la historia nos cuenta que el primer humano en la Luna, fue un Estadounidense y de alguna manera,una buena cantidad de la humanidad, ha desmeritado todo los logros que la URSS alcanzó inicialmente. Hoy en un mundo globalizado, en tiempos de la IA, es difícil establecer geográficamente en donde un hecho o un hito se da, pero siento que hemos descuidado, por intentar llegar de primero, un principio básico que hizo todo un éxito las misiones de la carrera espacial: "Tan importante como la potencia es la fiabilidad". Hoy celebramos cada vez que un modelo de LLM, logra un objetivo en menos tiempo que el tiempo empleado por un ser humano. Pero en muchos casos, sentimos un bajón horrible, cuando conocemos poco después, que el resultado no era correcto, que no era posible repetir un número "n" de veces el ejercicio y obtener el mismo resultado -enseñas básicas aprendidas durante la primaria, a través del método científico-. Esto nos pasa hoy en día con los modelos de inteligencia artificial desarrollados. Si tienes la paciencia adecuada para repetir una y otra vez un ejercicio, te darás cuenta que el resultado cambia constamente, según las condiciones, limitaciones o el sesgo que vayas introduciendo o que el LLM vaya agregando. En algunos momentos, parece como si los LLM tuvieran un política o mandato de compensación. De lo imaginario e incansable, a lo normalizado y confiable. Sin lugar alguno, el daño que más afecta a los modelos de IA, sigue siendo la falta de fiabilidad y lo fácil que puedes "inyectar" sesgo, a las respuestas que deseas que te devuelva el propio modelo.


martes, 26 de mayo de 2026

Qué sucede antes de que un dato se convierta en un embedding.?

 


No soy muy bueno cocinando, de hecho, sólo lo hago como medio de sobrevivencia cuando mi esposa esta de viaje. La preparación de una sopa por parte de un Chef de verdad es un buen ejemplo para ilustrar este proceso.

Para que los modelos entiendan el texto y lo conviertan en vectores (esos códigos numéricos o embeddings), no podemos simplemente lanzar el texto en bruto. Si hechas las verduras enteras con todo y tierra a la olla, la sopa quedará horrible. Aquí tienes cómo se limpia y simplifica el texto usando el ejemplo de la preparación de la sopa en la cocina. De la Cocina al Código: Preparando los Datos 1. Tokenización (Cortar los ingredientes): Paso 1: Fragmentación. No te comes una tableta de chocolate entera ni una cebolla de un solo bocado. En el texto, tokenizar es picar las oraciones en pedacitos manejables (palabras o sílabas).
  • En la cocina: Cortar la zanahoria en cubitos.
  • En los datos: "La sopa está rica" se convierte en ["La", "sopa", "está", "rica"].
2. Limpieza de Ruido (Quitar las cáscaras y la tierra): Paso 2: Filtrado. Hay partes del texto que no aportan sabor (significado) y solo ensucian el modelo. Eliminamos caracteres especiales, etiquetas HTML, emojis irrelevantes o mayúsculas estorbosas.
  • En la cocina: Pelar las papas y lavar los vegetales para quitar la tierra.
  • En los datos: "¡Sopa al 100%!!!" se limpia a "sopa al 100".
3. Stop Words (Descartar el agua de lavado): Paso 3: Eliminación de conectores. Las stop words son palabras altísimas en frecuencia pero bajísimas en significado, como "el", "la", "de", "un". Si el modelo ve demasiados conectores, se distrae del ingrediente principal.
  • En la cocina: Escurrir el agua donde lavaste las verduras; no la quieres en el caldo final.
  • En los datos: ["la", "sopa", "de", "tomate"] se reduce a los elementos clave: ["sopa", "tomate"].
4. Lematización o Stemming (Reducir al sabor base): Paso 4: Normalización. Para la sopa, no importa si la zanahoria era grande, pequeña, rallada o en rodajas: al final, aporta el sabor de la zanahoria. En texto, llevamos las palabras a su raíz gramatical para que el modelo entienda que son lo mismo.
  • En la cocina: Concentrar los ingredientes en su esencia pura.
  • En los datos: Las palabras "cocinando", "cocinó" y "cocina" se unifican en su raíz: "cocinar".
El plato fuerte: Una vez que tienes tus ingredientes picados, limpios, sin basura y normalizados en la olla, es cuando el algoritmo hace su magia. Toma esa "esencia" y la convierte en un embedding (un vector de números), que no es más que la receta matemática que define el perfil de sabor exacto de tu texto.
Es una forma sencilla de cómo entender este complejo proceso que se debe llevar a cabo antes de convertir un dato cualquiera, en un vector.

Recuerda que en Oracle AI Database 26ai, los datos tipo vector son nativos. El tipo de dato vectorial, se especifica con la palabra VECTOR y los parámetros (dimensión, formato).

El tamaño máximo de una dimensión es de 65.536 y soporta los tipos de formato:
  • INT8,
  • BINARY,
  • FLOAT32 (valor de facto) y
  • FLOAT64.
La precisión de la dimensión puede ser omitida utilizando un asterisco (*,FLOAT32), para definir un valor variable o no especificado para la cantidad de dimensiones.

miércoles, 20 de mayo de 2026

J C R Licklite -Red Intergaláctica de Computadoras, 1963

 


Leyendo un aporte del Sr. Erick Murillo del medio CRHOY.com, sobre una entrevista realizada a unos de los creadores de Internet, el Dr. Steve Crocker; menciona a J C R Lickliter -Joseph Carl Robnett Licklider- de ahí las iniciales. 😅 sobre un concepto adelantado al tiempo al que él llamó: “Intergalactic Computer Network” (“Red Intergaláctica de Computadoras”), una visión que surgió entre 1962 y 1963.

No era realmente un documento formal. Eran varios documentos internos de ARPA/IPTO, dentro de los cuáles destacó el memo dirigido a los: "Members and Affiliates of the Intergalactic Computer Network" en abril de 1963, hace 63 años, tomen el numero para el sorteo de mañana.

Licklider imaginó un mundo donde:
  • Las computadoras estarían interconectadas globalmente.
  • Las personas podrían acceder a programas y datos desde cualquier lugar.
  • La información sería compartida entre gobiernos, universidades, -empresas e individuos.
  • Existiría una especie de “biblioteca universal digital”.
  • La interacción con la información sería en tiempo real y colaborativa.
Lo especial de estas ideas, es que plantearon en una época en donde la mayoría de las computadoras, eran los viejos mainframes que mantenían los datos en islas de información, el modo de procesar los datos era por lotes, mucha de la data de INPUT era con tarjetas perforadas y por supuesto, no existían redes globales, ni mucho menos computadoras personales.

Todo el documento es una joya maravillosa, pero lo que deseo resaltar hoy, es esa simbiosis humano-computadora de Licklider, que no veía la computadora solamente como una calculadora, sino como una extensión intelectual del ser humano. Esto lo desarrolló también en su trabajo, "Man–Computer Symbiosis", donde proponía colaboración estrecha entre humanos y máquinas inteligentes.

Trayendo ese pensamiento a nuestros tiempos, podríamos relacionarlo directamente con los temas de IA generativa, agentes inteligentes, interfaces conversacionales y sistemas de inteligencia artificial aumentada.

La visión de Licklider fue extraordinariamente precisa, para una época donde ni siquiera existían redes comerciales. Su idea de una “red intergaláctica” no era literalmente espacial; era una metáfora para una red universal de conocimiento e interacción humana.

Todos los Sábados a las 8:00PM