Este proyecto es una API basada en frascos diseñada para recuperar documentos utilizando Pinecone para la búsqueda de vectores. Incluye características como:
La aplicación usa:
Comenzamos configurando los puntos finales básicos de la aplicación Flask y la API:
/health : un punto final simple para verificar si la API se está ejecutando./search : un punto final para consultar Pinecone con incrustaciones de texto y recuperar resultados. Para cada consulta, generamos incrustaciones utilizando un modelo Bert previamente capacitado (a través de la biblioteca de transformers de Hugging Face). Estos incrustaciones se utilizan para realizar búsquedas vectoriales utilizando pinecone.
Integramos Pinecone , una base de datos vectorial, para almacenar y consultar incrustaciones en documentos. Esto permite una recuperación eficiente y rápida de documentos basados en la búsqueda de similitud.
Implementamos la limitación de la tasa utilizando Flask-Limiter para restringir a los usuarios de realizar más de 5 solicitudes por minuto:
Agregamos el almacenamiento en caché con Flask-Caching . El almacenamiento en caché asegura que se sirvan consultas idénticas de la memoria, lo que reduce la necesidad de presionar la base de datos y el motor de búsqueda vectorial repetidamente. Los resultados en caché caducan después de 5 minutos.
Implementamos un raspador de fondo que puede raspar un sitio web proporcionado por el usuario para artículos o datos y actualizar el índice Pinecone con nuevos documentos:
BeautifulSoup .Dockerizamos el proyecto usando un DockerFile . Esto permite que el proyecto se despliegue fácilmente en cualquier entorno con un comportamiento consistente en diferentes sistemas.
project/
├── app.py # Main Flask application
├── database.py # Database setup for user management
├── cache.py # Caching configuration
├── limiter.py # Rate limiting configuration
├── utils.py # Utility functions (embedding, Pinecone query)
├── scraping.py # Background scraping logic
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── .env # Environment variables (not committed to version control)
├── .dockerignore # Ignore unnecessary files in the Docker build
└── README.md # Project documentation
app.py : contiene la aplicación Flask y todas las rutas API.database.py : maneja la configuración y el esquema para la administración de usuarios utilizando SQLite.cache.py : gestiona el almacenamiento en caché para tiempos de respuesta más rápidos.limiter.py : implementa la funcionalidad limitante de la velocidad.utils.py : proporciona funciones auxiliares para generar integridades y consultar Pinecone.scraping.py : contiene la lógica para rasparse y actualizar el índice Pinecone.Dockerfile : se usa para construir y ejecutar la aplicación en un contenedor Docker. git clone <repository-url>
cd project
python -m venv venv
source venv/bin/activate # On Windows, use venvScriptsactivate
pip install -r requirements.txt
Cree un archivo .env en la raíz del proyecto y agregue su tecla y entorno API de Pinecone:
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_ENVIRONMENT=your_pinecone_environment
Para configurar la base de datos, ejecute el siguiente código:
>>> from app import db, app
>>> with app.app_context():
>>> db.create_all()
python app.py
La aplicación se ejecutará en http://localhost:5000 .
docker build -t flask-app .
docker run -p 5000:5000 flask-app
Ahora, su aplicación se ejecutará en http://localhost:5000 .
URL : /health Método de salud: GET descripción : comprobaciones si la API se está ejecutando. Respuesta :
json
Copy code
{
"status": "API is running"
}
URL : /search Método de búsqueda: Descripción POST : Documentos de búsqueda basados en consultas de texto. Solicitud de cuerpo :
json
Copy code
{
"query": "Your search query",
"user_id": "user123",
"top_k": 3
}
Respuesta : Devuelve una lista de documentos coincidentes basados en la consulta.
/start_scraping Método : POST Descripción : Inicie el proceso de raspado de fondo para un sitio específico. Solicitud de cuerpo : json
Copy code
{
"url": "https://example.com"
}
Respuesta :
json
{
"message": "Started scraping for https://example.com"
}
api.log . Los registros de raspado de fondo se escriben en raspado.log.