Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ámbito de la inteligencia artificial generativa, los modelos de lenguaje grande (LLM) como GPT han transformado el procesamiento del lenguaje natural. Sin embargo, una tendencia emergente en la inteligencia artificial es el uso de almacenes vectoriales, que desempeñan un papel fundamental en la mejora de las aplicaciones de inteligencia artificial.
En este tutorial se explora cómo utilizar Azure DocumentDB, LangChain y OpenAI para implementar la generación aumentada de recuperación (RAG), mejorando así el rendimiento de la inteligencia artificial. También se discuten los Modelos de Lenguaje de Gran Tamaño (LLMs) y sus limitaciones. Exploramos el paradigma adoptado rápidamente de RAG y analizamos brevemente el marco LangChain y los modelos de Azure OpenAI. Por último, integramos estos conceptos en una aplicación real. Al final, los lectores tendrán un conocimiento sólido de estos conceptos.
Comprender los LLM y sus limitaciones
Las LLM son modelos avanzados de red neuronal profunda entrenados en conjuntos de datos de texto extensos, lo que les permite comprender y generar texto similar al humano. Aunque son revolucionarios en el procesamiento de lenguaje natural, los LLM tienen limitaciones inherentes:
- Alucinaciones: los LLM a veces generan información incorrecta o sin fundamento, lo que se conoce como "alucinaciones".
- Datos obsoletos: los LLM se entrenan en conjuntos de datos estáticos que podrían no incluir la información más reciente, lo que limita su relevancia actual.
- Sin acceso a los datos locales del usuario: las LLM no tienen acceso directo a datos personalizados o localizados, lo que restringe su capacidad de proporcionar respuestas personalizadas.
- Límites de token: las LLM tienen un límite máximo de tokens por interacción, lo que restringe la cantidad de texto que pueden procesar a la vez. Por ejemplo, el gpt-3.5-turbo de OpenAI tiene un límite de token de 4096.
Uso de la generación aumentada de recuperación
RAG es una arquitectura diseñada para superar las limitaciones de LLM. La RAG usa un vector de búsqueda para recuperar documentos relevantes en función de una consulta de entrada, proporcionando estos documentos como contexto al LLM para generar respuestas más precisas. En lugar de confiar únicamente en patrones entrenados previamente, la RAG mejora las respuestas mediante la incorporación de información relevante actualizada. Este enfoque ayuda a:
- Minimizar las alucinaciones: Fundamentar las respuestas en información fáctica.
- Asegurar información actual: recuperar los datos más recientes para garantizar respuestas actualizadas.
- Usar bases de datos externas: aunque no concede acceso directo a los datos personales, RAG permite la integración con bases de conocimiento externas y específicas del usuario.
- Optimizar el uso de tokens: al centrarse en los documentos más relevantes, RAG hace que el uso de tokens sea más eficaz.
En este tutorial se muestra cómo se puede implementar RAG mediante Azure DocumentDB para crear una aplicación de respuesta a preguntas adaptada a los datos.
Introducción a la arquitectura de aplicaciones
En el diagrama de arquitectura siguiente se muestran los componentes clave de nuestra implementación de RAG:
Componentes y marcos clave
Ahora analizaremos los distintos marcos, modelos y componentes usados en este tutorial, resaltando sus roles y matices.
Azure DocumentDB
Azure DocumentDB admite búsquedas de similitud semántica, esenciales para las aplicaciones con tecnología de inteligencia artificial. Permite representar datos en varios formatos como inserciones vectoriales, que se pueden almacenar junto con los datos de origen y los metadatos. Con un algoritmo de vecinos más cercanos aproximado, como el Pequeño mundo navegable jerarquizado (HNSW), estas inserciones se pueden consultar para búsquedas rápidas de similitud semántica.
Marco de LangChain
LangChain simplifica la creación de aplicaciones de LLM proporcionando una interfaz estándar para cadenas, varias integraciones de herramientas y cadenas de un extremo a otro para tareas comunes. Permite a los desarrolladores de inteligencia artificial crear aplicaciones LLM que usan orígenes de datos externos.
Aspectos clave de LangChain:
- Cadenas: secuencias de componentes que resuelven tareas específicas.
- Componentes: módulos como contenedores de LLM, contenedores de almacén de vectores, plantillas de solicitud, cargadores de datos, divisores de texto y recuperadores.
- Modularidad: simplifica el desarrollo, la depuración y el mantenimiento.
- Popularidad: un proyecto de código abierto que obtiene rápidamente la adopción y evoluciona para satisfacer las necesidades del usuario.
Interfaz de Azure App Services
App Services proporciona una plataforma sólida para crear interfaces web fáciles de usar para aplicaciones de inteligencia artificial generativa. En este tutorial se usa Azure App Services para crear una interfaz web interactiva para la aplicación.
Modelos de OpenAI
OpenAI es líder en la investigación de inteligencia artificial, lo que proporciona varios modelos para la generación de lenguajes, la vectorización de texto, la creación de imágenes y la conversión de audio a texto. En este tutorial, usaremos los modelos de inserción y lenguaje de OpenAI, cruciales para comprender y generar aplicaciones basadas en lenguaje.
Inserción de modelos frente a modelos de generación de lenguaje
| Categoría | Modelo de inserción de texto | Modelo de lenguaje |
|---|---|---|
| propósito | Convierte el texto en incrustaciones vectoriales. | Comprende y genera lenguaje natural. |
| Function | Transforma los datos textuales en matrices multidimensionales de números, capturando el significado semántico del texto. | Comprende y genera texto similar al humano en función de una entrada determinada. |
| Salida | Matriz de números (inserciones vectoriales). | Texto, respuestas, traducciones, código, etc. |
| Salida del ejemplo | Cada inserción representa el significado semántico del texto en forma numérica, con una dimensionalidad determinada por el modelo. Por ejemplo, text-embedding-ada-002 genera vectores con 1536 dimensiones. |
Texto contextualmente relevante y coherente generado en función de la entrada proporcionada. Por ejemplo, gpt-3.5-turbo puede generar respuestas a preguntas, traducir texto, escribir código, etc. |
| Casos de uso típicos | - Búsqueda semántica | - Bots de chat |
| - Sistemas de recomendaciones | - Creación automatizada de contenido | |
| - Agrupación en clústeres y clasificación de datos de texto | - Traducción de idiomas | |
| - Recuperación de información | - Resumen | |
| Representación de datos | Representación numérica (inserciones) | Texto de lenguaje natural |
| Dimensionalidad | La longitud de la matriz corresponde al número de dimensiones del espacio de inserción, por ejemplo, 1536 dimensiones. | Normalmente se representa como una secuencia de tokens, con el contexto que determina la longitud. |
Componentes principales de la aplicación
- Azure DocumentDB: almacenamiento y consulta de incrustaciones de vectores.
-
LangChain: construcción del flujo de trabajo de LLM de la aplicación. Utiliza herramientas como:
- Cargador de documentos: para cargar y procesar documentos desde un directorio.
- Integración del almacén de vectores: para almacenar y consultar incrustaciones de vectores en Azure DocumentDB.
- AzureDocumentDBVectorSearch: Wrapper para la búsqueda vectorial de Azure DocumentDB
- Azure App Services: creación de la interfaz de usuario para la aplicación Cosmic Food.
-
Azure OpenAI: para proporcionar LLM y modelos de inserción, entre los que se incluyen:
- text-embeding-ada-002: un modelo de inserción de texto que convierte texto en incrustaciones vectoriales con 1536 dimensiones.
- gpt-3.5-turbo: un modelo de lenguaje para comprender y generar lenguaje natural.
Configuración del entorno
Para empezar a optimizar RAG mediante Azure DocumentDB, siga estos pasos:
-
Cree los siguientes recursos en Microsoft Azure:
- Clúster de Azure DocumentDB: para más información, consulte Creación de un clúster.
-
Recurso de Azure OpenAI con:
-
Implementación de modelo de inserción (por ejemplo,
text-embedding-ada-002). -
Implementación de modelo de chat (por ejemplo,
gpt-35-turbo).
-
Implementación de modelo de inserción (por ejemplo,
Documentos de ejemplo
En este tutorial, cargará un único archivo de texto mediante cargadores de documentos. El archivo debe guardarse en un directorio denominado data de la carpeta src . El contenido del archivo es el siguiente:
food_items.json
{
"category": "Cold Dishes",
"name": "Hamachi Fig",
"description": "Hamachi sashimi lightly tossed in a fig sauce with rum raisins, and serrano peppers then topped with fried lotus root.",
"price": "16.0 USD"
},
Carga de documentos
Establezca la cadena de conexión de Azure DocumentDB, el nombre de la base de datos, el nombre de la colección y el índice:
mongo_client = MongoClient(mongo_connection_string) database_name = "Contoso" db = mongo_client[database_name] collection_name = "ContosoCollection" index_name = "ContosoIndex" collection = db[collection_name]Inicialice el cliente de inserción.
from langchain_openai import AzureOpenAIEmbeddings openai_embeddings_model = os.getenv("AZURE_OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002") openai_embeddings_deployment = os.getenv("AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME", "text-embedding") azure_openai_embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings( model=openai_embeddings_model, azure_deployment=openai_embeddings_deployment, )Cree incrustaciones a partir de los datos, guárdelos en la base de datos y devuelva una conexión al almacén de vectores, Azure DocumentDB.
vector_store: AzureDocumentDBVectorSearch = AzureDocumentDBVectorSearch.from_documents( json_data, azure_openai_embeddings, collection=collection, index_name=index_name, )Cree el siguiente índice de vector HNSW en la colección. (Tenga en cuenta que el nombre del índice es el mismo).
num_lists = 100 dimensions = 1536 similarity_algorithm = DocumentDBSimilarityType.COS kind = DocumentDBVectorSearchType.VECTOR_HNSW m = 16 ef_construction = 64 vector_store.create_index( num_lists, dimensions, similarity_algorithm, kind, m, ef_construction )
Realización de búsquedas vectoriales mediante Azure DocumentDB
Conéctese a su base de datos de vectores.
vector_store: AzureDocumentDBVectorSearch = AzureDocumentDBVectorSearch.from_connection_string( connection_string=mongo_connection_string, namespace=f"{database_name}.{collection_name}", embedding=azure_openai_embeddings, )Defina una función que realice una búsqueda de similitud semántica mediante Azure DocumentDB Vector Search en una consulta. (Tenga en cuenta que este fragmento de código es simplemente una función de prueba).
query = "beef dishes" docs = vector_store.similarity_search(query) print(docs[0].page_content)Inicialice el cliente de chat para implementar una función RAG.
azure_openai_chat: AzureChatOpenAI = AzureChatOpenAI( model=openai_chat_model, azure_deployment=openai_chat_deployment, )Cree una función de RAG.
history_prompt = ChatPromptTemplate.from_messages( [ MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"), ( "user", """Given the above conversation, generate a search query to look up to get information relevant to the conversation""", ), ] ) context_prompt = ChatPromptTemplate.from_messages( [ ("system", "Answer the user's questions based on the below context:\n\n{context}"), MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"), ] )Convierta el almacén de vectores en un recuperador, que puede buscar documentos relevantes en función de los parámetros especificados.
vector_store_retriever = vector_store.as_retriever( search_type=search_type, search_kwargs={"k": limit, "score_threshold": score_threshold} )Cree una cadena de recuperación que tenga en cuenta el historial de conversaciones, lo que garantiza la recuperación de documentos contextualmente relevantes mediante el modelo azure_openai_chat y vector_store_retriever.
retriever_chain = create_history_aware_retriever(azure_openai_chat, vector_store_retriever, history_prompt)Cree una cadena que combine documentos recuperados en una respuesta coherente usando el modelo de lenguaje (azure_openai_chat) y un mensaje especificado (context_prompt).
context_chain = create_stuff_documents_chain(llm=azure_openai_chat, prompt=context_prompt)Cree una cadena que controle todo el proceso de recuperación, integrando la cadena del recuperador compatible con el historial y la cadena de combinación de documentos. Esta cadena de RAG se puede ejecutar para recuperar y generar respuestas contextualmente precisas.
rag_chain: Runnable = create_retrieval_chain( retriever=retriever_chain, combine_docs_chain=context_chain, )
Salidas de ejemplo
En la captura de pantalla siguiente se muestran las salidas de varias preguntas. Una búsqueda de similitud semántica devuelve el texto sin formato de los documentos de origen, mientras que la aplicación de respuesta a preguntas mediante la arquitectura de RAG genera respuestas precisas y personalizadas combinando el contenido del documento recuperado con el modelo de lenguaje.
Conclusión
En este tutorial, se ha explorado cómo crear una aplicación de respuesta a preguntas que interactúe con los datos privados mediante Azure DocumentDB como almacén de vectores. Mediante el uso de la arquitectura RAG con LangChain y Azure OpenAI, hemos demostrado cómo son esenciales los almacenes de vectores para las aplicaciones LLM.
La RAG es un avance significativo en la inteligencia artificial, especialmente en el procesamiento de lenguaje natural, y la combinación de estas tecnologías permite la creación de aplicaciones eficaces controladas por inteligencia artificial para varios casos de uso.