Docling Studio 开发札记

Docling Studio 现在拥有完整的闭环:Docling → 分块 → 嵌入 → OpenSearch。你可以在同一个界面中摄取、搜索、检查、编辑分块并重新嵌入。

Docling Studio 开发札记
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI模型价格对比 | AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

当我开始构建 Docling Studio 时,目标很简单:为开发者提供一种可视化方式来检查 Docling 从文档中提取的内容。边界框、分块、元数据——你需要看到才能信任流水线的那些东西。

但任何构建过 RAG 系统的人都知道,真正的问题不在于提取。而在于提取之后发生的一切。你的分块在 JSON 中看起来没问题。然后你嵌入它们、索引它们、运行查询——答案却是一堆垃圾。当你盯着 OpenSearch 中的向量 ID 时,祝你好运找出哪个分块出了问题。

版本 0.4.0 填补了这个空白。 Docling Studio 现在拥有完整的闭环:Docling → 分块 → 嵌入 → OpenSearch。你可以在同一个界面中摄取、搜索、检查、编辑分块并重新嵌入——你已经可以看到文档结构的那个界面。

这就是 Docling Studio 从查看器变成 RAG 流水线调试器的版本。

1、核心思想:拥有摄取流水线

这个版本背后的架构赌注很简单。不依赖外部编排器来存储正确的元数据,Docling Studio 运行自己的摄取流水线。Docling 解析文档,Studio 进行分块,嵌入微服务对分块进行向量化,OpenSearch 索引一切——包括边界框和文档坐标。

为什么这很重要?因为当你能够将一个错误的搜索结果追溯到一个精确的分块,在原始 PDF 页面上看到该分块高亮显示,编辑文本,并重新嵌入它——你就把一个 2 小时的调试会话变成了 30 秒的修复。

该流水线通过幂等重新摄取进行端到端编排。重新摄取同一文档会干净地替换之前的版本。没有孤立的向量,没有重复的分块。

2、第四个 Studio 模式:摄取

Docling Studio 的工作流已经按三种模式组织——Configure、Verify、Prepare。版本 0.4.0 增加了第四个:摄取(Ingest)

一旦你的文档分析完成,一键将分块通过嵌入发送到 OpenSearch。可视化步骤跟踪器显示进度(嵌入 → 索引 → 完成),带有动画反馈。不需要终端,不需要 curl 命令。

摄取模式还包括对索引分块的全文本搜索。你有一个专用的搜索侧边栏,可以查询已索引的文档并查看相关性分数——原始 BM25 分数,而不是之前误导性的百分比(这个问题也修复了)。

3、嵌入前编辑分块

这是我最兴奋的功能。你现在可以内联编辑分块文本——双击一个分块,修改文本,保存。你还可以软删除不想索引的分块。删除的分块保留在数据中(不会丢失任何东西),但从 UI 中消失,也不会被嵌入。

这就是 RAG "调试"的真正含义。你看到一个把表格标题和正文合并的分块?修复它。一个分块捕获了页脚?删除它。然后重新摄取。反馈循环以秒计算,而不是部署周期。

4、我的文档和监控

新的我的文档屏幕让你可以概览系统中的所有内容。按摄取状态(全部/已索引/未索引)筛选,按名称或日期排序,一眼就能看到哪些文档已准备好,哪些还没有。

侧边栏底部的 OpenSearch 连接指示器(绿色/红色圆点,每 30 秒轮询)告诉你后端是否健康,无需切换到其他工具。

5、功能标志:流水线是可选的

不是每个人都需要完整的摄取堆栈。如果你只想要可视化检查功能,没有任何变化——Docling Studio 完全像以前一样工作。

当你设置 OPENSEARCH_URLEMBEDDING_URL 时,摄取流水线会被激活。当这些未配置时,前端会自动隐藏所有摄取 UI。没有死按钮,没有令人困惑的界面。

对于确实想要完整堆栈的用户,专用的 docker-compose.ingestion.yml 覆盖文件可以通过一个命令启动 OpenSearch、嵌入服务和所有其他组件。

6、底层实现

对于架构上好奇的人,我想强调几点:

六边形架构的回报。 VectorStore 端口定义了契约(ensure_indexindex_chunkssearch_similarget_chunksdelete_document)。OpenSearch 适配器实现了它。当有人要求 Qdrant 或 Weaviate 支持时,只需一个新适配器——不需要重构。

嵌入服务是独立的。 它是一个独立的容器,在 REST API 后面运行 sentence-transformers,支持批处理。EmbeddingService 端口和 EmbeddingClient HTTP 适配器保持了解耦。换模型、换服务——Studio 不在乎。

OpenSearch 映射使用 FAISS/HNSW kNN,具有可配置的嵌入维度。IndexedChunk 领域模型携带一切:文本、向量、边界框坐标、文档引用、分块元数据。

测试: 380 个后端测试,161 个前端测试,加上覆盖从 PDF 上传到分块进入 OpenSearch 的完整摄取工作流的 E2E Karate 测试。

7、试试看

# Quick start — visual inspection only
docker pull ghcr.io/scub-france/docling-studio:0.4.0-remote
docker compose up
# Full stack with ingestion pipeline (opensearch + embeddings)
docker compose -f docker-compose.yml -f docker-compose.ingestion.yml up

两种镜像变体:0.4.0-remote(轻量级,委托给 Docling Serve)和 0.4.0-local(完整的 Docling 进程内运行)。

仓库在 github.com/scub-france/Docling-Studio。Star 不错,Issue 和 Fork 更好。

8、接下来的计划

这个版本奠定了基础。摄取流水线和分块编辑循环是接下来所有功能的构建块——并排模型比较、更智能的分块策略,以及与 Docling 生态系统的更深度集成。

如果你正在构建 RAG 流水线,并且花太多时间想知道为什么检索效果不好,试试 Docling Studio。其全部意义在于让不可见的东西变得可见。


原文链接: Docling Studio 0.4.0 — From Document Viewer to RAG Pipeline Debugger

汇智网翻译整理,转载请标明出处