Flask Based API for Document Retrieval
1.0.0
该项目是一种基于烧瓶的API,旨在使用Pinecone进行矢量搜索检索文档。它包括以下功能:
应用程序使用:
我们首先设置基本的烧瓶应用程序和API端点:
/health :一个简单的端点,可以检查API是否正在运行。/search :带有文本嵌入的Pinecone查询Pinecone的端点并检索结果。对于每个查询,我们都会使用预训练的BERT模型(通过拥抱Face的transformers库)生成嵌入。这些嵌入用于使用Pinecone进行矢量搜索。
我们集成了Pinecone ,一个矢量数据库,以存储和查询文档嵌入。这允许根据相似性搜索有效而快速检索文档。
我们使用Flask-Limiter实施了限制费率,以限制用户每分钟提出5个以上的请求:
我们添加了使用Flask-Caching的缓存。缓存可确保从内存中提供相同的查询,从而降低重复击中数据库和矢量搜索引擎的需求。缓存结果在5分钟后到期。
我们实施了一个背景刮刀,该刮板可以刮擦用户提供的网站以获取文章或数据,并使用新文档更新Pinecone索引:
BeautifulSoup处理。我们使用Dockerfile对该项目进行了停靠。这使该项目可以轻松地在不同系统之间具有一致行为的任何环境中部署。
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 :包含烧瓶应用程序和所有API路由。database.py :使用SQLITE处理用于用户管理的设置和架构。cache.py :管理缓存的响应时间更快。limiter.py :实现限制速率功能。utils.py :提供用于生成嵌入和查询松果的辅助功能。scraping.py :包含用于刮擦和更新Pinecone索引的逻辑。Dockerfile :用于在Docker容器中构建和运行该应用程序。 git clone <repository-url>
cd project
python -m venv venv
source venv/bin/activate # On Windows, use venvScriptsactivate
pip install -r requirements.txt
在项目root中创建.ENV文件,并添加Pinecone API密钥和环境:
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_ENVIRONMENT=your_pinecone_environment
要设置数据库,请运行以下代码:
>>> from app import db, app
>>> with app.app_context():
>>> db.create_all()
python app.py
该应用程序将在http://localhost:5000上运行。
docker build -t flask-app .
docker run -p 5000:5000 flask-app
现在,您的应用程序将在http://localhost:5000上运行。
URL : /health方法: GET说明:检查API是否正在运行。回复:
json
Copy code
{
"status": "API is running"
}
URL : /search方法: POST说明:基于文本查询的搜索文档。请求主体:
json
Copy code
{
"query": "Your search query",
"user_id": "user123",
"top_k": 3
}
响应:根据查询返回匹配文档的列表。
/start_scraping方法: POST说明:启动特定站点的背景刮擦过程。请求主体: json
Copy code
{
"url": "https://example.com"
}
回复:
json
{
"message": "Started scraping for https://example.com"
}
api.log中的所有请求和错误。背景刮擦日志写入刮擦。