Este proyecto proporciona una aplicación web simple que permite a los usuarios cargar un documento PDF, generar integridades vectoriales a partir de su contenido y luego buscar información dentro del documento utilizando una consulta de texto. Los modelos de incrustación y lenguaje de OpenAI se utilizan para crear integridades vectoriales y recuperación de información.
Ingestión de documentos PDF : los usuarios pueden cargar el documento PDF a través de la interfaz web para la recuperación de información.
Genere incrustaciones vectoriales : el contenido de texto se extrae del PDF y se divide en trozos más pequeños usando Langchain. Se generan incrustaciones para cada fragmento utilizando el modelo de incrustación de texto de OpenAI (por ejemplo, texto incrustado-ADA-002).
Almacenamiento de la base de datos de vectores : almacene los incrustaciones de vectores generados en una base de datos vectorial como Pinecone para la búsqueda de similitud.
Refinar consultas de los usuarios : las consultas de los usuarios se refinan utilizando la API de finalización de chat de OpenAI para mejorar la precisión de la búsqueda.
Buscar información : los usuarios pueden ingresar consultas de texto para buscar información dentro del documento cargado. El sistema recupera fragmentos de texto relevantes en función de su similitud vectorial con la incrustación de consulta.
Genere la respuesta : según los fragmentos de texto recuperados, el contexto (consultas y respuestas anteriores) y la consulta del usuario, se genera una respuesta utilizando modelos OpenAI (GPT-4O, GPT-4 o GPT-3.5-TURBO). Los usuarios pueden seleccionar el modelo OpenAI a través de la interfaz web. La elección del modelo puede afectar el estilo de respuesta, el detalle y la precisión.
El archivo requisitos.txt enumera los paquetes de Python necesarios y sus versiones requeridas para ejecutar la aplicación. Aquí hay un desglose de cada paquete:
Flask : un marco web liviano de Python para crear aplicaciones web.
Pinecone-Client : la biblioteca oficial de clientes de Python para interactuar con Pinecone, la base de datos vectorial utilizada en su aplicación.
OpenAI : la biblioteca oficial de clientes de Python para la API de OpenAI, utilizada para generar integridades de texto e interactuar con los modelos de idiomas de OpenAI.
PYPDF2 : una biblioteca de Pure-Python para extraer texto de archivos PDF.
Langchain : un marco para construir aplicaciones con grandes modelos de idioma, utilizados en su aplicación para división y fragmentación de texto.
Numpy : un paquete para la computación científica en Python, utilizado para trabajar con matrices y vectores multidimensionales.
Para instalar estas dependencias, puede crear un nuevo entorno virtual de Python y ejecutar el siguiente comando:
PIP install -r requisitos.txt
Para integrarse con OpenAI y Pinecone, debe obtener y configurar la información de las claves API respectivas, host (pinecone) para estas plataformas. Establezca sus teclas API OpenAI y Pinecone, y el host de Pinecone como variables de entorno en Linux. Use los siguientes comandos de Linux para exportar estas variables:
Exportar OpenAI_api_Key = 'Your-Openai-Api-Key'
Exportar pinecone_api_key = 'Your-Pinecone-API-Key'
Exportar pinecone_host = 'Your-Pinecone-Host'
Asegúrese de tener una cuenta de OpenAI con claves API válidas. Puede crear u obtener sus claves API desde la plataforma Operai (https://platform.openai.com/) y administrarlas (https://platform.openai.com/organization/api-keys). Además, asegúrese de que su cuenta tenga suficiente cuota de uso, ya que este ejemplo requiere una cuenta de OpenAI pagada.
Entorno Pinecone (cuenta gratuita de Pinecone utilizada https://www.pinecone.io/): 1) Se utiliza el índice de pinecone 2) Dimensiones: 1536 3) Tipo de host: sin servidor.
La versión CentOS Linux 8.5.2111 se usa como el sistema operativo Linux. Se ha probado una VM Linux en la nube con una IP pública (opcional) para la interfaz web. La IP local también se puede usar. Cree un entorno virtual de Python (opcional pero recomendado) para aislar las dependencias del proyecto.
La aplicación proporciona una interfaz web construida con Flask, un marco web de Python. Los usuarios pueden cargar documento PDF, ingresar consultas, elegir el modelo de idioma Operai para usar (GPT-3.5-TURBO, GPT-4 o GPT-4O) y recibir respuestas detalladas basadas en la información extraída de los documentos PDF cargados.
Ingerir el documento PDF y crear integridades vectoriales
La aplicación proporciona una interfaz web donde los usuarios pueden cargar documentos PDF. Al cargar un archivo PDF, el contenido de texto se extrae del documento y se divide en fragmentos más pequeños utilizando el recursivecharacterTextSplitter de la biblioteca Langchain. Este proceso de división garantiza que el texto se divide en fragmentos manejables mientras se mantiene el contexto.
A continuación, se generan incrustaciones de vectores para cada fragmento de texto utilizando el modelo de texto-ADA-002 de OpenAI. Estos incrustaciones son vectores de alta dimensión que capturan el significado semántico del texto, lo que permite una búsqueda de similitud eficiente.
Almacenamiento de insertos de vectores en Pinecone
Las embebidos del vector generados, junto con sus fragmentos de texto y números de página correspondientes, se almacenan en una base de datos de vectores de piña. Pinecone es una base de datos vectorial escalable y eficiente diseñada para almacenar y consultar vectores de alta dimensión.
Procesamiento de consultas
Cuando un usuario envía una consulta a través de la interfaz web, la aplicación lo procesa en los siguientes pasos:
Refinamiento de la consulta:
La consulta del usuario se envía al modelo de idioma de OpenAI (por ejemplo, GPT-3.5-TURBO, GPT-4 o GPT-4O) para refinar y mejorar la consulta para una mejor precisión de búsqueda.
Generación de incrustación para la consulta
La consulta refinada se convierte en una inclusión de vectores utilizando el modelo de texto-ADA-002 de Embeding-ADA-002 de OpenEI.
Búsqueda de similitud:
La incrustación de consulta se utiliza para buscar en la base de datos de Vector Pinecone para los fragmentos de texto más semánticamente similares basados en la similitud vectorial.
Nota : Para consultar el índice Pinecone y recuperar los resultados principales, se usa el siguiente código (App.py)
#Adjust y experimente el valor top_k en función de su caso de uso
resultados = pinecone_index.query (vector = padded_query_vector.tolist (), top_k = 1, include_metadata = true)
El parámetro TOP_K especifica el número de resultados principales para devolver de la consulta. Ajustar el valor TOP_K puede afectar la calidad de las respuestas de consulta. Un valor TOP_K más alto puede proporcionar resultados más completos, pero también podría introducir datos menos relevantes. Por el contrario, un valor TOP_K más bajo puede producir resultados más precisos pero menos. Es importante experimentar con diferentes valores TOP_K para encontrar el equilibrio óptimo para su caso de uso específico. Además, tenga en cuenta que aumentar el valor TOP_K también afectará los costos, especialmente cuando se usa un modelo OpenAI pagado para procesar los resultados. Los valores más altos de TOP_K dan como resultado más datos enviados y procesados por el modelo, lo que puede conducir a mayores cargos de uso.
Nota : El parámetro stork_threshold determina la puntuación de relevancia mínima requerida para que se considere un resultado que puede afectar la calidad de la respuesta de la consulta. Por lo tanto, ajuste el valor umbral en función de su caso de uso y experimentos (app.py).
#AdJust el valor umbral basado en su caso de uso
scaty_threshold = 0.65
Generación de respuesta:
Los fragmentos de texto relevantes recuperados de la base de datos se combinan con el contexto anterior (si los hay) y la consulta de usuario original. Luego, esta información se envía al modelo de idioma de OpenAI (el mismo modelo utilizado para el refinamiento de consultas) para generar una respuesta integral y contextualmente relevante.
Respuesta consciente del contexto:
La aplicación mantiene un contexto de consultas y respuestas anteriores. Este contexto se pasa al modelo de lenguaje de OpenAI durante el paso de generación de respuesta, asegurando que las respuestas generadas tengan en cuenta el historial de conversación y proporcionan información precisa y contextualmente relevante.
Para ejecutar la aplicación, siga estos pasos:
Active su entorno virtual de Python (opcional): (Venv) [user@host Project_directory]#
Ejecute el script App.py: python app.py
La aplicación comenzará a ejecutarse en el puerto 5000, y puede ver una salida similar como la siguiente:
Asegúrese de que la aplicación esté escuchando activamente las conexiones entrantes en el puerto 5000:
netstat -ultpn | GREP -I 5000 TCP 0 0 0.0.0.0:5000 0.0.0.0:* Escucha 525661/Python
http://127.0.0.1:5000/ (para acceso local)
http: // vm public IP: 5000/(para acceso remoto a través de Internet)
Nota : Si planea acceder a la aplicación a través de la IP pública, asegúrese de permitir el tráfico entrante en el puerto 5000 a través del firewall de la VM. Esto asegurará que se permita la comunicación sobre la IP pública, y puede acceder a la interfaz web de forma remota.
Además, asegúrese de que la carpeta en su máquina Linux, que contenga un archivo PDF cargado, no contenga el archivo PDF con el mismo nombre. Si el archivo ya existe, se sobrescribirá.
Seleccione el archivo PDF y cárguelo con el botón 'Cargar'.
Haga clic en el "archivo de proceso" (en esta etapa, se crearán y almacenarán incrustaciones de vectores en la base de datos de Pinecone).
Ingrese su consulta de búsqueda. Seleccione modelos de idioma Operai en el menú desplegable.
Verifique la respuesta de la consulta. Enviar consultas posteriores.
Una vez hecho esto, haga clic en la 'Sesión final' (activará la limpieza: eliminación de archivos cargados e incrustaciones vectoriales en la base de datos)
En el Linux Macine, presione Ctrl+C para cerrar la aplicación (App.py).