资讯动态

OpenChat 数据源能力全景:PDF 摄取、网站爬虫与向量库同步的现状与路线图(todo.md 深度解读)

发布时间:2026/10/14 19:46:34 来源:尧图企业网站定制
人工智能大模型AI 应用RAG后端前端【免费下载链接】OpenChatLLMs custom-chatbots console ⚡项目地址https://gitcode.com/gh_mirrors/op/OpenChat点击查看免费下载本文基于 OpenChatLLMs custom-chatbots console仓库中的开发清单 dj_backend_server/docs/todo.md结合 Django 后端dj_backend_server的真实源码梳理 PDF 数据源、Website 数据源、聊天前端与 Docker 部署四大模块中「已完成」与「待办」的功能全貌。读完你将掌握PDF 从上传、哈希去重、OCR 清洗到向量库入库的完整链路网站递归爬虫的过滤与进度机制以及向量库联动删除、Resync、细粒度状态机等仍未落地的规划方向从而准确理解该系统当前的能力边界与下一步演进重点。1. 文档定位一份反映系统能力地图的开发清单todo.md不是传统意义上的安装教程或 API 手册而是一份带完成标记的功能规划清单。它按功能域划分为四个板块PDFPDF 数据源的上传、解析、状态管理、错误处理与向量库联动WEBSITE网站数据源的递归爬虫、Resync、数据一致性CHAT聊天控件的前端体验与本地化SERVER - DOCKER部署层的 SSL 与数据持久化。每条目要么标注(done 日期)表示已落地要么保持无标记表示仍是待办。从源码结构看这份清单与该仓库 Django 后端dj_backend_server/的代码演进高度对应例如pdf_handler.py、crawler.py中的注释与实现细节均能一一印证清单条目因此它本质上就是系统当前「能力地图 技术债清单」。下文按板块逐条对照源码解读。2. PDF 数据源已完成的能力与尚未落地的规划2.1 上传 → 摄取 → 入库的完整链路todo.md 的 PDF 板块全部围绕一条核心链路展开。结合源码该链路完整为上传[views_pdf_data_source.py](https://link.gitcode.com/i/338d3692cb6e252407ece75833dd0679)接收request.FILES.getlist(pdffiles)为每个文件计算 MD5 哈希再由HandlePdfDataSourcehandle_pdf_datasource.py写入website_data_sources/folder_name/目录其中folder_name是secrets.token_hex(20)随机值每个文件以uuid4() 扩展名重命名存储。触发信号上传成功后发送pdf_data_source_added信号pdf_datasource_was_added.py由监听器 ingest_pdf_data_source.py 组装请求体并 POST 到APP_URL /api/ingest/。异步任务分发views_ingest.py 收到typepdf后调用pdf_handler_task.delay(...)通过 Celerytasks.py进入异步执行。解析与入库pdf_handler.py 的txt_to_vectordb使用DirectoryLoader加载 PDF内部解析器或 TXT外部 OCR 模式经RecursiveCharacterTextSplitter(chunk_size1000, chunk_overlap200)切分后由init_vector_storeinit_vector_store.py写入 Pinecone 或 Qdrantnamespace即 Chatbot 的 ID。注意爬虫爬到的 PDF 内容文件同样存放在website_data_sources/目录下这正是 todo.md 中「website 解析过程中发现 PDF/DOC 推送到 PDF Handler」条目的物理基础。2.2 已落地哈希去重、OCR 与 LLM 文本清理todo.md 中三条 PDF 待办已标记完成日期均为 31.10.2023源码可逐一验证同名同哈希跳过上传views_pdf_data_source.py在写入前会遍历该 Chatbot 名下所有PdfDataSource的files_info若hash与original_name均一致则跳过打印File with hash ... already exists避免重复摄取。OCR LLM 纠错pdf_handler.py 的process_pdf在PDF_LIBRARYexternal时调用 OCRWebService REST 接口提取文本并写入同名.txt文件若OCR_LLM1则通过process_text_with_llmmake_chain.py将 OCR 文本交由 LLM 修正语法拼写、剔除无意义内容后再落盘。相关环境变量OCR_LICCODE、OCR_USERNAME、OCR_LANGUAGE、OCR_LLM均可在 example.env.docker 中配置。删除按钮与确认弹窗todo 标记 REMOVED 的「Resync on PDF」被弃用同时落地了「Delete」按钮[views_chatbot.py](https://link.gitcode.com/i/e6f06987fda6ef572525e36fcf01ada3)的delete_file调用PdfDataSource.delete_files()pdf_data_sources.py删除物理文件并尝试删除目录随后删除数据库记录并带成功消息重定向。2.3 已落地错误与警告入库todo.mdPDF 与 WEBSITE 板块各一条标记 28.10.2023要求「Capture errors and warnings and log them into the database」。源码中该机制贯穿所有处理环节pdf_handler、txt_to_vectordb、process_pdf、website_handler、get_llm等函数在异常路径都会写入FailedJob记录failed_jobs.py字段包含uuid、connection、queue、payload、exception与failed_at使后台任务失败可被审计与排查。2.4 待办细粒度上传状态机todo 规划了Uploaded、Parsed、Successful、Failed四态。当前实现的粒度仍较粗规划状态当前实现源码证据UploadedHandlePdfDataSource.handle()落库时ingest_status PDF(s) UploadedParsed尚未建模无独立解析阶段状态SuccessfulIngestStatusType.SUCCESSsuccess由监听器在 ingest 返回 200 时写入FailedIngestStatusType.FAILEDfailedHTTP 非 200 或请求异常时写入状态枚举定义见 ingest_status_enum.py前端settings-data页面views_chatbot_settings.py仅渲染 PENDING / SUCCESS / FAILED 三种徽章Uploaded/Parsed等中间态与错误明细展示仍待实现。2.5 待办向量数据库的联动删除与数据审查todo 中「Delete 按钮也删除向量库数据」和「从向量库检索/审查数据」目前均未落地delete_file视图中明确留有注释Remove the record from the vector database / You need to implement this part based on your vector databasePdfDataSource.delete_files()中的delete_from_vectordb(self.chatbot_id)调用同样被注释掉「同名但哈希不同时先删旧向量数据再重启任务」也未实现当前逻辑下新文件会以新 UUID 文件名写入旧向量数据不会被清除长期看可能形成向量库中的冗余分片。这些是数据生命周期治理方向的核心待办实现时需要在init_vector_store同层新增按namespace即 Chatbot ID删除向量的能力。3. 网站数据源爬虫现状与规划3.1 递归爬虫与二进制过滤已落地todo.md 中「爬虫不爬二进制文件/URL」「调查 PNG 等二进制文件被解析」两条已于 28-29.10.2023 标记完成。对应实现位于 crawler.pycrawl()维护crawled_urls去重达到MAX_PAGES_CRAWL默认 15见 example.env.docker即停止显式过滤.png .jpg .jpeg .gif .bmp .ico .tif .tiff .webp等二进制扩展名extract_links()使用 BeautifulSoup 提取a标签规范化 URL去掉 query/fragment并只保留与根 URL 同域schemenetloc的链接进度计算通过calculate_crawling_progress(len(crawled_urls), max_pages)写入website_data_sources.crawling_progress状态机由 website_data_source_status_enum.py 定义pending / in_progress / completed / failed。爬虫结束后监听器 ingest_website_data_source.py 会请求/api/ingest/由 website_handler.py 读取爬取文本并写入向量库同时将crawling_status置为completed。3.2 页面标题提取源码已实现todo 中的「Title of the crawled URL is not read」虽未标记 done但源码中已实现对应逻辑get_crawled_page_title()crawler.py解析title标签store_crawled_page_content_to_database()将其写入CrawledPages.title字段模型见 crawled_pages.py。从源码结构可以推断该条目已实质完成todo 只是未同步更新标记。3.3 待办Resync / Smart Resync 与 PDF 发现WEBSITE 板块中未标记完成的三条规划Website Resync重新触发某个已建站点的全量爬取与向量重建Smart Resync智能增量同步仅重爬变更内容解析中发现 PDF/DOC 时推送到 PDF Handlercrawl()目前对非二进制 HTML 之外的内容不做分支处理虽然website_handler的DirectoryLoader使用glob**/*.txt爬取内容以 TXT 落盘但 PDF/DOC 的识别与转交 PDF 摄取链路含复选框开关尚不存在。实现 Resync 时可复用现有信号与 ingest 链路爬虫完成信号 →/api/ingest/→ Celery 任务只需补充「对已完成站点允许重新发起」的入口与状态复位逻辑。3.4 待办数据一致性与管理体验删除 Chatbot 未清理关联表delete_botviews_chatbot_settings.py仅执行bot.delete()而WebsiteDataSource、PdfDataSource、CrawledPages、ChatbotSetting、ChatHistory等表见 web/models 目录下各模型会留下孤儿数据WEB 与 DATA 列表分页data_settings目前直接filter(...).order_by(-id)全量返回未做分页爬虫中断与恢复「sync occasionally stops」的调查与重启机制尚未实现——crawler.py对网络异常采用pass静默跳过状态仅在顶层异常时置为failed。3.5 待办LLM 设置进入 Dashboardtodo 规划将 Temperature、OpenAI key、OpenAI Model 等 LLM 参数纳入 Dashboard 可视化配置。当前这些配置仍停留在环境变量层OPENAI_API_TYPE、OPENAI_API_MODEL、OPENAI_API_TEMPERATUREOpenAI 侧见 get_openai_llm.py以及 Azure 系列变量与本地 llama2get_llama_llm。ChatbotSetting表chatbot_settings.py虽已提供name/value键值存储但尚未用于 LLM 参数。4. 聊天与前端移动端与本地化CHAT 板块仅剩一条待办移动端友好Mobile friendly。其余均已落地本地化 chat.js 与 search.jsdone 31.10.2023通过环境变量LNG_BOT、LNG_ERROR、LNG_WRITE、LNG_ASKexample.env.docker 末尾在构建/运行时替换前端英文文案用真实 URL 替换 JS 内 localhostdone 29.10.2023get_chat_viewviews_chatbot.py将APP_URL注入chat.html模板供前端使用不过后端send_message调用 LLM 服务时仍硬编码http://localhost:3000/api/chat分布式部署时需关注该点。5. 服务器与 DockerSSL 与数据持久化已落地SERVER - DOCKER 板块两条均在 10 月下旬完成NGINX SSLdone 26.10.2023模板 nginx/nginx.template.conf 定义了 80 端口 HTTP 与 443 端口 HTTPS 两个 server 块server_name ${APP_URL}通过模板变量注入SSL 证书路径为/etc/nginx/ssl/cert.pem与privkey.pem启用TLSv1.2 TLSv1.3、HSTS、OCSP stapling并将/代理到web:8000website_data_sources 外部卷done 24.10.2023docker-compose.yaml 中web与celery_worker服务均挂载./website_data_sources:/app/website_data_sources使爬取与上传的文件目录独立于容器层便于挂载大容量存储并在重启后保留数据。同文件还编排了mysql、qdrant、redis、adminer、nginx等基础设施。6. 待核查数据表清单todo.md 列出若干需要核查的表。结合 dj_backend_server/web/models 目录与迁移文件dj_backend_server/web/migrations逐一对照表名模型文件说明failed_jobsfailed_jobs.py任务异常日志全链路写入jobsjobs.pyDjango 队列任务表onboarding_stepsonboarding_steps.py新手引导步骤password_reset_tokenspassword_reset_token.py密码重置令牌personal_access_tokenspersonal_access_tokens.py个人访问令牌text_data_sourcestext_data_sources.py文本数据源当前链路未使用待清理评估web_pdfdatasourceerrorlog迁移 0005_pdfdatasourceerrorlog.py 创建、0008_delete_pdfdatasourceerrorlog.py 删除已由failed_jobs取代并被迁移移除从迁移历史可以推断web_pdfdatasourceerrorlog已被废弃删除错误日志统一收敛到failed_jobstext_data_sources等遗留模型是否保留正是 todo 中「Check this tables」要回答的问题。7. 结语如何借助这份清单理解与部署 OpenChattodo.md的价值在于它精确刻画了 OpenChat 数据源体系「已完成 vs 未完成」的边界可开箱即用PDF 上传去重、OCR/LLM 文本清洗、网站递归爬虫含二进制过滤与进度、错误入库、NGINX SSL、外部数据卷持久化均已就绪部署配置可参考 example.env.docker 与 docker-compose.yaml值得优先补强向量库联动删除PDF 删除/哈希变更场景、细粒度摄取状态机、Website Resync/Smart Resync、PDF 发现转交、删除 Chatbot 的级联清理、列表分页与爬虫断点恢复架构约束提示向量库目前由STORE环境变量在 Pinecone/Qdrant 间切换init_vector_store.pyLLM 由OPENAI_API_TYPE在 azure/openai/llama2 间切换get_openai_llm.py任何新增的「向量删除」「审查」能力都应在这两个抽象层上实现以保持多后端兼容。如果你正计划基于 OpenChat 二次开发建议以本文第二节的 PDF 链路和第三节的爬虫链路为起点阅读源码再对照清单逐条评估凡是标记(done)的条目可直接信任凡是未标记的条目就是系统的已知能力缺口——它们既是风险点也是功能迭代的候选清单。赞分享人工智能大模型AI 应用RAG后端前端【免费下载链接】OpenChatLLMs custom-chatbots console ⚡项目地址https://gitcode.com/gh_mirrors/op/OpenChat点击查看免费下载相关推荐pgloader 发展路线图解读从 TODO.md 看数据迁移工具的演进方向与实现现状pgloader 发展路线图解读从 TODO.md 看数据迁移工具的演进方向与实现现状 pgloader 是一款面向 PostgreSQL 的数据加载工具其数据工程ETL数据集成数据库全景网图片采集爬虫实战多线程加速爬取中东人万张图库全景网图片采集爬虫实战多线程加速爬取中东人万张图库 文章导读 本文基于 ECommerceCrawlers https://link.gitcode.co示例工程Jujutsu 项目路线图深度解读8 大技术方向与源码级现状Jujutsu 项目路线图深度解读8 大技术方向与源码级现状 本文以 Jujutsu jj 官方路线图文档 web/docs/src/content/do开发工具版本控制CLI上一篇open-multi-agent 错误处理完全指南错误分类、重试判定与落点定位下一篇如何快速定位Windows热键冲突Hotkey Detective完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑