Ce projet est une API basée sur Flask conçue pour récupérer des documents à l'aide de PineCone pour la recherche vectorielle. Il comprend des fonctionnalités comme:
L'application utilise:
Nous avons commencé par configurer l'application Flask de base et les points de terminaison API:
/health : un simple point de terminaison pour vérifier si l'API est en cours d'exécution./search : un point de terminaison pour interroger le pignon avec des incorporations de texte et récupérer les résultats. Pour chaque requête, nous générons des intégrons en utilisant un modèle Bert pré-formé (via la bibliothèque transformers de Hugging Face). Ces intérêts sont utilisés pour effectuer des recherches vectorielles à l'aide de Pinecone.
Nous avons intégré Pinecone , une base de données vectorielle, pour stocker et interroger les intégres de documents. Cela permet une récupération efficace et rapide des documents basés sur une recherche de similitude.
Nous avons mis en œuvre la limitation des taux à l'aide Flask-Limiter pour empêcher les utilisateurs de faire plus de 5 demandes par minute:
Nous avons ajouté de la mise en cache à l'aide Flask-Caching . La mise en cache garantit que des requêtes identiques sont servies à partir de la mémoire, ce qui réduit la nécessité de frapper à plusieurs reprises la base de données et le moteur de recherche vectorielle. Les résultats mis en cache expirent après 5 minutes.
Nous avons implémenté un grattoir d'arrière-plan qui peut gratter un site Web fourni par l'utilisateur pour des articles ou des données et mettre à jour l'index de poireau avec de nouveaux documents:
BeautifulSoup .Nous avons accroché le projet à l'aide d'un dockerfile . Cela permet au projet d'être facilement déployé dans n'importe quel environnement avec un comportement cohérent sur différents systèmes.
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 : contient l'application FLASK et toutes les routes API.database.py : gère la configuration et le schéma pour la gestion des utilisateurs à l'aide de SQLite.cache.py : gère la mise en cache pour les temps de réponse plus rapides.limiter.py : implémente la fonctionnalité de limitation de débit.utils.py : fournit des fonctions d'assistance pour générer des intérêts et interroger la poire.scraping.py : contient la logique pour le grattage d'arrière-plan et la mise à jour de l'index de pignon.Dockerfile : utilisé pour construire et exécuter l'application dans un conteneur docker. git clone <repository-url>
cd project
python -m venv venv
source venv/bin/activate # On Windows, use venvScriptsactivate
pip install -r requirements.txt
Créez un fichier .env dans la racine du projet et ajoutez votre clé API et votre environnement PineCone:
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_ENVIRONMENT=your_pinecone_environment
Pour configurer la base de données, exécutez le code suivant:
>>> from app import db, app
>>> with app.app_context():
>>> db.create_all()
python app.py
L'application s'exécutera sur http://localhost:5000 .
docker build -t flask-app .
docker run -p 5000:5000 flask-app
Maintenant, votre application fonctionnera sur http://localhost:5000 .
URL : Méthode /health : GET description : vérifie si l'API est en cours d'exécution. Réponse :
json
Copy code
{
"status": "API is running"
}
URL : Méthode /search : POST Description : Documents de recherche basés sur les requêtes texte. Corps de demande :
json
Copy code
{
"query": "Your search query",
"user_id": "user123",
"top_k": 3
}
Réponse : Renvoie une liste de documents correspondants basés sur la requête.
/start_scraping Méthode : POST Description : Démarrage du processus de grattage d'arrière-plan pour un site spécifique. Corps de demande : json
Copy code
{
"url": "https://example.com"
}
Réponse :
json
{
"message": "Started scraping for https://example.com"
}
api.log . Les journaux de grattage d'arrière-plan sont écrits sur gratte.log.