Generar SQL a partir de peticiones de datos de lenguaje natural mediante Select AI
La función Select AI permite a Autonomous AI Database utilizar IA generativa con grandes modelos de lenguaje (LLM) para convertir el texto de entrada del usuario en Oracle SQL. Seleccione AI procesa la petición de datos en lenguaje natural, complementa la petición de datos con metadatos y, a continuación, genera y ejecuta una consulta SQL.
Acerca de Select AI
Utiliza el lenguaje natural para interactuar con tu base de datos y LLM a través de SQL para mejorar la productividad del usuario y desarrollar aplicaciones basadas en IA. Select AI simplifica y automatiza el uso de la IA generativa, ya sea generando, ejecutando y explicando SQL a partir de una petición de datos en lenguaje natural, utilizando la generación aumentada de recuperación con almacenes vectoriales, generando datos sintéticos o chateando con el LLM.
Al utilizar Select AI, Autonomous AI Database gestiona el proceso de conversión de lenguaje natural en SQL. Esto significa que puede proporcionar una petición de datos en lenguaje natural en lugar de código SQL para interactuar con los datos. Select AI sirve como una herramienta de productividad para los usuarios y desarrolladores de SQL y permite a los usuarios de SQL no expertos obtener información útil de sus datos, sin tener que comprender estructuras de datos o lenguajes técnicos.
Select AI también automatiza el proceso de generación aumentada de recuperación (RAG) desde la generación de incrustaciones vectoriales hasta la recuperación de contenido relevante basado en su petición de datos a través de la búsqueda de similitud semántica utilizando su almacén de vectores. Otras funciones incluyen la generación de datos sintéticos, el soporte del historial de chat para conversaciones y otras funciones, todo desde una interfaz SQL.
DBMS_CLOUD_AI permite la integración con un LLM especificado por el usuario para generar código SQL mediante peticiones de datos en lenguaje natural. Para la generación de lenguaje natural a SQL, este paquete proporciona una petición de datos aumentada al LLM que contiene los metadatos de esquema de base de datos relevantes. Esto permite generar, ejecutar y explicar consultas SQL basadas en peticiones de datos en lenguaje natural. También facilita la recuperación de la generación aumentada utilizando almacenes vectoriales, la generación de datos sintéticos y permite chatear con el LLM. El paquete DBMS_CLOUD_AI funciona con los proveedores de IA que se muestran en Select your AI Provider and LLMs.
Note:
-
Debe tener una cuenta con el proveedor de IA y proporcionar las credenciales mediante los objetos
DBMS_CLOUD_AIque utiliza la base de datos de IA autónoma. -
Puede enviar peticiones de datos en varios idiomas. La calidad del resultado depende de las capacidades del LLM específico o del modelo de inserción (transformador) que se esté utilizando. Consulte su LLM o incruste la documentación del modelo para obtener soporte en varios idiomas.
Plataformas soportadas
La selección de IA está soportada en Autonomous AI Database sin servidor y Autonomous AI Database on Dedicated Exadata Infrastructure and Cloud at Customers.
- Autonomous AI Database sin servidor
- base de datos de IA autónoma en una infraestructura de Exadata dedicada
- Región de base de datos de IA autónoma en infraestructura de Exadata dedicada
- Base de datos de IA autónoma Cloud@Customer
Terminología relacionada
Es importante comprender los diversos términos utilizados con Select AI antes de usarla.
A continuación, se muestran los términos relacionados con la función Seleccionar AI:
| Término | Definición |
|---|---|
| Conversaciones |
Las conversaciones en Select AI representan un intercambio interactivo entre el usuario y el sistema, lo que permite a los usuarios consultar o interactuar con la base de datos a través de una serie de peticiones de datos en lenguaje natural. Select AI incorpora conversaciones a corto plazo basadas en sesiones para generar respuestas adaptadas al contexto para la petición de datos actual en función de interacciones anteriores. Se incorporan hasta 10 peticiones de datos anteriores a la solicitud actual con conversaciones a corto plazo, lo que crea una petición de datos aumentada que se envía al LLM. Select AI admite el uso de conversaciones personalizables a largo plazo, lo que le permite utilizar Select AI con diferentes temas sin mezclar contexto, que se puede configurar mediante API de conversación desde el paquete DBMS_CLOUD_AI. Consulte Uso y Personalización de Conversaciones para obtener más información. |
|
Credencial de Base de Datos |
Las credenciales de base de datos son credenciales de autenticación utilizadas para acceder a las bases de datos e interactuar con ellas. Por lo general, consisten en un nombre de usuario y una contraseña, a veces complementados con factores de autenticación adicionales como tokens de seguridad. Estas credenciales se utilizan para establecer una conexión segura entre una aplicación o un usuario y una base de datos, lo que garantiza que solo las personas o los sistemas autorizados puedan acceder y manipular los datos almacenados en la base de datos. |
|
Alucinación en LLM |
La alucinación en el contexto de los modelos de lenguaje grande se refiere a un fenómeno en el que el modelo genera texto que es incorrecto, sin sentido o no está relacionado con el indicador de entrada. A pesar de ser el resultado del intento del modelo de generar texto coherente, estas instancias pueden contener información fabricada, engañosa o puramente imaginativa. La alucinación puede ocurrir debido a sesgos en los datos de entrenamiento, falta de comprensión del contexto adecuado o limitaciones en el proceso de entrenamiento del modelo. |
| IAM | Oracle Cloud Infrastructure Identity and Access Management (IAM) le permite controlar quién tiene acceso a sus recursos en la nube. Puede controlar qué tipo de acceso tiene un grupo de usuarios y a qué recursos específicos. Para obtener más información, consulte Visión general de Identity and Access Management. |
| Metadatos |
Los metadatos son datos que describen los datos. En el caso de Select AI, los metadatos son metadatos de base de datos, que hacen referencia a los datos que describen la estructura, la organización y las propiedades de las tablas y vistas de base de datos. Para las tablas y vistas de la base de datos, los metadatos incluyen nombres y tipos de columnas, restricciones y claves, definiciones de vistas, relaciones, linaje, indicadores de calidad y frescura, clasificaciones de seguridad y políticas de acceso. Los metadatos bien gestionados permiten la capacidad de detección, el uso correcto, el ajuste del rendimiento y la conformidad. Seleccione AI aumenta las peticiones de datos NL2SQL con metadatos de tabla que incluyen la definición de tabla (nombre de tabla, nombres de columnas y sus tipos de dato), y, opcionalmente, comentarios, anotaciones y restricciones de tabla y columna. |
| Enriquecimiento de metadatos |
Práctica de aumentar los esquemas de la base de datos con descripciones, comentarios y anotaciones de alta calidad para que un LLM pueda comprender mejor la intención de las tablas y columnas, aclarar el significado empresarial y generar SQL más preciso. Convierte los nombres de tablas o columnas con hardware dedicado en activos bien documentados con intenciones, relaciones y restricciones claras. Información del candidato para incluir:
Consulte Visión general del enriquecimiento de IA para obtener más información sobre la adición de dichos metadatos mediante Oracle SQL Developer for VS Code a través de Visual Studio Code. |
|
Peticiones de datos de lenguaje natural |
Las peticiones de datos de lenguaje natural son instrucciones o solicitudes legibles por humanos que se proporcionan para guiar los modelos de IA generativa, como los modelos de lenguaje grande. En lugar de utilizar lenguajes de programación o comandos específicos, los usuarios pueden interactuar con estos modelos introduciendo peticiones de datos en una forma de lenguaje más conversacional o natural. A continuación, los modelos generan una salida basada en la petición de datos proporcionada. |
|
Lista de control de acceso de red (ACL) |
Una lista de control de acceso de red es un conjunto de reglas o permisos que definen qué tráfico de red puede pasar a través de un dispositivo de red, como un enrutador, un firewall o una puerta de enlace. Las ACL se utilizan para controlar y filtrar el tráfico entrante y saliente en función de diversos criterios, como direcciones IP, números de puerto y protocolos. Desempeñan un papel crucial en la seguridad de la red al permitir a los administradores gestionar y restringir el tráfico de red para evitar el acceso no autorizado, posibles ataques y violaciones de datos. |
|
Búsqueda de similitud |
La búsqueda de similitud identifica y recupera puntos de datos que coinciden estrechamente con una consulta determinada mediante la comparación de vectores de funciones en un almacén de vectores. |
|
Distancias vectoriales |
Las distancias vectoriales miden la similitud o disimilitud entre los vectores de características al calcular la distancia entre ellos en un espacio multidimensional. |
|
Índice de vector |
Un índice vectorial organiza y almacena vectores de características para permitir una búsqueda de similitud eficiente y la recuperación de datos relacionados. |
|
Tienda de vectores |
Un almacén de vectores incluye sistemas que almacenan, gestionan y permiten la búsqueda de similitud semántica con incrustaciones vectoriales. Esto incluye bases de datos vectoriales independientes y Oracle Database 23ai AI Vector Search. |
Seleccionar casos de uso de IA
Select AI mejora la interacción de datos y permite a los desarrolladores crear aplicaciones basadas en IA directamente desde SQL, transformando peticiones de datos en lenguaje natural en consultas SQL y respuestas de texto, soportando la interacción de chat con LLM, mejorando la precisión de las respuestas con los datos actuales mediante RAG y generando datos sintéticos.
Entre los casos de uso se incluyen:
-
Generar SQL a partir de peticiones de datos en lenguaje natural
Productividad de los desarrolladores: Select AI mejora significativamente la productividad de los desarrolladores al proporcionar consultas SQL "iniciales" rápidamente. Los desarrolladores pueden introducir peticiones de datos en lenguaje natural, y Select AI genera SQL basado en las tablas y vistas del esquema de la base de datos. Esto reduce el tiempo y el esfuerzo necesarios para escribir consultas complejas desde cero, lo que permite a los desarrolladores centrarse en refinar y optimizar las consultas generadas para sus necesidades específicas.
Consultas en lenguaje natural para usuarios finales: Select AI permite a los usuarios finales interactuar con las tablas de datos y vistas subyacentes de la aplicación mediante consultas en lenguaje natural. Esta funcionalidad permite a los usuarios sin experiencia en SQL hacer preguntas y recuperar datos directamente, lo que hace que el acceso a los datos sea más intuitivo y fácil de usar en relación con las capacidades del LLM que se utiliza y la calidad de los metadatos del esquema disponibles.
Otras capacidades para la generación de SQL: las siguientes capacidades resaltadas también están soportadas para la generación de SQL en lenguaje natural:
-
Especificar esquema o tablas o vistas: Seleccionar AI permite especificar una lista de objetos que consta de esquema y, opcionalmente, tablas o vistas dentro de ese esquema.
-
Detectar automáticamente metadatos de tabla relevantes: seleccione AI detecta automáticamente tablas relevantes y envía metadatos solo para esas tablas específicas, relevantes para la consulta, en Oracle Database 26ai.
- Restringir el acceso a la tabla: Select AI le permite restringir el acceso a la tabla considerando solo las tablas que se muestran en los atributos de perfil de AI para la generación SQL.
- Especificar la distinción entre mayúsculas y minúsculas para las columnas: Seleccionar IA permite al usuario especificar la distinción entre mayúsculas y minúsculas de modo que el LLM produzca respuestas no sensibles a mayúsculas y minúsculas de la base de datos y el LLM.
-
-
Conversaciones
Activa funciones similares a un chatbot con Select AI, lo que permite a los usuarios tener conversaciones naturales para consultar datos y realizar acciones. Estos chats pueden realizar un seguimiento del contexto, dando respuestas de seguimiento que aclaren o amplíen las preguntas originales. Este escenario aumenta la interacción y facilita las consultas complicadas a través de la conversación.
-
Flujos de trabajo de Agentic con Select AI Agent
Utilice Select AI Agent para coordinar agentes, herramientas (SQL, RAG, búsqueda web, notificaciones) y tareas para escenarios de varios pasos, como la recuperación de datos y la notificación. Consulte Creación de agentes autónomos con Select AI Agent para obtener más información.
-
Generación de medios personalizados
Select AI se puede utilizar para generar contenido multimedia personalizado, como correos electrónicos adaptados a los detalles individuales del cliente. Por ejemplo, en su petición de datos, podría indicar al LLM que cree un correo electrónico amigable y optimista que aliente a un cliente a probar un conjunto de productos recomendados. Estas recomendaciones pueden basarse en datos demográficos del cliente u otra información específica disponible en la base de datos. Este nivel de personalización mejora la interacción con el cliente, ya que ofrece contenido relevante y atractivo directamente al cliente.
-
Generación de código
Con la acción Select AI
chat, puede utilizar Select AI para solicitar al LLM especificado que genere código a partir de peticiones de datos en lenguaje natural. Esta función soporta varios lenguajes de programación, como SQL, Python, R y Java. Algunos ejemplos incluyen:- Código Python: "Escriba el código Python para calcular una matriz de confusión sobre un DataFrame con las columnas ACTUAL y PREDICTED".
- SQL DDL: "Escriba el DDL para una tabla SQL con el nombre, la edad, los ingresos y el país de las columnas".
- Consulta SQL: "Escriba la consulta SQL que utilizará el modelo en la base de datos de Oracle Machine Learning denominado CHURN_DT_MODEL para predecir qué clientes abandonarán y con qué probabilidad".
-
Generación aumentada de recuperación (RAG)
Utilice el contenido del almacén de vectores para la búsqueda de similitud semántica para mejorar la precisión de la petición de datos y la relevancia en las respuestas del LLM.
-
Generación de datos sintéticos
Genere datos sintéticos mediante LLM que se ajusten a su esquema para pruebas de soluciones, pruebas de concepto y otros usos. Los datos sintéticos pueden soportar mejores pruebas de sus aplicaciones en ausencia de datos reales, lo que lleva a la calidad general de su aplicación.
Instrucciones de uso
Proporciona directrices de uso que garantizan un uso eficaz y adecuado de las peticiones de datos en lenguaje natural para la generación de SQL a fin de garantizar una experiencia de usuario mejorada.
Finalidad
Esta función está destinada a la generación y ejecución de consultas SQL resultantes de peticiones de datos de lenguaje natural proporcionadas por el usuario. Automatiza lo que un usuario podría hacer manualmente en función de sus metadatos de esquema en combinación con un modelo de lenguaje grande (LLM) de su elección.
Si bien se puede proporcionar cualquier petición de datos, incluidas las que no están relacionadas con la producción de resultados de consultas SQL, Select AI se centra en la generación de consultas SQL. Seleccione AI para ejecutar solicitudes generales con la acción chat.
Petición de datos de aumento
La base de datos aumenta la petición de datos especificada por el usuario con metadatos de base de datos para mitigar las alucinaciones del LLM. A continuación, la petición de datos aumentada se envía al LLM especificado por el usuario para producir la consulta.
La base de datos aumenta la petición de datos solo con metadatos de esquema. Estos metadatos pueden incluir definiciones de esquema, comentarios de tabla y columna y contenido disponible en el diccionario de datos y el catálogo. Para la generación de SQL, la base de datos no proporciona contenido de tabla o vista (valores reales de fila o columna) al aumentar la petición de datos.
Sin embargo, la acción narrate proporciona el resultado de la consulta, que puede contener datos de la base de datos, al LLM especificado por el usuario a partir del cual se genera texto en lenguaje natural que describe los resultados de la consulta.
ADVERTENCIA:
Los grandes modelos de lenguaje (LLM) se han entrenado en un amplio conjunto de documentación y contenido de texto, generalmente desde Internet. Como resultado, los LLM pueden haber incorporado patrones de contenido no válido o malicioso, incluida la inyección SQL. Por lo tanto, mientras que los LLM son expertos en generar contenido útil y relevante, también pueden generar información incorrecta y falsa, incluidas consultas SQL que producen resultados inexactos y / o comprometen la seguridad de sus datos.
Las consultas generadas en su nombre por el proveedor de LLM especificado por el usuario se ejecutarán en su base de datos. Su uso de esta función se realiza bajo su propio riesgo y, independientemente de cualesquiera otros términos y condiciones relacionados con los Servicios prestados por Oracle, constituye su aceptación de dicho riesgo y exclusión expresa de la responsabilidad o responsabilidad de Oracle por los daños resultantes de dicho uso.
Seleccione su proveedor de IA y LLM
Elige un proveedor de IA y un LLM que cumpla con tus estándares de seguridad y se ajuste a tus necesidades específicas, como la generación de texto o código.
Los diferentes LLM sobresalen en varias tareas en función de sus datos de entrenamiento y el propósito previsto. Algunos modelos son excelentes para la generación de texto, pero pueden no funcionar bien en la generación de código, mientras que otros están específicamente optimizados para tareas de codificación. Elija un LLM que mejor se adapte a sus necesidades.
| Proveedor de IA | LLM | Modelo de inserción para RAG | Finalidad |
|---|---|---|---|
|
OCI Generative AI |
|
Consulte Acerca de la incorporación de modelos en la IA generativa. |
Los modelos de chat de OCI Generative AI están soportados para todas las acciones Los modelos de texto Generar de OCI solo están soportados para la acción Para configurar los atributos de perfil, consulte Atributos de perfil. |
|
Servicio OpenAI de Azure |
|
texto-embedding-ada-002 |
Se adapta mejor a la generación de SQL a partir de peticiones de datos en lenguaje natural, la acción |
|
OpenAI |
|
texto-embedding-ada-002 |
Se adapta mejor a la generación de SQL a partir de peticiones de datos en lenguaje natural, la acción |
|
Compatible con OpenAI |
Modelos de proveedores compatibles con OpenAI, como:
|
Incorporación de modelos de proveedores compatibles con OpenAI. Por ejemplo, consulte Modelos de incrustación de Fireworks AI. |
Admite una amplia gama de casos de uso. |
|
Cohere |
|
embebido-español-v2.0 |
Más adecuado para la acción |
|
|
|
text-embedding-004 (por defecto) |
Se adapta mejor a la generación de SQL a partir de peticiones de datos en lenguaje natural, la acción |
|
Antropología |
|
NA |
Se adapta mejor a la generación de SQL a partir de peticiones de datos en lenguaje natural, la acción |
|
Hugging Face |
|
NA |
Se adapta mejor a la generación de SQL a partir de peticiones de datos en lenguaje natural, la acción |
|
AWS |
|
Admite una amplia gama de casos de uso. |
Note:
-
Especifique un proveedor compatible con OpenAI mediante
provider_endpointen lugar del parámetroprovider. Consulte Atributos de perfil. -
Para los modelos que aceptan imágenes, utilice
meta.llama-3.2-90b-vision-instruct. Este modelo está específicamente entrenado para la visión y las imágenes. Aunque se puede utilizar para la generación de texto y SQL, el modelo es el más adecuado para imágenes. Para obtener más información, consulte Chat en OCI Generative AI.El modelo
meta.llama-3.2-11b-vision-instructproporciona sólidas capacidades multimodales. -
Los modelos de inserción también se conocen como modelos de transformadores.
Configuración de perfiles de AI mediante DBMS_CLOUD_AI
Autonomous AI Database utiliza perfiles de IA para facilitar y configurar el acceso a un LLM y para configurar la generación, ejecución y explicación de SQL en función de peticiones de datos en lenguaje natural. También facilita la recuperación de la generación aumentada utilizando modelos de incrustación e índices vectoriales y permite chatear con el LLM.
Los perfiles de IA incluyen objetos de base de datos que son el destino de las consultas de lenguaje natural. Los metadatos utilizados desde estos destinos pueden incluir nombres de tabla de base de datos, nombres de columna, tipos de dato de columna y comentarios. Puede crear y configurar perfiles AI mediante los procedimientos DBMS_CLOUD_AI.CREATE_PROFILE y DBMS_CLOUD_AI.SET_PROFILE.
Requisitos para DBMS_CLOUD_AI
Para ejecutar DBMS_CLOUD_AI, se necesita lo siguiente:
- Acceso a una cuenta en la nube de Oracle Cloud Infrastructure y a una instancia de Autonomous AI Database.
- Una cuenta de API de pago para un proveedor de IA compatible, una de las siguientes opciones:
-
OpenAI: para permitir que OpenAI genere SQL a partir de peticiones de datos en lenguaje natural, obtenga las claves de API de su cuenta de pago OpenAI.
Puede encontrar la clave de API secreta en la configuración de usuario.
-
Aquí: para permitir que Cohere genere SQL a partir de peticiones de datos en lenguaje natural, obtenga claves API de su cuenta de pago de Cohere.
Haga clic en Panel de control y, a continuación, en Claves de API, en la navegación izquierda. Copie la clave de API por defecto o cree otra. Consulte API-Keys para obtener más información.
-
Servicio OpenAI de Azure: para activar Servicio OpenAI de Azure para generar SQL a partir de peticiones de datos de lenguaje natural, configure y proporcione acceso al proveedor de IA.
Para utilizar Azure OpenAI Service, realice los siguientes pasos:
- Obtenga sus claves API secretas. Puede encontrar sus claves de API en la sección Resource Management de su portal de Azure. En la página Recurso de Azure OpenAI Service, haga clic en Claves y punto final. Puede copiar KEY1 o KEY2.
- Cree un recurso Azure OpenAI Service y despliegue un modelo: Cree y despliegue un recurso de servicio OpenAI de Azure.
Sugerencia:
- Tenga en cuenta el nombre de recurso y el nombre de despliegue, ya que estos parámetros se utilizan para proporcionar permiso de acceso de red y crear el perfil de Azure OpenAI Service mediante el procedimiento
DBMS_CLOUD_AI.CREATE_PROFILE. - Para obtener más información sobre los límites de frecuencia para el token por minuto en un modelo, consulte Cuotas y límites del servicio OpenAI de Azure.
- Tenga en cuenta el nombre de recurso y el nombre de despliegue, ya que estos parámetros se utilizan para proporcionar permiso de acceso de red y crear el perfil de Azure OpenAI Service mediante el procedimiento
- Permitir acceso al servicio OpenAI de Azure:
- Puede utilizar su clave de API secreta para permitir el acceso a Azure OpenAI Service. Para obtener más información, consulte el ejemplo de Examples of Using Select AI.
- IA generativa de OCI: consulte Cómo generar la clave de firma de API.
- Google: para permitir que Google AI Studio genere respuestas de texto y SQL a sus peticiones de datos en lenguaje natural, obtenga claves de API de su cuenta de pago de Google AI Studio.
- Vaya a Google AI Studio.
- Haga clic en Iniciar sesión en Google AI Studio.
- Haga clic en Obtener clave de API en la pantalla de petición de datos.
- Seleccione todas las opciones aplicables en la página siguiente.
- Haga clic en Create API key.
-
Haga clic en Create API key en el nuevo proyecto.
La pantalla muestra el progreso y genera una clave de API. Copie la clave y guárdela.
- Antrópico: para permitir que la consola de desarrollador antrópica genere respuestas de texto y SQL a sus peticiones de datos en lenguaje natural, obtenga claves de API de su cuenta de pago de la consola de desarrollador antrópica.
- Vaya a Anthropic Developer Console.
- Regístrate para obtener una cuenta si aún no tienes una.
- Una vez conectado, vaya a la sección API o al panel de control.
- Busque una opción para generar o ver claves de API.
- Haga clic para crear una nueva clave de API.
-
Copie la clave de API generada y guárdela.
La API de Claude es un servicio de pago. Tendrás que agregar créditos a tu cuenta para poder usar la clave de API.
- Hugging Face: para permitir que Hugging Face como proveedor de IA genere respuestas de SQL y texto a sus peticiones de datos en lenguaje natural, obtenga claves API de su cuenta de pago de Hugging Face.
- Vaya a Hugging Face.
- Regístrate para obtener una cuenta si aún no tienes una.
- Vaya a la configuración de su cuenta.
- En el menú de navegación, busque los tokens de acceso.
- Haga clic para crear una nueva clave de API.
- Copie la clave de API generada y guárdela.
-
AWS: para activar AWS, obtenga su clave de API y su ID de modelo.
Obtenga su clave de API y úsela para crear credenciales a través de
DBMS_CLOUD.CREATE_CREDENTIAL.Siga este proceso para obtener la clave de API y el nombre del modelo:
- Regístrese en una cuenta de AWS si aún no tiene una.
- Cree las claves de acceso y las claves secretas desde la consola Bedrock de AWS.
- Copie las claves generadas y guárdelas.
- Solicite acceso a sus modelos básicos. Consulte Acceso a los modelos básicos de Amazon Bedrock.
- Obtenga el ID de modelo. Necesita el ID de modelo en el procedimiento
DBMS_CLOUD_AI.CREATE_PROFILE. El ID de modelo depende de los recursos que utilice. Si utiliza:- un modelo base, especifique el ID de modelo o su ARN (nombres de recursos de Amazon). Para obtener una lista de los ID de modelo para los modelos base, consulte ID de modelo base de Amazon Bedrock.
- un perfil de inferencia, especifique el ID de perfil de inferencia o su ARN. Para obtener una lista de los ID de perfil de inferencia, consulte Regiones y modelos admitidos para inferencia entre regiones.
- un modelo aprovisionado, especifique el ARN del rendimiento aprovisionado. Para obtener más información, consulte Ejecución de inferencia mediante un rendimiento aprovisionado.
- un modelo personalizado, adquiera el rendimiento aprovisionado para él. A continuación, especifique el ARN del modelo aprovisionado resultante. Para obtener más información, consulte Uso de un modelo personalizado en Amazon Bedrock.
- un modelo de Amazon Bedrock Marketplace, especifique el ID o la ARN del punto final de mercado que ha creado; consulte Amazon Bedrock Marketplace.
Note:
El modelo importado no está soportado con la API de Bedrock Converse.
Para usar AWS como proveedor, consulte Ejemplo: selección de IA con AWS.
-
- Privilegios de ACL de red para acceder al proveedor de AI externo.
Note:
La ACL de red no es aplicable a OCI Generative AI. - Credencial que proporciona acceso al proveedor de AI.
DBMS_CLOUD_AI:
-
Otorgue el privilegio
EXECUTEen el paqueteDBMS_CLOUD_AIal usuario que desea utilizar Select AI.Por defecto, solo se otorga el privilegio
EXECUTEal usuario ADMIN. El usuario ADMIN puede otorgar el privilegioEXECUTEa otros usuarios.En el siguiente ejemplo se otorga el privilegioEXECUTEaADB_USER:grant execute on DBMS_CLOUD_AI to ADB_USER;En el siguiente ejemplo se otorga a
ADB_USERel privilegio para utilizar el punto final api.openai.com.BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'api.openai.com', ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'ADB_USER', principal_type => xs_acl.ptype_db) ); END; / -
Otorgue acceso de ACL de red al usuario que desea utilizar Select AI y para el punto final del proveedor de AI.
El usuario ADMIN puede otorgar acceso a la ACL de red. Consulte APPEND_HOST_ACE Procedure en Oracle Database 19c PL/SQL Packages and Types Reference o Oracle Database 26ai PL/SQL Packages and Types Reference para obtener más información.
- Cree una credencial para permitir el acceso a su proveedor de AI.
Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.
A continuación se muestra un ejemplo de cómo crear una credencial para activar el acceso a OpenAI.
EXECDBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');
Parámetros de Función APPEND_HOST_ACE
| parámetro | Descripción |
|---|---|
|
|
El host, que puede ser el nombre o la dirección IP del host. Puede utilizar un comodín para especificar un dominio o una subred IP. El host o el nombre de dominio no son sensibles a mayúsculas/minúsculas. Para OpenAI, utilice api.openai.com. Para Cohere, utilice api.cohere.ai. Para Azure OpenAI Service, utilice <azure_resource_name>.openai.azure.com. Consulte Atributos de perfil para obtener más información sobre Para Google, utilice generativelanguage.googleapis.com. Para Anthropic, utilice api.anthropic.com. Para abrazar la cara, utilice api-inference.huggingface.co. |
|
|
Las entradas de control de acceso (ACE). El tipo |
Parámetros de DBMS_CLOUD.CREATE_CREDENTIAL
Creación y definición de un perfil de AI
Describe los pasos para crear y activar un perfil de AI.
Utilice DBMS_CLOUD_AI.CREATE_PROFILE para crear un perfil de AI. A continuación, inicie DBMS_CLOUD_AI.SET_PROFILE para activar el perfil AI para que pueda utilizar SELECT AI con una petición de datos de lenguaje natural.
Note:
Debe ejecutar DBMS_CLOUD_AI.SET_PROFILE en cada nueva sesión de base de datos (conexión) antes de utilizar SELECT AI.
En el siguiente ejemplo con el proveedor OpenAI se crea un perfil AI denominado OPENAI y se define el perfil OPENAI para la sesión de usuario actual.
-- Create AI profile
--
SQL> BEGIN
DBMS_CLOUD_AI.create_profile(
'OPENAI',
'{"provider": "openai",
"credential_name": "OPENAI_CRED",
"object_list": [{"owner": "SH", "name": "customers"},
{"owner": "SH", "name": "sales"},
{"owner": "SH", "name": "products"},
{"owner": "SH", "name": "countries"}]
}');
END;
/
PL/SQL procedure successfully completed.
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
PL/SQL procedure successfully completed.
Uso de la palabra clave AI para introducir peticiones de datos
Utilice AI como palabra clave en una sentencia SELECT para interactuar con la base de datos mediante peticiones de datos en lenguaje natural.
La palabra clave AI en una sentencia SELECT indica al motor de ejecución SQL que utilice el LLM identificado en el perfil de AI activo para procesar el lenguaje natural y generar SQL.
Puede utilizar la palabra clave AI en una consulta con clientes de Oracle como SQL Developer, OML Notebooks y herramientas de terceros para interactuar con la base de datos en lenguaje natural.
Note:
No se pueden ejecutar sentencias PL/SQL, DDL ni DML mediante la palabra claveAI.
Sintaxis
SELECT AI action natural_language_promptParámetros
| parámetro | Descripción |
|---|---|
|
|
Ejecute el comando SQL proporcionado mediante una petición de datos en lenguaje natural. Esta es la acción por defecto y es opcional especificar este parámetro. |
|
|
Muestra la sentencia SQL para una petición de datos en lenguaje natural. |
|
|
La salida del mensaje se explica en lenguaje natural. Esta opción envía el resultado de SQL al proveedor de AI para generar un resumen de lenguaje natural. |
|
|
Genera una respuesta directamente desde el LLM en función de la petición de datos. Si |
|
|
El SQL generado a partir de la petición de datos se explica en lenguaje natural. Esta opción envía el SQL generado al proveedor de AI para producir una explicación del lenguaje natural. |
Notas de uso
-
Seleccione
AIno está soportado en Database Actions ni en el servicio APEX. Solo puede utilizar la funciónDBMS_CLOUD_AI.GENERATE. -
La palabra clave
AIsolo está soportada en una sentenciaSELECT. -
No se pueden ejecutar sentencias PL/SQL, DDL ni DML mediante la palabra clave
AI. -
La secuencia es
SELECTseguida deAI. Estas palabras clave no distinguen mayúsculas y minúsculas. Después de configurarDBMS_CLOUD_AI.SET_PROFILE, el texto después deSELECT AIes una petición de datos de lenguaje natural. Si no se define un perfil AI,SELECTAIinforma el siguiente error:ORA-00923: FROM keyword not found where expected 00923. 00000 - "FROM keyword not found where expected" -
Las reglas de uso de caracteres especiales se aplican de acuerdo con las directrices de Oracle. Por ejemplo, use comillas simples dos veces si está usando un apóstrofe en una oración.
select ai how many customers in SF don''t own their own home -
Los LLM están sujetos a alucinaciones y los resultados no siempre son correctos:
-
Es posible que
SELECT AIno pueda ejecutar el SQL generado para una petición de datos de lenguaje natural específica. -
Es posible que
SELECT AIno pueda generar SQL para una petición de datos de lenguaje natural específica.
En tal caso,
SELECT AIresponde con información para ayudarle a generar SQL válido. -
-
Utilice la acción
chat, conSELECT AI chat, para obtener más información sobre las construcciones SQL. Para obtener mejores resultados con la acciónchat, utilice vistas o tablas de base de datos con nombres de columna contextuales o considere agregar comentarios de columna que expliquen los valores almacenados en las columnas. -
Para acceder a las vistas DBA o USER, consulte Vistas DBMS_CLOUD_AI.
Uso y personalización de conversaciones
Select AI admite conversaciones basadas en sesiones a corto plazo, que se activan en el perfil de IA, así como conversaciones con nombre a largo plazo, que se activan mediante procedimientos o funciones específicos e ID de conversación.
Note:
El soporte para conversaciones de Select AI está disponible en Oracle Database 19c a partir de la versión 19.30 y en Oracle Database 26ai a partir de la versión 23.26.1.Tipos de Conversaciones
Select AI admite conversaciones a corto plazo basadas en sesiones y conversaciones personalizables.
Conversaciones a corto plazo basadas en sesiones: la selección de IA incluye conversaciones a corto plazo basadas en sesiones para generar respuestas conscientes del contexto para la petición de datos actual en función de interacciones anteriores.
Puede activarla definiendo el atributo conversation en true|false en su perfil AI. A diferencia de la función de varias conversaciones, las conversaciones basadas en sesiones almacenan mensajes solo durante la sesión. Las peticiones de datos se almacenan en una tabla temporal, se borran automáticamente cuando finaliza la sesión y no se pueden volver a utilizar ni cambiar entre conversaciones.
Conversaciones personalizables a largo plazo: la opción Seleccionar IA soporta la creación y el uso de conversaciones personalizables, lo que le permite utilizar la opción Seleccionar IA con diferentes temas sin mezclar contexto, lo que mejora la flexibilidad y la eficiencia. Puede crear, definir, suprimir y actualizar conversaciones mediante las funciones y los procedimientos de conversación DBMS_CLOUD_AI. Al activar conversaciones, Select AI recupera el historial de peticiones de datos y los envía al LLM para generar una respuesta para la petición de datos actual. Estas respuestas se almacenan en una tabla persistente para su uso futuro.
Note:
Las conversaciones de AI seleccionadas soportan las siguientes acciones:runsql, showsql, explainsql, narrate y chat.
Cómo utilizar conversaciones personalizables
Puede utilizar Select AI para conversaciones personalizables de las siguientes formas:
-
Defina el ID de conversación en la sesión mediante el procedimiento
DBMS_CLOUD_AI.SET_CONVERSATION_IDy ejecuteSELECT AI <ACTION> <PROMPT>. -
Transfiera
conversation_iden el argumentoparamsde la funciónDBMS_CLOUD_AI.GENERATE.
Note:
Si utiliza varias conversaciones y el valorconversation: [true|false], el sistema ignora el valor conversation.
En el contexto de la generación de consultas SQL (NL2SQL), las conversaciones permiten una forma más intuitiva y accesible de trabajar con los datos, lo que facilita a los usuarios la extracción de estadísticas y la realización de tareas sin necesidad de un profundo conocimiento técnico de SQL. Las conversaciones también se pueden utilizar con las capacidades de chat y RAG de Select AI.
- Haga una pregunta como "¿Cuál es el número total de clientes?"
- Realice un seguimiento con preguntas conscientes del contexto, como:
- "Recuento de brotes de clientes por país"
- "Qué grupo de edad es más común"
- "Mantener a los 5 clientes principales y a su país por sus compras e incluir un rango en el resultado"
Para activar conversaciones, consulte Ejemplo: activación de conversaciones en Seleccionar IA para obtener un ejemplo completo.
Conversaciones Basadas en Sesión frente a Conversaciones Personalizables
La siguiente tabla compara la conversación basada en sesión y las conversaciones personalizables en Seleccionar IA:
| Preguntas | Conversaciones a corto plazo basadas en sesiones | Conversaciones a largo plazo personalizables |
|---|---|---|
|
¿Cuándo debo utilizar? |
Lo mejor para los chats rápidos y temporales en los que desea que el modelo recuerde las preguntas y respuestas recientes durante una sola sesión. Es útil cuando no necesita guardar o reutilizar la conversación más adelante. |
Diseñado para conversaciones más largas o continuas que pueden abarcar varias sesiones. Es útil cuando se desea realizar un seguimiento, revisar o gestionar el historial de conversaciones, o cuando diferentes partes de una aplicación necesitan acceder al mismo contexto de conversación a lo largo del tiempo. |
|
¿Cómo puedo activarlo? |
Defina |
Utilice el procedimiento |
|
¿Cuántas conversaciones se permiten? |
Uno. |
Puede crear varias conversaciones. Si especifica de forma explícita las Id. de conversación, puede alternar entre ellas para asociar campos a las conversaciones adecuadas según sea necesario. |
|
¿Dónde se almacenan las peticiones de datos y durante cuánto tiempo? |
Las peticiones de datos se almacenan en una tabla temporal y se borran cuando finaliza la sesión. |
Las peticiones se almacenan en una tabla permanente. Las peticiones de datos se mantienen en la base de datos durante el número de días especificado por el parámetro |
|
¿Cuántas peticiones de datos se almacenan y cuántas peticiones de datos se envían al LLM? |
Se almacenan y envían al LLM un máximo de 10 peticiones de datos. No puede personalizar este límite. |
Se almacenan todas las peticiones de datos. De manera predeterminada, el sistema envía las 10 peticiones de datos más recientes al LLM. Puede personalizar esto mediante el parámetro |
|
¿Puedo eliminar peticiones de datos individuales? |
No, no puede suprimir una petición de datos individual manualmente. |
Puede suprimir peticiones de datos individuales específicas mediante el ID de petición de datos especificado en la vista USER_CLOUD_AI_CONVERSATION_PROMPTS y mediante el procedimiento |
|
¿Se utilizan los perfiles de IA para la recuperación de conversaciones? |
Sí, Select AI recupera peticiones de datos y respuestas generadas previamente con el mismo perfil de AI. |
No, Select AI realiza un seguimiento del perfil de AI utilizado al almacenar peticiones de datos y respuestas, pero no restringe su recuperación en función de ese perfil. Envía todos los historiales de conversaciones al LLM para guiar la generación de respuestas, independientemente del perfil utilizado para generarlas. |
|
¿Dónde puedo comprobar el historial de peticiones de datos? |
Las peticiones de datos se guardan en una tabla temporal en CLOUD USER, pero no se puede acceder a ellas para realizar consultas. |
Puede consultar y revisar conversaciones y peticiones de datos a través de las vistas de conversación |
Proporcionar comentarios para mejorar los LLM
Select AI te permite proporcionar comentarios para ayudar a mejorar la capacidad de tu LLM seleccionado para generar consultas SQL más precisas.
Note:
Esta función solo está disponible en Oracle Database 23ai. Puede utilizarlo junto con las acciones Select AI existentes: runsql, showsql y explainsql. Asegúrese de que su perfil de AI esté configurado para la generación NL2SQL y no para RAG.
Puede proporcionar comentarios para mejorar la precisión del SQL generado mediante la acción feedback o el procedimiento DBMS_CLOUD_AI.FEEDBACK. Al seleccionar AI, se crea un índice vectorial por defecto denominado <profile_name>_FEEDBACK_VECINDEX con atributos por defecto al utilizar la función de comentarios por primera vez. Este índice ayuda a acotar el SQL generado en el futuro en función de los comentarios proporcionados. Consulte Índice de vector para FEEDBACK para obtener más información.
Sugerencia:
Utilice el procedimiento DBMS_CLOUD_AI.FEEDBACK cuando el LLM especificado no genere la consulta SQL correcta o no devuelva el resultado esperado de una de las acciones NL2SQL SELECT AI. También puede utilizar el procedimiento DBMS_CLOUD_AI.FEEDBACK para agregar el SQL correcto directamente a la tabla vectorial. Esto ayuda a guiar la futura generación de SQL al servir de referencia para peticiones de datos similares.
-
Comentarios positivos: aprueba y confirma la precisión del SQL generado. El sistema almacena la consulta confirmada para referencia futura.
-
Comentarios negativos: si los resultados de la acción NL2SQL
SELECT AIno generan el SQL correcto, puede proporcionar las mejoras de consulta SQL necesarias medianteSELECT AI feedback <feedback>o el procedimientoDBMS_CLOUD_AI.FEEDBACKmediante la identificación de errores en la consulta o la orientación sobre lo que se esperaba en prosa. El sistema acota la consulta mediante un LLM y almacena la versión refinada para la futura generación de consultas Select AI. Las consultas refinadas almacenadas se utilizan como indicaciones y se envían al LLM como parte de la petición de datos aumentada.
Ventajas del uso de comentarios
La acción de comentarios y el procedimiento en Select AI introducen un mecanismo de ajuste de peticiones de datos que mejora la precisión de la generación de consultas SQL.
- Puede mejorar la precisión de las consultas SQL.
- Permite al propietario del perfil de IA proporcionar comentarios al confirmar las consultas correctas o sugerir correcciones al proporcionar la intención semántica o las definiciones de negocio para producir una consulta correcta.
- Utiliza los comentarios históricos como indicaciones para la generación futura de consultas y, por lo tanto, se adapta a sus necesidades.
Cómo proporcionar comentarios
Select AI le permite proporcionar comentarios mediante la acción feedback o llamando al procedimiento DBMS_CLOUD_AI.FEEDBACK.
Atención:
No utilice la acción de comentarios en aplicaciones en las que varios usuarios comparten sesiones de base de datos en un único usuario de base de datos propietario del perfil AI. El propietario del perfil de AI debe proporcionar comentarios solo después de confirmar que la consulta corregida es adecuada para todos los usuarios de ese perfil.
-
SQL_TEXT: incluya los comentarios entre comillas para la consulta SQL actual o puede obtenerSQL_TEXTpara una consulta concreta consultando la vistaV$MAPPED_SQL. -
SQL_ID: puede obtenerSQL_IDconsultando la vistaV$MAPPED_SQL. -
Utilice el último SQL generado: proporcione sus comentarios en lenguaje natural.
Note:
Para utilizar el último SQL, asegúrese de definir la salida del servidor en Oracle SQL*Plus u Oracle SQLcl. Debe tener el privilegioREADen las tablassys.v_$sessionyv_$mapped_sql.GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER; GRANT READ ON SYS.V_$SESSION TO ADB_USER;
Consulte Procedimiento FEEDBACK y Ejemplo: Seleccionar comentarios de AI para obtener más información.
Consultar datos de gráficos con gráficos de propiedades
Seleccione AI genera Property Graph Query (PGQ) en Oracle Property Graphs mediante lenguaje natural. Permite a los usuarios consultar datos de gráficos mediante el operador GRAPH_TABLE con un conocimiento mínimo de SQL.
Select AI amplía su lenguaje natural a la capacidad SQL (NL2SQL) para graficar estructuras que le permiten consultar gráficos de propiedades SQL mediante lenguaje natural. Select AI aplica el operador GRAPH_TABLE para interpretar relaciones y atributos en datos estructurados por gráficos. Genera consultas de gráficos SQL o PGQ basadas en los objetos de datos definidos en el perfil AI. Cuando se incluye un gráfico de propiedades en el perfil de AI, Select AI utiliza la IA generativa para crear una consulta de PGQ que haga referencia al gráfico mediante el operador GRAPH_TABLE. El LLM recibe automáticamente los metadatos del objeto de gráfico, como sentencias CREATE PROPERTY GRAPH, para generar consultas precisas. Cuando se especifica una tabla, vista u objeto relacional, Select AI genera una consulta SQL. Esta capacidad simplifica las consultas de coincidencia de patrones en los datos de gráficos almacenados en Oracle AI Database y reduce la dependencia de la creación manual de consultas SQL.
object_list, el LLM definido en el perfil de AI interpreta las peticiones de datos mediante el contexto de los gráficos de propiedades especificados. Select AI crea una petición de datos aumentada que incluye:
-
Instrucciones para crear consultas de PGQ.
-
Metadatos que describen los gráficos de propiedades proporcionados (a partir de sus sentencias
CREATE PROPERTY GRAPH).
Esta petición de datos aumentada se envía al LLM. Seleccione AI ejecuta la consulta y devuelve los resultados. Si se especifica un gráfico de propiedades junto con otros tipos de objetos, como tablas, esquemas o vistas en el perfil AI, la opción Seleccionar AI genera un error.
SQL frente a PGQ
object_list de su perfil AI.
-
Consulta SQL: utiliza datos relacionales como esquema, tablas o vistas.
-
Consulta de PGQ: utiliza gráficos de propiedades y aplica el operador
GRAPH_TABLEpara la coincidencia de patrones.
Consulte Gráfico de propiedades SQL y Consultas de GRAPH SQL para obtener más información.
Ventajas de usar Select AI en gráficos de propiedades
Los usuarios de bases de datos pueden consultar gráficos de propiedades mediante Select AI para generar consultas de grafos a partir del lenguaje natural, reduciendo el trabajo manual y mejorando la comprensión de las relaciones de grafos.
-
NL2SQL: ahora, la capacidad NL2SQL de Select AI se extiende a las consultas de gráficos, lo que permite a los usuarios escribir peticiones de datos en lenguaje natural, como "Buscar clientes que compraron un vestido".
-
SQL o PGQ: según el objeto de datos, Select AI genera automáticamente una consulta SQL o PGQ.
-
Productividad: reduce el tiempo y el esfuerzo en la creación de consultas de gráficos mediante el operador
GRAPH_TABLE. -
Conversaciones: Mantiene el contexto de la conversación y consulta un gráfico de propiedades.
Limitaciones
La selección de AI para Property Graphs no admite las siguientes capacidades:
-
Generación de datos sintéticos
-
Combinación de gráficos de propiedades con otros tipos de objetos en el perfil AI
-
Consultas intermitentes y no soportadas. Consulte Ejemplo: peticiones de datos de ejemplo para gráficos de propiedades para obtener más información.
Cómo utilizar Select AI en gráficos de propiedades
Select AI permite explorar datos de gráficos mediante la función DBMS_CLOUD_AI.GENERATE o mediante Select AI <action> <prompt>.
object_list de su perfil AI, puede utilizar:
-
SELECT AI <ACTION> <PROMPT>en la línea de comandos SQL para generar una salida. -
DBMS_CLOUD_AI.GENERATEy proporcione su petición de datos dentro de la función.
Las siguientes son las acciones soportadas: runsql, showsql, explainsql, narrate y showpropmt. Select AI for Property Graph también admite conversaciones a corto plazo y personalizables a largo plazo basadas en sesiones.
Consulte Ejemplo: Seleccionar AI para los gráficos de propiedades y Ejemplo: peticiones de datos de ejemplo para los gráficos de propiedades para obtener más información.
Ejemplos de uso de Select AI
Explore la integración de la IA selecta de Oracle con varios proveedores de IA soportados para generar, ejecutar y explicar SQL a partir de peticiones de datos en lenguaje natural o chatear con el LLM.
Ejemplo: selección de acciones de AI
En el siguiente ejemplo, se muestran acciones como runsql (valor por defecto), showsql, narrate, chat, explainsql, feedback y summarize que puede realizar con SELECT AI. Estos ejemplos utilizan el esquema sh con los atributos de perfil y proveedor de AI especificados en la función DBMS_CLOUD_AI.CREATE_PROFILE. Utilice las acciones Select AI después de definir el perfil AI mediante el procedimiento DBMS_CLOUD_AI.SET_PROFILE en la sesión actual.
Para generar un resumen del texto, utilice SELECT AI SUMMARIZE <TEXT>.
SQL> select ai how many customers exist;
CUSTOMER_COUNT
--------------
55500
SQL> select ai showsql how many customers exist;
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
SQL> select ai narrate how many customers exist;
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
SQL> select ai chat how many customers exist;
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.
SQL> select ai explainsql how many customers in San Francisco are married;
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
- 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
- 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
Remember to adjust the table and column names based on your actual schema if they differ from the example.
Feel free to ask if you have more questions related to SQL or database in general.
-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id 1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id 1v1z68ra6r9zf;
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;
SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
... (skipped 1000 rows in the middle)
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.Ejemplo: selección de IA con AWS
En este ejemplo, se muestra cómo puede utilizar AWS para generar, ejecutar y explicar SQL a partir de peticiones de datos en lenguaje natural o chatear con los modelos disponibles con AWS.
En el siguiente ejemplo se muestra cómo utilizar AWS como proveedor de IA con Amazon Bedrock y sus modelos básicos. El ejemplo muestra la creación de credenciales de AWS, el acceso a la red, la creación de un perfil de IA y el uso de acciones Select AI para generar consultas SQL a partir de peticiones de datos en lenguaje natural y el chat mediante los modelos básicos de AWS.
Para utilizar AWS, obtenga la clave de acceso, las claves secretas y el ID de modelo. Consulte . Utilice el ID de modelo como atributo model en el procedimiento DBMS_CLOUD_AI.CREATE_PROFILE. Debe especificar el atributo model explícitamente, ya que no se proporciona ningún modelo por defecto.
--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
--
-- Create Credential for AI provider
--
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'AWS_CRED',
username => '<your_AWS_access_key>',
password => '<your_AWS_secret_key>'
);
END;
/
PL/SQL procedure successfully completed.
--
-- Grant Network ACL for AWS
--
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'bedrock-runtime.us-east-1.amazonaws.com',
ace => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db)
);
END;
/
PL/SQL procedure successfully completed.
--
-- Create AI profile
--
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'AWS',
attributes =>'{"provider": "aws",
"credential_name": "AWS_CRED",
"object_list": [{"owner": "SH", "name": "customers"},
{"owner": "SH", "name": "countries"},
{"owner": "SH", "name": "supplementary_demographics"},
{"owner": "SH", "name": "profits"},
{"owner": "SH", "name": "promotions"},
{"owner": "SH", "name": "products"}],
"model" : "anthropic.claude-v2",
"conversation" : "true"
}');
END;
/
PL/SQL procedure successfully completed.
--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');
PL/SQL procedure successfully completed.
--
-- Use AI
--
SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500
SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46
SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"
SELECT AI explainsql how many customers in San Francisco are married;
"RESPONSE""SELECT
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'
Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""
SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:
1. Bert Katz
2. Madallyn Ladd
3. Henrietta Snodgrass
SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:
- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.
- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.
- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.
- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands.
- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.
- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.
- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.
- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.
- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.
So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."
--
--Clear the profile
--
BEGIN
DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.
--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
PL/SQL procedure successfully completed.Ejemplo: activación de conversaciones en Seleccionar IA
Estos ejemplos ilustran la activación de conversaciones en Select AI.
Note:
Un usuario con privilegios de administrador (ADMIN) debe otorgar EXECUTE y activar la lista de control de acceso de red (ACL).
Conversaciones Basadas en Sesión
Cree su perfil de IA. Defina el atributo conversation en true en el perfil, esta acción incluye el contenido de interacciones o peticiones de datos anteriores, lo que podría incluir metadatos de esquema, y defina el perfil. Una vez que el perfil está activado, puede comenzar a tener conversaciones con sus datos. Utiliza el lenguaje natural para hacer preguntas y hacer un seguimiento según sea necesario.
--Grants EXECUTE privilege to ADB_USER
--
SQL> grant execute on DBMS_CLOUD_AI to ADB_USER;
-- Grant Network ACL for OpenAI endpoint
--
SQL> BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'api.openai.com',
ace => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db)
);
END;
/
PL/SQL procedure successfully completed.
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME => 'OPENAI_CRED',
username => 'OPENAI',
password => '<your_api_token>');
PL/SQL procedure successfully completed.
--
-- Create AI profile
--
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OPENAI',
attributes =>'{"provider": "openai",
"credential_name": "OPENAI_CRED",
"object_list": [{"owner": "SH", "name": "customers"},
{"owner": "SH", "name": "countries"},
{"owner": "SH", "name": "supplementary_demographics"},
{"owner": "SH", "name": "profits"},
{"owner": "SH", "name": "promotions"},
{"owner": "SH", "name": "products"}],
"conversation": "true"
}');
END;
/
PL/SQL procedure successfully completed.
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
PL/SQL procedure successfully completed.
--
-- Get Profile in current session
--
SQL> SELECT DBMS_CLOUD_AI.get_profile() from dual;
DBMS_CLOUD_AI.GET_PROFILE()
--------------------------------------------------------------------------------
"OPENAI"
--
-- Use AI
--
what are the total number of customers;
CUSTOMER_COUNT
--------------
55500
break out count of customers by country;
RESPONSE
-----------------
COUNTRY_NAME CUSTOMER_COUNT
Italy 7780
Brazil 832
Japan 624
United Kingdom 7557
Germany 8173
United States of America 18520
France 3833
Canada 2010
Spain 2039
China 712
Singapore 597
New Zealand 244
Poland 708
Australia 831
Argentina 403
Denmark 383
South Africa 88
Saudi Arabia 75
Turkey 91
what age group is most common;
RESPONSE
--------------------------------------------------------------------------------
AGE_GROUP CUSTOMER_COUNT
65+ 28226
select ai keep the top 5 customers and their country by their purchases and include a rank in the result;
RESPONSE
--------------------------------------------------------------------------------
RANK CUSTOMER_NAME COUNTRY PURCHASES
1 Abigail Ruddy Japan 276
2 Abigail Ruddy Italy 168
3 Abigail Ruddy Japan 74
3 Abner Robbinette Germany 74
5 Abner Everett France 68
SQL> EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');
PL/SQL procedure successfully completed.Conversaciones personalizables
- Crear una conversación
- Establecer la conversación en la sesión de usuario actual
- Utilice
Select AI <action> <prompt>
- Utilice la función
DBMS_CLOUD_AI.CREATE_CONVERSATIONy, a continuación, defina la conversación medianteDBMS_CLOUD_AI.SET_CONVERSATION_ID. - Llame directamente al procedimiento
DBMS_CLOUD_AI.CREATE_CONVERSATIONpara crear y definir la conversación en un solo paso.
En el siguiente ejemplo, se muestra cómo crear una conversación mediante la función DBMS_CLOUD_AI.CREATE_CONVERSATION y cómo configurarla mediante el procedimiento DBMS_CLOUD_AI.SET_CONVERSATION_ID.
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION; -- in 19c, run SELECT DBMS_CLOUD_AI.create_conversation FROM dual;
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
PL/SQL procedure successfully completedEn el siguiente ejemplo, se muestra la ejecución del procedimiento DBMS_CLOUD_AI.CREATE_CONVERSATION para crear y definir conversation_id directamente.
EXEC DBMS_CLOUD_AI.create_conversation;
PL/SQL procedure successfully completed.También puede personalizar los atributos de conversación, como los atributos title, description, retention_days y conversation_length.
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
attributes => '{"title":"My first conversation",
"description":"this is my first conversation",
"retention_days":5,
"conversation_length":5}');
CREATE_CONVERSATION
------------------------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3APuede ver si existe una conversación determinada consultando la vista DBA/USER_CLOUD_AI_CONVERSATIONS.
-- Verify the setup
SELECT conversation_id, conversation_title, description, retention_days,
conversation_length FROM DBA_CLOUD_AI_CONVERSATIONS WHERE
conversation_id = '38F8B874-7687-2A3F-E063-9C6D4664EC3A';
CONVERSATION_ID CONVERSATION_TITLE DESCRIPTION RETENTION_DAYS CONVERSATION_LENGTH
------------------------------------ ----------------------------------------------- ---------------------------------- ------------------------------ -------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A My first conversation this is my first conversation +00005 00:00:00.000000 5
También puede verificar si se ha definido una conversación llamando a la función DBMS_CLOUD_AI.GET_CONVERSATION_ID.
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92Después de crear y establecer la conversación y activar tu perfil de IA, puedes comenzar a interactuar con tus datos. Utiliza el lenguaje natural para hacer preguntas y hacer un seguimiento según sea necesario.
Utilice SELECT AI <ACTION> <PROMPT>.
SELECT AI CHAT What is the difference in weather between Seattle and San Francisco?;
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco are both located on the West Coast of the United State
s, but they have distinct weather patterns due to their unique geography and cli
mate conditions. Here are the main differences:
1. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco, on the other hand, recei
ves significantly less rainfall, with an average of around 20 inches (51 cm) per
year.
2. **Cloud Cover**: Seattle is often cloudy, with an average of 226 cloudy days
per year. San Francisco is also cloudy, but to a lesser extent, with an average
of 165 cloudy days per year.
......
SELECT AI CHAT Explain the difference again in one paragraph only.;
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.El siguiente ejemplo muestra cómo se usan dos conversaciones indistintamente para hacer preguntas y verificar respuestas precisas. Cada conversación comienza con una pregunta diferente centrada en la comparación. Más adelante, cuando se hace la misma pregunta de seguimiento en ambas conversaciones, cada una devuelve una respuesta diferente en función de su contexto anterior.
-- First conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
-- Second conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => 'What is the difference in weather between Seattle and San Francisco?',
profile_name => 'GENAI',
action => 'CHAT',
params => '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco, both located in the Pacific Northwest and Northern Ca
lifornia respectively, experience a mild oceanic climate. However, there are som
e notable differences in their weather patterns:
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, espe
cially during the summer months. San Francisco's average temperature ranges from
45?F (7?C) in winter to 67?F (19?C) in summer, while Seattle's average temperat
ure ranges from 38?F (3?C) in winter to 64?F (18?C) in summer.
2. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, w
ith an average of around 20 inches (51 cm) per year. However, San Francisco's ra
infall is more concentrated during the winter months, while Seattle's rainfall i
s more evenly distributed throughout the year.
......
-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => 'How does the cost of living compare between New York and Los Angeles?',
profile_name => 'GENAI',
action => 'CHAT',
params => '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York and Los Angeles is relatively high compared to ot
her cities in the United States. However, there are some differences in the cost
of living between the two cities. Here's a comparison of the cost of living in
New York and Los Angeles:
1. Housing: The cost of housing is significantly higher in New York than in Los
Angeles. The median home price in New York is around $999,000, while in Los Ange
les it's around $849,000. Rent is also higher in New York, with the average rent
for a one-bedroom apartment being around $3,000 per month, compared to around $
2,400 per month in Los Angeles.
2. Food: The cost of food is relatively similar in both cities, with some variat
ion in the cost of certain types of cuisine. However, eating out in New York can
be more expensive, with the average cost of a meal at a mid-range restaurant be
ing around $15-20 per person, compared to around $12-18 per person in Los Angele
s.
......
-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => 'Explain the difference again in one paragraph only.',
profile_name => 'GENAI',
action => 'CHAT',
params => '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.
-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => 'Explain the difference again in one paragraph only.',
profile_name => 'GENAI',
action => 'CHAT',
params => '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York is approximately 20-30% higher than in Los Angele
s, mainly due to the higher cost of housing and transportation. New York has a m
edian home price of around $999,000 and average rent of $3,000 per month for a o
ne-bedroom apartment, compared to Los Angeles' median home price of $849,000 and
average rent of $2,400 per month. While the cost of food and utilities is relat
ively similar in both cities, the cost of transportation is higher in Los Angele
s due to its car-centric culture, but the cost of public transportation is highe
r in New York. Overall, the total monthly expenses for a single person in New Yo
rk can range from $4,600, compared to around $4,050 in Los Angeles, making New Y
ork the more expensive city to live in.
Puede llamar a la función DBMS_CLOUD_AI.GENERATE sin especificar una conversación; sin embargo, en tales casos, no se debe esperar una respuesta significativa.
-- Ask SELECT AI using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
prompt => 'Explain the difference again in one paragraph only.',
profile_name => 'GENAI',
action => 'CHAT') AS RESPONSE;
RESPONSE
--------------------------------------------------------------------------------
There is no previous explanation to draw from, as this is the beginning of our c
onversation. If you would like to ask a question or provide a topic, I would be
happy to explain the differences related to it in one paragraph.
Puede consultar las vistas de conversación DBMS_CLOUD_AI para revisar los detalles de conversación y petición de datos. Consulte para obtener más información.
Note:
LosLas vistas con el prefijo DBA_ solo están disponibles para los usuarios con privilegios de administrador (ADMIN).
SELECT conversation_id, conversation_title, description FROM dba_cloud_ai_conversations;
CONVERSATION_ID
------------------------------------
CONVERSATION_TITLE
----------------------------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
Seattle vs San Francisco Weather
The conversation discusses the comparison of weather patterns between Seattle an
d San Francisco, focusing on the differences in temperature, rainfall, fog, suns
hine, and seasonal variation between the two cities.
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
NY vs LA Cost Comparison
The conversation discusses and compares the cost of living in New York and Los A
ngeles, covering housing, food, transportation, utilities, and taxes to provide
an overall view of the expenses in both cities.
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
GROUP BY conversation_id;
CONVERSATION_ID COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92 2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92 2Puede actualizar title, description y retention_days de una conversación mediante el procedimiento DBMS_CLOUD_AI.UPDATE_CONVERSATION. Puede verificar la actualización consultando la vista de conversación DBMS_CLOUD_AI.
-- Update the second conversation's title, description and retention_days
SQL> EXEC DBMS_CLOUD_AI.update_conversation(conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92',
attributes => '{"retention_days":20,
"description":"This a description",
"title":"a title",
"conversation_length":20}');
PL/SQL procedure successfully completed.
-- Verify the information for the second conversation
SQL> SELECT conversation_title, description, retention_days
FROM dba_cloud_ai_conversations
WHERE conversation_id = '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92';
CONVERSATION_TITLE DESCRIPTION RETENTION_DAYS LENGTH
-------------------------- ------------------------------------ -------------- --------------
a title This a description 20 20Puede suprimir una petición de datos individual de las conversaciones y verificar la modificación consultando la vista de conversación DBMS_CLOUD_AI.
-- Find the latest prompt for first conversation
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92'
ORDER BY created DESC
FETCH FIRST ROW ONLY;
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA61-AFBA-E063-9C6D46644B92
-- Delete the prompt
EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');
PL/SQL procedure successfully completed.
-- Verify if the prompt is deleted
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92';
-- Only one prompt now
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA5A-AFBA-E063-9C6D46644B92Puede eliminar toda la conversación, lo que también quita todos los campos asociados a ella.
-- Delete the first conversation
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
PL/SQL procedure successfully completed.
-- Verify if the conversation and its prompts are removed
SELECT conversation_id FROM dba_cloud_ai_conversations;
-- We only have the second conversation now
CONVERSATION_ID
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts GROUP BY conversation_id;
-- We only have prompts in the second conversation
CONVERSATION_ID COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92 2Ejemplo: Seleccionar comentarios de IA
En estos ejemplos se muestra cómo puede utilizar el procedimiento DBMS_CLOUD_AI.FEEDBACK y los diferentes escenarios para proporcionar comentarios con el fin de mejorar la posterior generación de consultas SQL.
Note:
Puede proporcionar comentarios para las peticiones de datos Select AI SQL, incluso si la petición de datos no se ha ejecutado anteriormente. Seleccionar AI no requiere que la petición de datos SQL se utilice en una consulta antes de enviar comentarios; puede proporcionar comentarios para cualquier petición de datos válida en cualquier momento.
En el siguiente ejemplo se muestra cómo proporcionar correcciones al SQL generado como comentarios (comentarios negativos) mediante feedback_type como negative y proporcionar la consulta SQL.
Para agregar sus comentarios al perfil AI denominado OCI_FEEDBACK1, llame al procedimiento DBMS_CLOUD_AI.FEEDBACK con el parámetro sql_text que contiene la petición de datos. Consulte para obtener más información sobre los atributos. A continuación, recupere las columnas content y attributes de la tabla <profile_name>_FEEDBACK_VECINDEX$VECTAB, que está enlazada a esa consulta SQL específica. Seleccione AI para crear automáticamente esta tabla vectorial cuando utilice por primera vez la función de comentarios. Consulte para obtener más información.
SQL> select ai showsql how many movies;
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_text=> 'select ai showsql how many movies', feedback_type=> 'negative', response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"');
PL/SQL procedure successfully completed.
SQL> select CONTENT, ATTRIBUTES from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
CONTENT
----------------------------------------------------------------------------------------------------
how many movies
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}En el siguiente ejemplo se muestra cómo proporcionar su aprobación para que acepte y confirme el SQL generado (comentarios positivos) mediante feedback_type como positive.
En este ejemplo, la consulta recupera sql_id de la vista v$mapped_sql para la petición de datos determinada. Consulte V_MAPPED_SQL para obtener más información.
Agregue sus comentarios al perfil de AI denominado OCI_FEEDBACK1 llamando al procedimiento DBMS_CLOUD_AI.FEEDBACK con el parámetro sql_id. A continuación, recupere las columnas content y attributes de la tabla <profile_name>_FEEDBACK_VECINDEX$VECTAB, que está enlazada a esa consulta SQL específica. Seleccione AI para crear automáticamente esta tabla vectorial cuando utilice por primera vez la función de comentarios. Consulte para obtener más información.
SQL> select ai showsql how many distinct movie genres?;
RESPONSE
-----------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT g."GENRE_NAME") AS "Number of Movie Genres" FROM "ADB_USER"."GENRES" g
SQL> SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
SQL_ID
-------------
852w8u83gktc1
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
PL/SQL procedure successfully completed.
SQL> SELECT content, attributes FROM OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB WHERE JSON_VALUE(attributes, '$.sql_id') ='852w8u83gktc1';
CONTENT
----------------------------------------------------------------------------------------------------
how many distinct movie genres?
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT COUNT(DISTINCT g.\"GENRE_NAME\") AS \"Number of Movie Genres\" FROM \"ADB_USER\".\"GENRES\" g","feedback_type":"positive","sql_id":"852w8u83gktc1","sql_text":"select ai showsql how many distinct movie genres?","feedback_content":null}Puede proporcionar comentarios para peticiones de datos SQL incluso si la petición de datos no se ha utilizado anteriormente. Por ejemplo:
BEGIN
DBMS_CLOUD_AI.FEEDBACK(
profile_name=>'AI_PROFILE',
sql_text=>'select ai runsql how many products named PAD', -- Prior usage not required
feedback_type=>'negative',
response=>'SELECT COUNT(*) AS "Num" FROM "PRODUCTS"."CATG" o WHERE UPPER(o."NAME") LIKE ''%PAD%''',
feedback_content=>'Use LIKE instead of ='
);
END;
/En este caso, los comentarios para la petición de datos select ai runsql how many products named PAD se envían sin necesidad de utilizar la petición de datos de antemano.
DBMS_CLOUD_AI.FEEDBACK. En este ejemplo se muestra el uso de sql_id y sql_text junto con otros parámetros.
Note:
Seleccionar IA solo permite una entrada de comentarios única para cadasql_id. Si proporciona comentarios adicionales para el mismo sql_id, Select AI sustituye la entrada anterior por la nueva.
Consulte para obtener más información sobre los parámetros.
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
sql_id=> '852w8u83gktc1',
feedback_type=>'positive',
operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
sql_text=> 'select ai showsql how many movies',
feedback_type=> 'negative',
response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
sql_id=> '852w8u83gktc1',
operation=>'delete');En este ejemplo se muestra el uso de la acción feedback para mejorar el SQL generado sugiriendo las modificaciones mediante el lenguaje natural.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name=>'OCI_FEEDBACK1',
attributes=>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
"object_list": [{"owner": "ADB_USER", "name": "users"},
{"owner": "ADB_USER", "name": "movies"},
{"owner": "ADB_USER", "name": "genres"},
{"owner": "ADB_USER", "name": "watch_history"},
{"owner": "ADB_USER", "name": "movie_genres"},
{"owner": "ADB_USER", "name": "employees1"},
{"owner": "ADB_USER", "name": "employees2"}
]
}');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_FEEDBACK1');
PL/SQL procedure successfully completed.
select ai showsql rank movie duration;
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
select ai feedback use ascending sorting;
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
select ai showsql rank the movie duration;
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASCEn este ejemplo se muestra el uso de la acción feedback para aceptar el SQL generado mediante lenguaje natural.
--Positive feedback
select ai showsql which movies are comedy?;
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT m."TITLE" AS "Movie Title" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" WHERE g."GENRE_NAME" = 'comedy'
select ai feedback this is correct;
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you for your positive feedback. The SQL query for prompt "which movies are comedy?" is correctly implemented and delivering the expected results. It will be referenced for future optimizations and improvements.
Select AI Feedback Action Referring SQL_IDEn este ejemplo se muestra el uso de SQL_ID con la acción feedback para proporcionar comentarios para una consulta SQL generada concreta. Puede obtener SQL_ID consultando la tabla v$MAPPED_SQL.
-- Query mentioned with SQL_ID
select ai showsql how many movies are in each genre;
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" GROUP BY g."GENRE_NAME"
select sql_id from v$cloud_ai_sql where sql_text = 'select ai showsql how many movies are in each genre';
SQL_ID
-------------
8azkwc0hr87ga
select ai feedback for query with sql_id = '8azkwc0hr87ga', rank in descending sorting;
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many movies are in each genre" is successfully refined. The refined SQL query as following:
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies"
FROM "ADB_USER"."MOVIES" m
INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID"
INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID"
GROUP BY g."GENRE_NAME"
ORDER BY COUNT(m."MOVIE_ID") DESC
En este ejemplo, se muestra la acción feedback para una consulta Select AI específica mediante la inclusión de la petición de datos Select AI entre comillas seguida de sus comentarios.
-Query mentioned with SQL_TEXT
select ai showsql how many watch history in total;
RESPONSE
----------------------------------------------------------------------------------
SELECT COUNT(w."WATCH_ID") AS "Total Watch History" FROM "ADB_USER"."WATCH_HISTORY" w
select ai feedback for query "select ai showsql how many watch history in total", name the column as total_watch;
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many watch history in total" is successfully refined. The refined SQL query as following:
SELECT COUNT(w."WATCH_ID") AS "total_watch" FROM "ADB_USER"."WATCH_HISTORY" wEjemplo: selección de AI para gráficos de propiedades
En este ejemplo se muestra cómo puede utilizar el procedimiento DBMS_CLOUD_AI.GENERATE y una petición de datos en lenguaje natural para generar consultas de gráficos de PGQ para consultar datos de gráficos.
En este ejemplo, se muestra cómo definir varios gráficos de propiedades en el perfil AI, incluida una consulta de ejemplo y su salida.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'OPENAI',
attributes =>'{"provider": "openai",
"model": "gpt-4o",
"credential_name": "OPENAI_CRED",
"object_list": [{"owner": "ADB_USER", "name": "LDBC_GRAPH"},
{"owner": "ADB_USER", "name": "G"}]
}');
END;
/
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'OPENAI');
PL/SQL procedure successfully completed.
SQL> select ai who bought a dress;
CUSTOMER_N
----------
Kate
1 row selected.Ejemplo: peticiones de datos de ejemplo para gráficos de propiedades
Estos ejemplos muestran cómo crear datos de ejemplo y mostrar el SQL generado mediante la acción showsql para una petición de datos determinada.
En el siguiente ejemplo se crean tablas de ejemplo y un gráfico de propiedades.
CREATE TABLE Person
(
id NUMBER PRIMARY KEY,
firstName VARCHAR2(20 CHAR),
lastName VARCHAR2(20 CHAR),
age NUMBER,
jsonProp VARCHAR2(40 CHAR)
);
CREATE TABLE Post
(
id NUMBER PRIMARY KEY,
content VARCHAR2(20 CHAR)
);
CREATE TABLE personLikesPost
(
idPerson NUMBER REFERENCES Person (id),
idPost NUMBER REFERENCES Post (id)
);
CREATE TABLE personKnowsPerson
(
idPerson1 NUMBER REFERENCES Person (id),
idPerson2 NUMBER REFERENCES Person (id)
);
CREATE PROPERTY GRAPH person_graph
VERTEX TABLES (
Person KEY (id) LABEL Person
PROPERTIES (firstName, lastName, age, jsonProp),
Post KEY (id) LABEL Post
PROPERTIES(content)
)
EDGE TABLES (
personLikesPost
KEY(idPerson, idPost)
SOURCE KEY (idPerson) REFERENCES Person (id)
DESTINATION KEY (idPost) REFERENCES POST (id)
LABEL Likes NO PROPERTIES,
personKnowsPerson
KEY(idPerson1, idPerson2)
SOURCE KEY (idPerson1) REFERENCES Person (id)
DESTINATION KEY (idPerson2) REFERENCES Person (id)
LABEL Knows NO PROPERTIES
);
insert into Person values (1, 'John', 'Doe',23, '{"key1":"value1","key2":"value2"}');
insert into Person values (2, 'Scott', 'Tiger', 25, '{"key1":"value3","key2":"value4"}');
insert into Person values (3, 'Max', 'Power', 27, '{"key1":"value5","key2":"value6"}');
insert into Person values (4, 'Jane', 'Doe', 22, '{"key1":"value7","key2":"value8"}');
insert into Person (id, Firstname, age) values (5, 'Hans', 23);
insert into Person (id, Firstname, age) values (6, 'Franz', 24);
INSERT INTO Post VALUES (10, 'Lorem ipsum...');
INSERT INTO Post VALUES (11, 'Nulla facilisi...');
INSERT INTO Post VALUES (12, 'Vestibulum eget ..');
INSERT INTO Post VALUES (13, 'Sed fermentum...');
INSERT INTO Post VALUES (14, 'Fusce at ...');
INSERT INTO Post VALUES (15, 'Pellentesque sit ...');
INSERT INTO Post VALUES (16, 'Integer...');
INSERT INTO Post VALUES (17, 'Curabitur luctus ...');
INSERT INTO Post VALUES (18, 'Nam in ...');
INSERT INTO Post VALUES (19, 'Etiam ac ...');
insert into personKnowsPerson values (1, 2);
insert into personKnowsPerson values (2, 3);
insert into personKnowsPerson values (3, 4);
insert into personKnowsPerson values (4, 5);
insert into personKnowsPerson values (5, 6);
insert into personKnowsPerson values (6, 2);
insert into personKnowsPerson values (5, 3);
INSERT INTO personLikesPost VALUES (1, 10);
INSERT INTO personLikesPost VALUES (1, 11);
INSERT INTO personLikesPost VALUES (1, 12);
INSERT INTO personLikesPost VALUES (2, 10);
INSERT INTO personLikesPost VALUES (2, 13);
INSERT INTO personLikesPost VALUES (2, 14);
INSERT INTO personLikesPost VALUES (3, 11);
INSERT INTO personLikesPost VALUES (3, 15);
INSERT INTO personLikesPost VALUES (3, 16);
INSERT INTO personLikesPost VALUES (4, 12);
INSERT INTO personLikesPost VALUES (4, 17);
INSERT INTO personLikesPost VALUES (4, 18);
INSERT INTO personLikesPost VALUES (5, 13);
INSERT INTO personLikesPost VALUES (5, 14);
INSERT INTO personLikesPost VALUES (5, 19);
INSERT INTO personLikesPost VALUES (6, 15);
INSERT INTO personLikesPost VALUES (6, 16);
INSERT INTO personLikesPost VALUES (6, 17);
INSERT INTO personLikesPost VALUES (1, 18);
INSERT INTO personLikesPost VALUES (2, 19);
commit;Petición de datos: Find all the people IDs
SELECT person_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (v IS "PERSON")
COLUMNS (VERTEX_ID(v) AS person_id))Petición de datos: Find all the edge IDs
SELECT edge_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (v1) -[e]-> (v2)
COLUMNS (EDGE_ID(e) AS edge_id))Petición de datos: Find all the knows relationship IDs
SELECT knows_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p1 IS "PERSON") -[e IS "KNOWS"]-> (p2 IS "PERSON")
COLUMNS (EDGE_ID(e) AS knows_id))Petición de datos: List all people who know someone who liked the post 'Sed fermentum...'
SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p1 IS "PERSON") -[e1 IS "KNOWS"]-> (p2 IS "PERSON") -[e2 IS "LIKES"]-> (post IS "POST")
WHERE UPPER(post."CONTENT") = UPPER('Sed fermentum...')
COLUMNS (VERTEX_ID(p1) AS person_id, p1."FIRSTNAME" AS person_firstname, p1."LASTNAME" AS person_lastname))Petición de datos: Find first name and last name of all people
SELECT first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p IS "PERSON")
COLUMNS (p."FIRSTNAME" AS first_name, p."LASTNAME" AS last_name))Petición de datos: Find post contents liked by John Doe
SELECT post_content
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "LIKES"]-> (post IS "POST")
WHERE UPPER(p."FIRSTNAME") = UPPER('John') AND UPPER(p."LASTNAME") = UPPER('Doe')
COLUMNS (post."CONTENT" AS post_content))Petición de datos: Show all people (full name) and display their key1 value from jsonProp property
SELECT person_fullname, json_key1
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p IS "PERSON")
COLUMNS (
(p."FIRSTNAME" || ' ' || p."LASTNAME") AS person_fullname,
JSON_QUERY(p."JSONPROP", '$.key1') AS json_key1
)
)Petición de datos: Find friends of Scott Tiger ordered by their last name
SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastnamePetición de datos: Find all people ordered by first name. Skip one result and return 2 results only
SELECT person_firstname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p IS "PERSON")
COLUMNS (p."FIRSTNAME" AS person_firstname))
ORDER BY person_firstname
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLYConsultas no admitidas
Para las siguientes consultas, determinados LLM generan NL2SQL válidos, pero el SQL resultante utiliza funciones que aún no se admiten en Oracle AI Database 26ai.
Petición de datos: Find people that do not know Scott.
La subconsulta EXISTS no está soportada.
SELECT person_id, first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p1 IS "PERSON")
WHERE NOT EXISTS (
SELECT 1
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
MATCH (p2 IS "PERSON") -[e IS "PERSONKNOWSPERSON"]-> (p3 IS "PERSON"
)
WHERE p2."ID" = p1."ID" AND UPPER(p3."FIRSTNAME") = UPPER('Scott')
COLUMNS (1 AS dummy_value))
)
COLUMNS (p1."ID" AS person_id, p1."FIRSTNAME" AS first_name, p1."LASTNAME" A
S last_name))Petición de datos: Show all people and how many posts they have liked (show people even if they have not liked a post).
No se admite la coincidencia OPTIONAL.
SELECT person_id, person_firstname, person_lastname, liked_post_ids
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p is "PERSON") OPTIONAL MATCH (p) -[l is "PERSONLIKESPOST"]-> (post is "POST")
COLUMNS(
VERTEX_ID(p) as person_id,
p."FIRSTNAME" as person_firstname,
p."LASTNAME" as person_lastname,
JSON_ARRAYAGG(VERTEX_ID(post)) as liked_post_ids
))Petición de datos: Find all people that Scott can reach.
Las consultas que utilizan cuantificadores no enlazados no están soportadas.
SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
MATCH (src IS "PERSON") -[e IS "PERSONKNOWSPERSON"]->* (dst IS "PERSON")
WHERE src."FIRSTNAME" = 'Scott'
COLUMNS (
VERTEX_ID(dst) AS person_id,
dst."FIRSTNAME" AS person_firstname,
dst."LASTNAME" AS person_lastname
)
)Consultas intermitentes
Se ha demostrado que los LLM tienen dificultades al traducir consultas que requieren más de un operador GRAPH_TABLE. A continuación se muestran algunos ejemplos:
Petición de datos: Show people who have liked all the same posts as Hans
SELECT person_id, person_name
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST"),
(other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post)
WHERE hans."FIRSTNAME" = 'Hans'
COLUMNS (VERTEX_ID(other_person) as person_id, other_person."FIRSTNAME" AS person_name)
)
WHERE NOT EXISTS (
SELECT 1
FROM GRAPH_TABLE("PERSONGRAPH"
MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST")
WHERE hans."FIRSTNAME" = 'Hans'
COLUMNS (VERTEX_ID(post) as post_id)
) hans_posts
LEFT JOIN GRAPH_TABLE("PERSONGRAPH"
MATCH (other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post
is "POST")
COLUMNS (VERTEX_ID(post) as post_id)
) other_posts
ON hans_posts.post_id = other_posts.post_id
WHERE other_posts.post_id IS NULL
)Petición de datos: Find all names of the people that can be reached in a 1 to 3 edge path
SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (start_person IS "PERSON") -[e IS "KNOWS"]->{1,3} (end_person IS "PERSON")
COLUMNS (end_person."FIRSTNAME" AS person_name))Petición de datos: Find all names of the people that can be reached in a 1 to 3 edge path where each person is younger than the next one
SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (start_person IS "PERSON") ((v1 IS "PERSON") -[e IS "KNOWS"]-> (v2 IS"PERSON") WHERE v1."AGE" < v2."AGE"){1,3} (end_person IS "PERSON")
COLUMNS (end_person."FIRSTNAME" AS person_name))Los LLM a menudo tienen dificultades para traducir consultas que requieren agrupación y agregación. Un error común es colocar agregaciones en la cláusula COLUMNS en lugar de en la cláusula SELECT.
Petición de datos: Find the average number of posts liked by all the users
SELECT AVG(COUNT(post)) AS average_liked_count
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "PERSONLIKESPOST"]-> (post IS "POST")
COLUMNS (VERTEX_ID(p) AS person, VERTEX_ID(post) AS post))
GROUP BY person;Ejemplo: Mejora de la Generación de Consultas SQL
Estos ejemplos demuestran cómo los comentarios, las anotaciones, la clave ajena y las restricciones de integridad referencial en las tablas y columnas de la base de datos pueden mejorar la generación de consultas SQL a partir de peticiones de datos en lenguaje natural.
Si tiene comentarios de tabla y columna en las tablas de base de datos, active el parámetro "comments":"true" en la función DBMS_CLOUD_AI.CREATE_PROFILE para recuperar comentarios de nivel de tabla y de columna. Los comentarios se agregan a los metadatos del LLM para una mejor generación de SQL.
-- Adding comments to table 1, table 2, and table 3. Table 1 has 3 columns, table 2 has 7 columns, table 3 has 2 columns.
-- TABLE1
COMMENT ON TABLE table1 IS 'Contains movies, movie titles and the year it was released';
COMMENT ON COLUMN table1.c1 IS 'movie ids. Use this column to join to other tables';
COMMENT ON COLUMN table1.c2 IS 'movie titles';
COMMENT ON COLUMN table1.c3 IS 'year the movie was released';
-- TABLE2
COMMENT ON TABLE table2 IS 'transactions for movie views - also known as streams';
COMMENT ON COLUMN table2.c1 IS 'day the movie was streamed';
COMMENT ON COLUMN table2.c2 IS 'genre ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c3 IS 'movie ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c4 IS 'customer ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c5 IS 'device used to stream, watch or view the movie';
COMMENT ON COLUMN table2.c6 IS 'sales from the movie';
COMMENT ON COLUMN table2.c7 IS 'number of views, watched, streamed';
-- TABLE3
COMMENT ON TABLE table3 IS 'Contains the genres';
COMMENT ON COLUMN table3.c1 IS 'genre id. use this column to join to other tables';
COMMENT ON COLUMN table3.c2 IS 'name of the genre';
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'myprofile',
attributes =>
'{"provider": "azure",
"azure_resource_name": "my_resource",
"azure_deployment_name": "my_deployment",
"credential_name": "my_credential",
"comments":"true",
"object_list": [
{"owner": "moviestream", "name": "table1"},
{"owner": "moviestream", "name": "table2"},
{"owner": " moviestream", "name": "table3"}
]
}'
);
DBMS_CLOUD_AI.SET_PROFILE(
profile_name => 'myprofile'
);
END;
/
--Prompts
select ai what are our total views;
RESPONSE
-------------------------------------------------
TOTAL_VIEWS
-----------
97890562
select ai showsql what are our total views;
RESPONSE
-------------------------------------------------------------------------
SELECT SUM(QUANTITY_SOLD) AS total_views
FROM "moviestream"."table"
select ai what are our total views broken out by device;
DEVICE TOTAL_VIEWS
-------------------------- -----------
mac 14719238
iphone 20793516
ipad 15890590
pc 14715169
galaxy 10587343
pixel 10593551
lenovo 5294239
fire 5296916
8 rows selected.
select ai showsql what are our total views broken out by device;
RESPONSE
---------------------------------------------------------------------------------------
SELECT DEVICE, COUNT(*) AS TOTAL_VIEWS
FROM "moviestream"."table"
GROUP BY DEVICEEn este ejemplo se muestra la integración de anotaciones en Select AI, aplicable en Oracle Database 23ai. Las anotaciones se agregan a los metadatos que se envían al LLM.
Si tiene una tabla con anotaciones en el esquema, active "annotations":"true" en la función DBMS_CLOUD_AI.CREATE_PROFILE para indicar a Select AI que agregue anotaciones a los metadatos.
--
-- Annotations
--
CREATE TABLE emp2 (
empno NUMBER,
ename VARCHAR2(50) ANNOTATIONS (display 'lastname'),
salary NUMBER ANNOTATIONS ("person_salary", "column_hidden"),
deptno NUMBER ANNOTATIONS (display 'department')
)ANNOTATIONS (requires_audit 'yes', version '1.0', ówner 'HR Organization');
Table created.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'GOOGLE_ANNOTATIONS',
attributes => '{"provider": "google",
"credential_name": "GOOGLE_CRED",
"object_list": [{"owner": "ADB_USER", "name": "emp2"}],
"annotations" : "true"
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI.SET_PROFILE('GOOGLE_ANNOTATIONS');
PL/SQL procedure successfully completed.En este ejemplo, se demuestra la capacidad del LLM para generar condiciones JOIN precisas mediante la recuperación de las restricciones de clave ajena y clave referencial en los metadatos del LLM. Las restricciones de clave ajena y clave referencial proporcionan datos de relación estructurada entre las tablas y el LLM.
Active "constraints":"true" en la función DBMS_CLOUD_AI.CREATE_PROFILE para que Select AI recupere la clave ajena y la clave referencial.
--
-- Referential Constraints
--
CREATE TABLE dept_test (
deptno NUMBER PRIMARY KEY,
dname VARCHAR2(50)
);
Table created.
CREATE TABLE emp3 (
empno NUMBER PRIMARY KEY,
ename VARCHAR2(50),
salary NUMBER,
deptno NUMBER,
CONSTRAINT emp_dept_fk FOREIGN KEY (deptno) REFERENCES dept_test(deptno)
);
Table created.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name=>'GOOGLE_CONSTRAINTS',
attribues =>'{"provider": "google",
"credential_name": "GOOGLE_CRED",
"object_list": [{"owner": "ADB_USER", "name": "dept_test"},
{"owner": "ADB_USER", "name": "emp3"}],
"constraints" : "true"
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI.SET_PROFILE('GOOGLE_CONSTRAINTS');
PL/SQL procedure successfully completed.En estos ejemplos se muestra cómo Select AI detecta automáticamente las tablas relevantes y envía metadatos solo para las tablas específicas relevantes para la consulta en Oracle Database 23ai. Para activar esta función, defina object_list_mode en automated. Esto crea automáticamente un índice vectorial denominado <profile_name>_OBJECT_LIST_VECINDEX. El índice vectorial se inicializa con atributos y valores por defecto, como refresh_rate, similarity_threshold y match_limit. Puede modificar algunos de los atributos mediante DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX. Consulte para obtener más información.
Un perfil está configurado para utilizar object_list para especificar el esquema o los objetos del esquema, mientras que el otro no especifica object_list. Sin embargo, se espera la misma construcción SQL.
Revise para proporcionar acceso al paquete DBMS_CLOUD_AI y proporcionar acceso de red al proveedor de AI.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name=>'OCI_AUTO',
attributes=>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"object_list": [{"owner": "SH"}],
"oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
"model" : "meta.llama-3.3-70b-instruct"
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_AUTO');
PL/SQL procedure successfully completed.
select ai showsql how many customers in San Francisco are married;
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT c."CUST_ID") AS "NUMBER_OF_CUSTOMERS"
FROM "SH"."CUSTOMERS" c
WHERE UPPER(c."CUST_CITY") = UPPER('San Francisco')
AND UPPER(c."CUST_MARITAL_STATUS") = UPPER('married')En el siguiente ejemplo se compara el mismo escenario sin utilizar object_list. Si no especifica object_list, Select AI selecciona automáticamente todos los objetos disponibles para el esquema actual.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name=>'OCI_AUTO1',
attributes=>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
"object_list_mode": "automated",
"model" : "meta.llama-3.3-70b-instruct"
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_AUTO1');
PL/SQL procedure successfully completed.
select ai showsql how many customers in San Francisco are married?;
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT COUNT(c."CUST_ID") AS "Number_of_Customers"
FROM "SH"."CUSTOMERS" c
WHERE UPPER(c."CUST_CITY") = UPPER('San Francisco')
AND UPPER(c."CUST_MARITAL_STATUS") = UPPER('Married')