v1.3.0 补上了琅嬛内容矩阵里缺了很久的一块:把网站变成知识库的内容源。设计上我们做了一个明确裁决——网站不是一种新的知识库类型,而是库内一个可管理的内容源:爬到的页面与上传文件混居同一知识库、同一索引,一次检索同时命中两者;每个源有独立的配置、调度与生命周期,可单独重跑、改配置、停用、删除,页面文档带来源溯源。
三种导入模式,覆盖三类真实诉求
- 爬取(crawl):从种子 URL 出发的受限 BFS——深度/页数上限、路径 include/exclude glob、子域开关,发现与抓取共用同一条管线并维护页内缓存避免双倍流量;
- Sitemap:解析 sitemap.xml(含 index 递归),
lastmod直接进入增量游标; - URL 列表:手工维护的页面清单,增删即同步,适合竞品页、帮助中心这类”我就要这几页”的场景。
四个抓取引擎 + auto 渐进升级
http:SSRF-safe 静态抓取(dial 期 IP 校验、redirect 逐跳重校验、私网阻断),支持条件请求;render:连接外部 CDP 无头浏览器(Obscura / browserless 均实测),执行脚本后取渲染产物——不内嵌浏览器,单二进制交付不破;firecrawl/jina:托管抓取 provider,markdown 直通,支持自托管 firecrawl(endpoint 可覆盖,已实测);auto:http 起步,命中 JS-shell 特征(空挂载点、可见文本低于阈值)时自动升级到已配置的高级引擎并留痕last_engine。
正文抽取走 readability + html-to-markdown(http/render 通道),provider 通道 markdown 直通。
爬网站不会拖慢日常使用,也不会中途夭折
爬一个网站可能持续几分钟到几小时。系统会自动限制同时抓取的网站数量(默认最多 2 个),保证上传文档的解析与检索始终有资源可用;抓取超时也按站点规模自动放宽(大站给足时间,最长 4 小时),不会陷入”超时→重试→再超时”的循环。robots.txt 默认遵守,同一站点串行抓取并保持可配置的礼貌间隔。
重复抓取同样被省掉了:每次同步只处理真正变化的内容——sitemap 里标注的更新时间、HTTP 协议层的”未修改”应答、页面内容指纹,三道关卡层层过滤,没有变化的页面不会重复入库。
Console 与 API
Web Console 的内容区新增「Web」子 tab:抓取请求列表(状态徽标、页面/失败计数、上次同步摘要)→ 源详情(该请求抓到的页面,按源过滤)→ 添加/编辑表单(模式三选一、高级选项折叠、引擎与连接联动)。集成页支持 firecrawl/jina/browser 三类新连接(凭证 AES-256-GCM 密文存储)并统一提供「连接测试」。API 侧新增 /web-sources 全套 REST 端点;MCP 的 document_ingest 支持 url 入口——agent 可以直接丢一个 URL 进知识库。
顺带修复:一个影响老版本的同步 bug
真实环境验证过程中发现,来源同步创建的解析任务缺少 index_generation_id,导致 v0.7.4 及之后所有版本的飞书同步都存在”文档抓取成功但永不进入索引”的问题(页面与改配置均受影响)。v1.3.0 已完整修复(新增/更新/重试三条路径)并补了任务血缘集成测试。仍在旧版本上使用飞书同步的用户建议尽快升级。
验证
go test ./...、make test-integration(临时 pgvector 容器)、Web Console pnpm check / test / build 全绿;全栈 E2E 冒烟(Playwright + standalone 模式)覆盖「建源 → 同步 → 内容可见 → 检索命中」用户流程;firecrawl(自托管实例)与 Obscura(CDP 渲染)均通过真实 provider 全链路验证。检索评测不适用本版(无检索算法变更)。