Este projeto é uma API baseada em frasco projetada para recuperar documentos usando o Pinecone para pesquisa de vetores. Inclui recursos como:
O aplicativo usa:
Começamos configurando o aplicativo básico do Flask e os terminais da API:
/health : um terminal simples para verificar se a API está em execução./search : um terminal para consultar o pinecone com incorporação de texto e recuperar resultados. Para cada consulta, geramos incorporações usando um modelo BERT pré-treinado (através da Biblioteca transformers do Hugging Face). Essas incorporações são usadas para executar pesquisas vetoriais usando o Pinecone.
Integramos o Pinecone , um banco de dados vetorial, para armazenar e consultar o documento incorporado. Isso permite uma recuperação eficiente e rápida de documentos com base na pesquisa de similaridade.
Implementamos a limitação de taxas usando Flask-Limiter para restringir os usuários de fazer mais de 5 solicitações por minuto:
Adicionamos armazenamento em cache usando Flask-Caching . O armazenamento em cache garante que consultas idênticas sejam servidas da memória, reduzindo a necessidade de atingir o banco de dados e o mecanismo de pesquisa vetorial repetidamente. Os resultados em cache expiram após 5 minutos.
Implementamos um raspador de fundo que pode raspar um site fornecido pelo usuário para artigos ou dados e atualizar o índice Pinecone com novos documentos:
BeautifulSoup .Dockerizamos o projeto usando um Dockerfile . Isso permite que o projeto seja facilmente implantado em qualquer ambiente com comportamento consistente em 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 : contém o aplicativo de frasco e todas as rotas de API.database.py : lida com a configuração e o esquema para gerenciamento de usuários usando o SQLite.cache.py : gerencia o cache para os tempos de resposta mais rápidos.limiter.py : implementa a funcionalidade limitadora da taxa.utils.py : fornece funções auxiliares para gerar incorporações e consultar o Pinecone.scraping.py : contém a lógica para raspar e atualizar o índice Pinecone.Dockerfile : Usado para construir e executar o aplicativo em um contêiner do Docker. git clone <repository-url>
cd project
python -m venv venv
source venv/bin/activate # On Windows, use venvScriptsactivate
pip install -r requirements.txt
Crie um arquivo .env na raiz do projeto e adicione sua chave de API e ambiente da API Pinecone:
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_ENVIRONMENT=your_pinecone_environment
Para configurar o banco de dados, execute o seguinte código:
>>> from app import db, app
>>> with app.app_context():
>>> db.create_all()
python app.py
O aplicativo estará em execução em http://localhost:5000 .
docker build -t flask-app .
docker run -p 5000:5000 flask-app
Agora, seu aplicativo estará em execução em http://localhost:5000 .
URL : /health Método de saúde: GET descrição : verifica se a API está em execução. Resposta :
json
Copy code
{
"status": "API is running"
}
URL : /search Método de pesquisa: POST Descrição : Pesquisar documentos com base nas consultas de texto. Solicitar corpo :
json
Copy code
{
"query": "Your search query",
"user_id": "user123",
"top_k": 3
}
Resposta : Retorna uma lista de documentos correspondentes com base na consulta.
/start_scraping Método : POST Descrição : Inicia o processo de raspagem em segundo plano para um site específico. Solicitar corpo : json
Copy code
{
"url": "https://example.com"
}
Resposta :
json
{
"message": "Started scraping for https://example.com"
}
api.log . Os registros de raspagem de fundo são gravados para raspar.log.