Autor: Sven Loesekann
Tecnologías: angular, cli angular, material angular, mecanografiado, arranque de primavera, AI de primavera, OpenAi, Ollama, Postgresql (vector, h store), liquibase, jpa, gradle, java, java
Este es un proyecto para mostrar cómo usar Sprerai para chatear con los documentos en una biblioteca. El documento se puede cargar luego se almacenan en una base de datos normal y vectorial. La IA se usa para crear integridades a partir de los fragmentos de los documentos que se almacenan en la base de datos Vector. En las preguntas de chat se pueden hacer que se entreguen en los incrustaciones y se utilizan para las solicitudes de la base de datos Vector. El vector del documento con la distancia más baja se utiliza para cargar el documento de la base de datos y solicitar una respuesta de la IA según los tokens de contenido del documento. Eso permite que la IA genere la respuesta basada en el contenido del documento y limita las alucinaciones. Se proporciona un enlace al documento fuente para futuras investigaciones.
El proyecto utiliza Spring Boot con Spring AI para acceder a OpenAI y la base de datos Vector. El DB PostgreSQL se usa con las extensiones Vector, Hstore y UUID-ASSP. Liquibase se utiliza para administrar las migraciones de la base de datos. JPA se utiliza para el acceso a la base de datos en los servicios por los controladores REST. Para la angular frontend, el material angular y el mecanografiado se usan para crear la tabla de documentos, el diálogo de carga y el chat de documento. Angular CLI se usa para la construcción de frontend y se gradúa para la construcción del proyecto.
Ollama se usa para usar modelos AI/LLM de ejecución local. Ollama se puede instalar o ejecutar como una imagen de Docker en una máquina local. Ollama admite una biblioteca de modelos AI/LLM para diferentes casos de uso. Se pueden usar modelos como Llava para la descripción de la imagen, Falcon para la respuesta a las preguntas basadas en trapo, se puede usar SQLCoder para la generación SQL y MixTral para llamadas de funciones. Ollama puede usar GPU si están disponibles y trabaja en CPU sin ellos. Spring AI tiene soporte de Ollama que hace que el uso sea similar al uso de un servicio AI. En las CPU actuales a menudo hay problemas de rendimiento. Los proveedores de la CPU quieren agregar motores AI a sus CPU en el futuro para resolver estos problemas.
El proyecto utiliza Spring Boot con Spring AI para cuestionar una base de datos de imágenes que usa PostgreSQL con PGVector Extension y Ollama. Las imágenes importadas y redimensionadas son descripciones generadas con el modelo LLAVA que se ejecuta localmente en Ollama. Estas descripciones se convierten en incrustaciones y se almacenan con la descripción en la base de datos Vector. La imagen y los metadatos se almacenan en la base de datos relacional. Una pregunta para la base de datos de imágenes se convierte en incrustaciones y se consulta la base de datos de vector para el vecino más cercano. Las mejores coincidencias se devuelven con imagen y descripción. El resultado se muestra en la frontend. Este habilita es un nuevo tipo de búsqueda de imágenes que no fue posible antes de que AI/LLMS se usara.
El proyecto utiliza Spring AI para convertir las preguntas con un LLMS en consultas SQL y mostrar el resultado en el frontend. Basado en metadatos que se proporcionan para el conjunto de datos relacional, el LLM puede crear incrustaciones para los metadatos de las tablas y columnas. El proyecto también crea incrustaciones para el contenido de ciertas columnas para poder decidir si la columna debe usarse como unirse a la consulta SQL. Con esos metadatos de incrustación, el LLM puede convertir una pregunta en una consulta SQL razonable y mostrar el resultado en el frontend. El frontend utiliza una tabla de material angular con una cantidad flexible de columnas y filas.
El proyecto utiliza Spring AI para convertir las preguntas sobre los libros en una llamada de función REST a la API OpenLibrary. Utiliza el modelo LLAMA3.1 y la función Spring AI llamando a API. La respuesta API se usa para crear la respuesta.
El proyecto utiliza Spring AI para generar clases de prueba. Para hacer eso se proporciona la clase para probar y las clases de la que depende la clase para probar. También se puede proporcionar una clase de ejemplo de prueba. El AI/LLM basado en Ollama obtiene un mensaje con toda la información y genera un borrador de la fuente de la clase de prueba.
El proyecto utiliza Spring AI para generar resúmenes de libros. Para generar los resúmenes, se deben proporcionar los encabezados del capítulo y el encabezado después del último capítulo. Luego se generan resúmenes de los capítulos en forma de puntos de bala. Se crea un resumen del libro de los resúmenes del capítulo.
El proyecto muestra cómo usar Spring AI para generar respuestas basadas en un conjunto proporcionado de documentos con un enlace a la fuente. Angular Frontend proporciona la interfaz de usuario para el backend y muestra las respuestas.
El proyecto muestra cómo usar Spring AI para generar descripciones para imágenes cargadas y almacenar la imagen, las descripciones y la descripción incrustaciones en la base de datos. Las preguntas que se hacen a la base de datos de imágenes se convierten en incrustaciones y se devuelven las descripciones de mejor ajuste con las imágenes. Angular Frontend proporciona una interfaz de usuario para mostrar el resultado y cargar las imágenes.
El proyecto muestra cómo usar Spring AI para generar consultas SQL basadas en metadatos proporcionados para las tablas/columnas. Angular Frontend proporciona una interfaz de usuario para mostrar el resultado en la tabla.
El proyecto muestra cómo usar Spring AI para seleccionar una interfaz REST para llamar y proporcionar los parámetros para la llamada REST. Angular Frontend proporciona la interfaz de usuario para hacer la pregunta y mostrar el resultado de la llamada REST.
El proyecto muestra cómo usar Spring AI para crear una base de datos de imágenes que se pueda consultar con preguntas de lenguaje natural y devuelve las imágenes coincidentes más cercanas con sus descripciones.
Spring AI hace que el uso de servicios Operai / Ollama sea simple y útil y este proyecto lo demuestra.
El proyecto tiene un diagrama de contexto del sistema, un diagrama de contenedores y un diagrama de componentes. Los diagramas se han creado con estructurizr. El archivo runstructurizr.sh contiene los comandos para usar StructUrizr y el directorio StructUrizr contiene el archivo DSL.
En el directorio Helm hay una configuración de Kubernetes para ejecutar el proyecto AidocumentLibraryChat con Minikube. La tabla de timón implementa la base de datos Postgres y el AidocumentLibraryChat con los parámetros necesarios (SpringProfile está en valores.yaml) para ejecutarse. Utiliza el soporte de límite de recursos de JDK 16 para limitar la memoria. Kubernetes limita el uso de CPU y utiliza los startupprobes y LivityProbes que proporciona el actuador de primavera.
En el archivo runpostgresql.sh están los comandos para extraer y ejecutar la imagen de Docker PostgreSQL con la extensión de vector localmente.
Para obtener la clave API de OpenAI, debe crear una cuenta en https://platform.openai.com y crear una clave en la configuración del usuario. Esa clave debe agregarse en la aplicación. Como alternativa, se puede proporcionar como la variable de entorno 'Open-API-Key'.
Ollama puede ejecutar el modelo AI localmente. El archivo runollama.sh tiene los comandos para ejecutarlo como contenedor Docker. La aplicación debe construirse con la propiedad de construcción 'UseOllama = True' Gradle para incluir las dependencias. La aplicación debe iniciarse con el perfil 'Ollama' para encender las configuraciones/características para usar modelos basados en Ollama. Ollama tiene apoyo para la aceleración de GPU.
PostgreSQL con extensión vectorial 0.5.1 o más nuevo
Java 21 o más nuevo
Gradle 8.3 o más nuevo
Nodejs 18.13.x o más nuevo
NPM 8.19.x o más nuevo
Angular CLI 17 o más nuevo