AI互联网导航助手

该项目是一个使用 Flask 构建的 Web 应用程序,旨在执行 Web 爬取、存储提取的数据以及使用矢量数据库启用搜索功能。它集成了各种外部服务和库,包括用于矢量搜索的 Pinecone、用于嵌入的 OpenAI 和用于 Web 抓取的 BeautifulSoup。

建筑学

环境设置
  • 环境变量:应用程序使用 dotenv 加载环境变量,以安全地管理 API 密钥等敏感信息。
Flask 应用 www.cqzlsb.com
  • 蓝图和路由: Flask 应用程序使用蓝图进行模块化。它注册了两组主要路由(主要路由和通用路由),以处理应用程序的不同部分。

  • 端点:

    • /crawl:启动抓取过程。

    • /status:检查爬取任务的状态。

    • /search:使用给定的查询搜索矢量数据库。

详细分区细分

初始化和配置
  • Flask 应用程序初始化: Flask 应用程序已实例化,并使用环境变量中的必要 API 密钥进行配置。

  • 全局资源初始化:在应用程序上下文中,初始化 Pinecone,并加载嵌入模型以供在整个应用程序中使用。

航线
  1. /爬行路线:

    • 目的:启动对给定 URL 的抓取过程直到指定深度。

    • 过程:

      • 接受带有 start_url 和可选深度的 JSON 有效负载。

      • 调用start_crawl开始抓取过程并返回响应和状态代码。

      • 当用户打开扩展程序时,它会从前端调用抓取api,以便用户一打开扩展程序就可以开始!

  2. /status 路线:

    • 目的:检索正在进行或已完成的抓取任务的状态。

    • 过程:

      • 接受 task_id 作为查询参数。

      • 调用 get_crawl_status 获取当前状态并将其作为 JSON 响应返回。

  3. /搜索路线:

    • 目的:使用提供的查询搜索矢量数据库。

    • 过程:

      • 接受带有查询的 JSON 负载。

      • 验证查询并调用search_with_query执行搜索。

      • 以 JSON 响应形式返回搜索结果。

爬虫逻辑
  • 任务管理:在内存字典中管理任务,跟踪每个任务的状态和访问的 URL。

  • 抓取过程:

    • 基于队列的爬取:使用队列管理要爬取的URL,并通过深度控制来限制爬取的范围。

    • 内容提取:使用 BeautifulSoup 从网页中提取文本内容并将其拆分为可管理的块。

    • 向量存储:将提取的文本块作为向量存储在 Pinecone 索引中。

Pinecone 集成
  • 嵌入生成:使用 OpenAI 的 API 为文本内容生成嵌入。

  • 索引管理:将向量存储在 Pinecone 中并执行搜索查询。

  • 辅助功能:

    • get_embedding:使用 OpenAI 生成嵌入。

    • store_vectors:将文档向量存储在 Pinecone 中。

    • search_with_query:使用查询嵌入搜索 Pinecone 索引。

实用函数
  • 文本分块:将大文本内容分割成较小的块,以适应标记限制。

  • 域名检查:确保被抓取的URL在同一个域内,以避免不必要的外部链接。

  • 错误处理和重试:实现失败的 HTTP 请求的重试逻辑和爬取过程中的错误处理。

工作流

  1. 开始抓取:

    • 用户通过 /crawl 端点使用起始 URL 和可选深度启动爬网。

    • 应用程序分配唯一的任务ID,并在后台启动抓取过程。

    • 该过程提取文本、生成嵌入并将其存储在 Pinecone 中。

  2. 检查状态:

    • 用户使用带有任务 ID 的 /status 端点查询爬网的状态。

    • 应用程序返回任务的当前状态和访问过的 URL。

  3. 搜索数据:

    • 用户通过 /search 端点提交搜索查询。

    • 该应用程序为查询生成嵌入,并在 Pinecone 索引中搜索最相关的结果。

    • 结果以 JSON 响应形式返回。

    • RAG:根据相似度使用前 3 个块,使用 RAG 实现来回答查询

演示:

我们还制作了一个工作演示视频,您可以在下面观看!

结论

该架构为网络爬虫和语义搜索提供了强大的解决方案。它利用 Pinecone 等强大工具进行高效矢量搜索,利用 OpenAI 生成高质量嵌入,而 Flask 则充当网络应用程序的主干,协调不同组件并处理用户交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值