Dropbox 正在把 Riviera 从文件预览服务升级为通用内容处理平台。如今,Riviera 支持 300 多种文件格式、超过 100 项转换能力,每秒可以处理数十万次转换,并服务于 Search、Replay、Sign 和 Dash 等产品。更值得关注的是,它的异步内容提取 API 开始直接面向 AI 与 RAG 工作流。
Riviera 解决的核心问题
文件平台的难点从来不只是“能不能打开一个文件”。用户搜索文档、回放媒体、完成电子签名,或让 AI 理解企业知识,都需要把原始文件转换成适合不同场景消费的内容。
同一个文件可能需要同时产生多种结果:
- 面向预览的图片、缩略图或页面渲染结果
- 面向搜索的文本、元数据和索引字段
- 面向 RAG 的分段文本、结构信息和可追溯位置
- 面向签署流程的页面图像或规范化文档
- 面向分析和回放的媒体转码结果
Riviera 的平台化方向,关键不在于单独增加某一种格式支持,而在于把格式解析、转换、调度和结果交付统一起来。这样,上层产品可以通过同一套内容处理能力构建不同业务,而不必分别维护一组互不兼容的转换服务。
从同步预览转向异步处理
文件处理具有明显的不确定性:文件大小不同,格式复杂度不同,某些转换还需要执行 OCR、解码或版面分析。让 API 请求一直等待结果,会带来超时、资源占用和重试风暴。
异步 API 更适合这类工作流。调用方提交文件和处理任务,平台返回任务 ID;任务完成后,再通过轮询或回调获取结果。对于 AI 和 RAG,异步模式还方便把“文件上传”“内容抽取”“切分与嵌入”“索引写入”拆成可观测的阶段。
下面是一个可以改造成实际服务调用的示例。由于来源摘要没有给出 Riviera 的具体接口格式,示例中的地址和字段是实践用的占位设计,不代表 Dropbox 的公开 API:
# 1. 提交异步内容提取任务
curl -X POST "https://content.example.internal/v1/extractions" \\
-H "Authorization: Bearer $CONTENT_TOKEN" \\
-H "Content-Type: application/json" \\
-d '{
"file_id": "file_12345",
"operations": ["text", "metadata", "layout"],
"callback_url": "https://rag.example.internal/hooks/content-ready"
}'
# 假设返回:{"job_id":"job_789","status":"queued"}
# 2. 查询处理状态
curl -H "Authorization: Bearer $CONTENT_TOKEN" \\
"https://content.example.internal/v1/extractions/job_789"
生产实现中,任务状态至少应区分 queued、running、succeeded 和 failed。对于失败任务,还应返回可判断的错误类型,例如不支持的格式、文件损坏、超出大小限制或下游存储暂时不可用。
对 AI 和 RAG 的实际意义
RAG 系统的质量通常从检索阶段开始,而检索质量又受内容抽取质量影响。如果 PDF 的表格被打散,演示文稿的标题层级丢失,或扫描件没有经过 OCR,后续的分段、向量化和回答生成都会受到影响。
将内容处理平台直接接入 AI 工作流,可以形成更稳定的流水线:
- 文件进入对象存储并生成唯一版本号。
- 异步任务提取文本、元数据、布局和媒体信息。
- 处理结果写入规范化的内容存储。
- 按文档结构切分,并保留页码、段落和文件版本等引用信息。
- 生成嵌入向量并写入检索系统。
- 文件更新或删除时,按照版本号和文档 ID 清理旧索引。
一个简单的处理结果结构可以这样设计:
{
"document_id": "doc_123",
"version": "v7",
"content": "合同正文……",
"blocks": [
{
"text": "付款条款……",
"page": 4,
"type": "paragraph"
}
],
"metadata": {
"mime_type": "application/pdf",
"language": "zh-CN"
}
}
这里的 version 和 page 等字段并不是装饰信息。它们决定了系统能否在文件更新后准确重建索引,也决定了 AI 回答能否向用户提供可验证的原文位置。
高吞吐平台需要关注什么
每秒处理数十万次转换,意味着平台设计不能只围绕单次请求的平均延迟。更重要的指标包括队列长度、不同格式的处理耗时、失败率、重试次数、资源利用率以及结果可用时间。
可以重点检查以下边界:
- 幂等性:同一个文件版本和同一种转换请求重复提交时,不应产生无法管理的重复任务。
- 背压:下游 OCR、对象存储或向量数据库变慢时,队列需要限制并发,避免系统级联故障。
- 资源隔离:大型视频、复杂 PDF 和普通文本不应无差别争抢同一组执行资源。
- 结果缓存:相同输入、相同参数和相同处理器版本可以复用结果,但处理器升级后需要重新评估缓存有效性。
- 可追踪性:每个结果都应能关联到文件 ID、版本、任务 ID、处理器版本和错误原因。
- 安全边界:文件内容可能包含敏感数据,临时文件、日志和回调接口都需要遵守访问控制与数据保留策略。
采用建议
Riviera 的演进说明了一个通用趋势:文件预览、搜索索引和 AI 内容理解正在共享同一层内容处理基础设施。对于正在建设企业 RAG 或文档自动化系统的团队,可以从以下顺序开始:
- 先定义统一的文件 ID、版本号和处理结果格式。
- 将耗时处理设计为异步任务,并明确重试与幂等规则。
- 保存结构化引用信息,而不是只保存一段没有来源的纯文本。
- 用真实文件集评估格式覆盖率、抽取准确率和处理延迟。
- 将平台指标拆到格式、处理器和业务调用方维度,避免平均数掩盖问题。
真正可复用的内容平台,不只是支持更多文件格式,而是让同一份内容能够稳定地被预览、搜索、签署、回放和 AI 系统消费。Riviera 面向 AI 工作负载的扩展,体现的正是这种从“文件功能”走向“内容基础设施”的架构变化。