Desarrollo de una aplicación RAG con Spring AI y Azure OpenAI
En esta unidad, aprenderá a implementar la generación aumentada de recuperación (RAG) en una aplicación de Spring Boot mediante la búsqueda de similitud vectorial proporcionada por la pgvector extensión en una base de datos postgreSQL. Presentamos conceptos de RAG relevantes, como incrustaciones, modelos de inserción y almacenes de vectores. Al final de esta unidad, debe comprender cómo aplicar estas herramientas para mejorar las aplicaciones con funcionalidades avanzadas de búsqueda y recuperación.
¿Qué son las inserciones?
Las incrustaciones son representaciones vectoriales densas de datos. En términos más sencillos, las inserciones son una manera de convertir datos complejos, como palabras o imágenes, en un conjunto de números - vectores - que un equipo puede procesar fácilmente. En el procesamiento de lenguaje natural (NLP), las incrustaciones representan palabras, oraciones o documentos como vectores en un espacio dimensional. En estos vectores, cada palabra o oración se representa como una lista de números. Estos números no son aleatorios, están diseñados para capturar el significado y las relaciones entre las palabras.
Estos vectores capturan relaciones semánticas, lo que permite la búsqueda y el análisis avanzados. Por ejemplo, si busca "reina" en una base de datos, el sistema también puede encontrar términos relacionados como "king" o "regalías" porque sus vectores están cerca entre sí. Esta funcionalidad hace que las incrustaciones sean una herramienta eficaz para tareas como motores de búsqueda, sistemas de recomendaciones y traducción de idioma.
Uso de modelos de inserción de Azure OpenAI
Los modelos de inserción son herramientas esenciales en el procesamiento de lenguaje natural (NLP) y otras aplicaciones de inteligencia artificial. Convierten datos complejos, como texto, en representaciones vectoriales densas que capturan el significado semántico de los datos. A continuación, estos vectores se pueden usar para varias tareas, incluidas la búsqueda, la recomendación y la agrupación en clústeres.
Azure OpenAI proporciona modelos de inserción eficaces que puede integrar fácilmente en sus aplicaciones. Estos modelos pueden generar incrustaciones para varios tipos de datos, lo que permite funcionalidades avanzadas de búsqueda y recuperación. Uno de los modelos de inserción de texto más usados de OpenAI es el text-embedding-ada-002 modelo. Puede usar este modelo para varias aplicaciones, incluidos los sistemas de búsqueda, agrupación en clústeres y recomendaciones, debido a su capacidad de comprender y representar datos de texto complejos. Cuando se usa con modelos chatGPT, text-embedding-ada-002 mejora la capacidad del bot de chat para comprender el contexto, recuperar información relevante y proporcionar respuestas más precisas y contextualmente adecuadas. Mediante el uso text-embedding-ada-002 de ChatGPT, puede crear aplicaciones más inteligentes y con capacidad de respuesta que proporcionen mejores experiencias de usuario.
Implementación de VectorStore en Spring AI
VectorStore es una clase proporcionada por spring AI pgvector Store Spring Boot Starter. Simplifica la integración de las funcionalidades de almacenamiento y búsqueda de vectores en las aplicaciones de Spring Boot. Usa la extensión de pgvector PostgreSQL para almacenar y consultar incrustaciones de documentos de forma eficaz.
Puede agregar la VectorStore dependencia de inicio de Spring Boot al proyecto mediante la siguiente dependencia:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
</dependency>
Al iniciarse, el pgvector iniciador de Spring Boot intenta instalar las extensiones de base de datos necesarias y crea la tabla necesaria vector_store con un índice si aún no existe.
Opcionalmente, puede realizar esta tarea manualmente mediante las siguientes instrucciones SQL:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE IF NOT EXISTS vector_store (
id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
content text,
metadata json,
embedding vector(1536) // 1536 is the default embedding dimension
);
CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);
El VectorStore también requiere una instanciaEmbeddingModelpara calcular incrustaciones para los documentos. Para usar el modelo de inserción de Azure OpenAI, agregue la siguiente dependencia al proyecto:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
</dependency>
En el inicio de la aplicación, Spring Boot configura VectorStore automáticamente con las siguientes propiedades de aplicación de Azure OpenAI:
spring.ai.azure.openai.api-key=${AZURE_OPENAI_API_KEY}
spring.ai.azure.openai.endpoint=${AZURE_OPENAI_ENDPOINT}
spring.ai.azure.openai.chat.model=gpt-4o
spring.ai.azure.openai.embedding.model=text-embedding-ada-002
Agregar documentos al almacén de vectores
Para agregar documentos al almacén de vectores, debe generar incrustaciones y almacenarlos junto con el contenido original. En el ejemplo de código siguiente se muestra cómo usar la VectorStore clase en una aplicación de Spring Boot para almacenar y administrar documentos:
@Autowired
private VectorStore vectorStore;
List<Document> documents = List.of(
new Document("A vector store is a specialized database designed to store and manage high-dimensional vectors. ", Map.of("prompt", "What is Vector Store")),
new Document("PGVectorStore is a Spring Boot starter that simplifies the integration of vector storage and search capabilities into your Spring Boot applications.", Map.of("prompt","Why Use PGVectorStore?"))
);
vectorStore.add(documents);
En la lista siguiente se proporciona una explicación detallada de cómo funciona este código:
- La anotación
@Autowiredde Spring inyecta una instancia de la claseVectorStoreen tu componente. - Se crea una lista de
Documentobjetos. CadaDocumentcontiene contenido y metadatos; por ejemplo, un mensaje. - La lista de documentos se agrega a
vectorStore. ElVectorStoregenera incrustaciones mediante el configuradoEmbeddingModely almacena tanto el contenido como las incrustaciones en la base de datos.
Consulta de documentos
Una vez almacenados los documentos, puede realizar búsquedas de similitud para buscar documentos que sean semánticamente similares a una consulta determinada. En el ejemplo de código siguiente se realiza una búsqueda de similitud mediante la VectorStore clase :
List<Document> results = vectorStore.similaritySearch(
SearchRequest.builder()
.query("Spring")
.topK(5)
.build()
);
En la lista siguiente se proporciona una explicación detallada de este ejemplo:
- El
similaritySearchmétodo de laVectorStoreclase se usa para buscar documentos similares a una consulta determinada. - El patrón de construcción crea un objeto
SearchRequest. - El
querymétodo establece la cadena de búsqueda. - La
topK(5)llamada al método especifica que la búsqueda devuelve los cinco documentos más similares principales.
Resumen de la unidad
En esta unidad, aprendiste los conceptos subyacentes al uso de VectorStore de Spring Boot y Azure OpenAI Spring Boot Starter para administrar y consultar las representaciones incrustadas de documentos. Ha explorado la importancia de las incrustaciones, cómo generarlas y almacenarlas, y cómo realizar búsquedas de similitud.