8  数据源、采集与变化捕获

本章产出: 企业数据源地图、采集策略矩阵,以及从源端责任到失败恢复的设计检查表。

AI 应用看到的企业世界,首先由采集层决定。源端没有被捕获的变化,模型无法知道;采集时丢失的业务语义,后面很难凭空恢复;错误复制的敏感信息,则可能在索引、缓存和提示上下文中留下多份副本。因此,采集并不是把数据“搬进来”的管道工程,而是企业上下文第一次被选择、解释和约束的地方。

在传统数仓项目中,团队往往从结构化业务表开始。Agent 的任务边界更宽:它既需要订单、设备和库存等事实,也需要合同、手册、图像和录音中的知识;既需要历史结果,也需要此刻状态;既要读取系统记录,也要理解专家为何做出某个判断。数据源地图必须跨越数据库、事件、文档、SaaS、日志和人工知识,而不能把“非结构化数据”简单归入一个杂项。

8.1 先建立数据源地图

数据源盘点不应只列系统名称。对每个来源至少记录业务所有者、技术所有者、权威对象、更新方式、变化频率、数据量、敏感等级、保留要求、关键消费者和已知质量问题。更重要的是,说明它在目标任务中扮演什么角色。

来源类型 典型内容 主要难点 常见采集方式
交易数据库 客户、订单、设备、库存 源端负载、事务一致性、模式变化 批量、CDC、只读 API
SaaS 应用 CRM、工单、协作记录 API 限流、权限映射、字段定制 API 拉取、Webhook
文档与多媒体 手册、合同、图片、录音 版本、版面、OCR、适用范围 文件事件、对象存储同步
事件与设备流 告警、状态、用户行为 乱序、重复、迟到、峰值 消息总线、流式采集
日志与可观测数据 应用日志、审计、链路 体量、敏感字段、短时价值 日志代理、流式汇聚
人工知识 专家经验、例外规则 隐性语境、真实性、持续维护 访谈、结构化表单、审核发布

山城精工的售后助手需要 ERP 中的设备与备件、MES 中的出厂配置、CRM 中的客户合同、工单系统中的维修历史、设备平台中的告警、文档库中的手册和公告。源地图还要标明:设备主身份以哪个系统为准,现场换件记录由谁维护,库存“可承诺量”由哪项业务服务计算,手册适用型号和生效日期在哪里保存。只有系统名没有这些解释,数据接得越多,冲突可能越多。

8.2 根据变化性质选择采集方式

批量、CDC、事件和 API 没有天然优劣。选择标准是业务允许的数据年龄、源端能力、变更语义、恢复要求和总成本。

8.2.1 批量同步

批量适合变化较慢、允许小时或天级延迟、可以按稳定切片读取的数据。它实现简单、易于重放,适合历史工单、每日产品目录和低频参考表。风险在于全量扫描给源库带来压力,基于更新时间的增量可能漏掉删除和回补,跨表快照也未必一致。设计时应明确水位、分区、删除表示、校验和补数流程。

8.2.2 变更数据捕获

CDC 从数据库日志捕获插入、更新和删除,适合需要较低延迟且不能反复扫描源库的交易数据。它保留变化顺序,却不自动提供完整业务语义:一次订单更新可能由多个表事件组成,日志中的技术删除也可能代表业务归档。CDC 管道要处理初始快照与增量切换、事务边界、模式变更、重复消费和断点恢复,并避免把源库内部结构直接固化为外部契约。

8.2.3 业务事件流

业务事件表达“发生了什么”,例如设备发生告警、工单已结案、备件已锁定。它比原始表变化更接近领域语义,也更适合驱动实时 Agent 流程。前提是事件有稳定标识、发生时间、生产者、模式版本和幂等规则。不要把消息队列里的任何消息都称为业务事件;一个缺少所有者和语义的 JSON,只是另一种形式的耦合。

8.2.4 API 与 Webhook

当数据来自 SaaS 或只能通过业务服务访问时,API 是现实选择。API 可以封装权限和业务规则,但需要处理分页、限流、游标失效、令牌轮换、字段扩展和服务波动。Webhook 能降低轮询延迟,却仍要设计漏通知后的对账。对于库存、价格和权限等强业务语义,调用权威服务往往比复制底层表更可靠。

8.2.5 文件与对象存储事件

文档、图像、录音和批量交换文件通常通过对象存储进入。文件到达并不等于可用:需要验证格式、完整性、病毒与恶意内容,提取元数据,识别版本和语言,再进入解析流程。大文件上传要避免读到未完成对象;相同文档的重传应使用内容摘要去重;删除和撤回应沿索引、缓存和备份传播。

8.3 新鲜度从任务倒推

“我们需要实时数据”通常不是一个完整需求。应先问:数据变旧多少会导致错误判断,错误的损失是什么,系统是否能够利用更低延迟。

山城精工的设备基础信息可按小时同步,维修手册在正式发布后数分钟内完成索引即可,已结案工单可以每日处理;但当前告警、备件可用状态和工单锁定必须更及时。即便库存通过事件更新,Agent 在作出建议时仍应调用权威查询确认,因为事件缓存与最终业务动作之间可能再次变化。

新鲜度指标至少区分源端年龄和管道延迟。某条库存记录五分钟前进入平台,不代表它只旧了五分钟;源系统可能一天没有成功更新。数据服务应暴露“业务事件时间、采集时间、处理时间和当前时间”,让消费者判断是否超出任务允许范围。

8.4 处理重复、乱序和迟到

分布式采集不能假设事件只来一次且顺序完美。网络重试会产生重复,分区并行会改变顺序,离线设备会在恢复后补发旧事件。处理策略应在设计中明确:

  • 为事件设置全局或领域内唯一标识;
  • 以业务实体和版本号判断新旧,而非仅依赖到达时间;
  • 对写入采用幂等键,重复执行不产生额外业务影响;
  • 为迟到数据设置容忍窗口和更正机制;
  • 保留原始记录,派生状态可以重算;
  • 对无法自动决定的冲突进入隔离区,而非静默覆盖。

例如同一设备的固件版本从两个系统到达,一个记录事件时间较新但来源可信度较低。架构不能只用“最后写入获胜”,应按业务权威、事件时间和确认状态形成冲突规则,并把异常暴露给数据所有者。

8.5 模式变化是正常事件

源系统增加字段、修改枚举、调整嵌套结构或改变含义不可避免。真正危险的不是变化,而是变化没有被发现和沟通。采集层应保留模式版本,检测新增、删除和类型变化,并根据兼容性采取自动接受、告警或阻断。

技术兼容不代表语义兼容。字段仍是字符串,但“状态=A”的含义发生变化,自动模式检查不会发现。因此关键数据要有数据契约,规定字段、语义、质量、刷新、所有者和变更通知。生产者变更前进行契约检查,消费者通过血缘和依赖分析了解影响。对于破坏性变化,应提供并行版本和迁移窗口。

文档也存在模式。标题、章节、表格、适用型号、版本和生效日期构成文档结构;扫描件质量和版式变化会影响解析。文档发布流程应生成稳定文档标识与版本,而不是把文件名当主键。

8.6 在采集入口实施安全与最小化

数据进入 AI 链路后可能被复制到湖仓、搜索索引、向量库、缓存、评测集和日志。越晚识别敏感数据,清理成本越高。采集时应执行分类、标签和最小化:目标任务不需要的个人信息不采集,需要但不应进入模型的字段通过受控工具查询,可脱敏的内容在进入下游前处理。

采集凭据应使用独立服务身份和最小权限,避免共享管理员账号。网络链路加密,落地数据按分类加密和隔离。日志不得记录令牌、完整提示或敏感返回。数据驻留、跨境和保留规则要随数据传播,不能在复制后丢失。

对于文档和人工上传,还要防范提示注入与恶意内容。采集系统应区分“文档中的业务内容”和“对 Agent 的指令”,外部文本不能因此获得系统权限。来源可信度、审核状态和适用范围应成为检索过滤条件。

8.7 可重放比“永不失败”更现实

采集系统一定会失败:源端停机、网络中断、令牌过期、格式异常、消费者积压。可靠设计不是假设永不失败,而是能够发现、隔离、恢复和证明恢复完整。

每条管道应有水位与延迟监控、记录数和摘要对账、失败队列、重试策略、断点和运行手册。原始层尽量保留不可变输入与采集元数据,便于在解析规则修正后重放。重放必须保持幂等,并区分首次到达与历史回补,避免触发重复通知或业务动作。

恢复目标也应分级。设备告警链路可能要求分钟级恢复,历史文档索引可以在数小时内补齐。对关键管道定期演练凭据失效、消息积压、模式破坏和区域故障,远比只观察“任务成功”仪表盘可靠。

8.8 采集成本要按价值核算

低延迟 CDC、全量日志、高清多媒体和频繁 API 拉取都会增加源端、网络、存储与运维成本。数据“以后也许有用”不是无限保留的理由。路线图应按目标任务选择采样、压缩、冷热分层、保留周期和更新频率。

评估一种采集策略时,至少计算连接器和授权成本、源端影响、传输与存储、解析计算、失败运维以及下游复制。更重要的是计算每个成功任务所需成本。如果某类日志几乎从不参与诊断,却占据大部分索引开销,就应降低粒度或改为按需查询。

8.9 山城精工的采集策略

首期可以采用组合方案:

数据对象 方式 目标时效 关键控制
设备与客户主数据 增量批处理 小时级 主键映射、删除对账
出厂及变更配置 CDC 或业务事件 分钟级 顺序、版本、冲突隔离
手册与服务公告 对象事件 发布后分钟级 文档版本、适用范围、撤回
历史工单 每日批处理 日级 结论审核、个人信息脱敏
当前设备告警 事件流 秒至分钟级 重复、乱序、设备时钟
备件状态 权威 API + 短缓存 查询时确认 超时降级、不作库存承诺
用户和权限 身份服务查询 请求时 最小权限、审计

这张表体现的不是技术时髦程度,而是任务风险:长期事实适合稳定同步,实时状态接近事件,强事务信息在行动前回到权威服务确认。

8.10 本章交付物:采集设计清单

一个可以进入架构评审的采集方案,应对每个数据源说明:

  • 业务对象、权威来源和所有者;
  • 采集目的、允许延迟与消费场景;
  • 全量、增量、CDC、事件或 API 的选择理由;
  • 唯一标识、时间语义、删除、重复、乱序和回补处理;
  • 模式版本、契约、兼容规则和变更通知;
  • 敏感分类、凭据、驻留、脱敏和保留;
  • 对账、水位、告警、失败隔离、重试和重放;
  • 源端、网络、存储、解析和运维成本;
  • 停止采集和安全删除的条件。

采集层的成熟,不在于连接器数量,而在于企业能否解释每一份上下文为什么进入、来自何处、何时有效、谁可以使用、失败后如何恢复。只有入口可靠,后面的语义、检索和 Agent 服务才有可能建立可信闭环。