Cree un backend para la recuperación de documentos con almacenamiento en caché.
El algoritmo de almacenamiento en caché creó una cola en el servidor que almacenará un número limitado de nodos de la base de datos Vector de los Quries anteriores. Para cada consulta del usuario se combinará primero con consultas en la cola y si la similitud (coseno) está por encima de 0.9 que los nodos devueltos de la tabla de búsqueda mantenida por separado.
Primera solicitud => Tiempo tomado 787 ms 
Segunda solicitud similar => Tiempo tomado 54 ms 
Solicitud incorrecta 
Punto final de control de salud
curl --location ' localhost:8001/health 'Punto de finalización de verificación de búsqueda
curl --location ' localhost:8001/search ' --header ' user_id: riondsilva ' --header ' Content-Type: application/json ' --data ' { "text": "Ingredient Substitutions" , "top_k": 5 , "threshold": 0.3 } '*Correr en orden
Imagen de croma
docker run -p 8000:8000 chromadb/chromaImagen de postgrres
docker run --name user-database -p 5432:5432
-e POSTGRES_PASSWORD=your_password -d postgres:12.20-alpine3.20 docker stop user-databaseDOC-Retrieval
git clone https://github.com/RionDsilvaCS/document-retrieval-caching.git Crear archivo .env en el directorio principal y agregar las siguientes variables
DATABASE_URL="postgresql://postgres:your_password@localhost:5432/postgres"
COLLECTION_NAME="collection_name"
Crear data de nombre de directorio y agregar documentos PDF
mkdir data
Ejecute store_in_db.py para guardar el contenido ./data a Chromadb
python store_in_db.pydocker compose up --build /health es obtener un punto final para verificar si el servidor está arrancado
Punto final
http://127.0.0.1:8001/health
Respuesta
{
"Server Status" : " Successfully running ? "
} /search es un punto final de publicación para conversar con el chatbot
Punto final
http://127.0.0.1:8001/search
Encabezamiento
{
"user_id" : " riondsilva "
}Cuerpo json
{
"text" : " How are you? " ,
"top_k" : 3 ,
"threshold" : 0.3
}Respuesta
{
"bot_message" : {
"top_k_results" : [
{
"message" : " I am great ? "
},
{
"message" : " I am fine "
},
{
"message" : " I am good "
}
],
"top_k" : 3 ,
"threshold" : 0.9
},
"user_message" : {
"text" : " How are you? " ,
"top_k" : 3 ,
"threshold" : 0.9 ,
"inference_time (secs)" : 1.16
},
"user_info" : " riondsilva "
}