大模型应用需要实时的业务数据,实时上下文链路怎么设计?

第 1216 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 先区分数据的时效需求
  3. 实时链路的设计
  4. 给模型的上下文要注意
  5. 一致性问题

面试怎么回答

我会先按时效区分:订单状态、库存、余额这类秒级当前状态直接查业务接口或实时同步的副本;近期行为用实时链路加工;画像和累计统计用离线数仓;政策说明走 RAG。实时部分通过 CDC 和消息队列采集,用 Flink 计算近期特征,写入低延迟的 KV 或缓存,封装成工具接口给 Agent 调用,服务层把离线画像和实时数据合并。给模型的数据要标注更新时间、只返回需要的字段,用户 ID 由系统注入保证只能查本人数据,链路延迟时明确告诉模型数据可能有延迟。还要保证实时和离线口径一致,监控延迟并定期和业务库对账。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

客服 AI 被用户问:「我刚下的订单什么时候发货?」如果 AI 用的是 T+1 的数据,就只能答「查不到」或者答错。越来越多的大模型应用需要实时的业务状态作为上下文:订单状态、库存、账户余额、最近的操作记录。面试官问这题,想看你怎么把实时数据能力和大模型应用结合起来。

先区分数据的时效需求

  • 秒级的当前状态:订单状态、库存、余额。最好直接查业务系统的接口或者实时同步的副本;
  • 分钟级的近期行为:用户最近浏览了什么、最近的投诉记录。适合实时数据链路加工;
  • 天级的画像和统计:用户等级、历史偏好、累计消费。离线数仓产出即可;
  • 文档知识:政策、说明,走 RAG。

不要所有数据都做实时,成本会很高。

实时链路的设计

  1. 数据采集:业务库通过 CDC 实时同步变更,行为数据从消息队列接入;
  2. 实时加工:用 Flink 这类流计算引擎计算近期的统计特征(最近 1 小时的操作次数、最近一笔订单的状态);
  3. 在线存储:结果写入低延迟的 KV 存储或缓存,按用户 ID、订单 ID 查询;
  4. 服务化:封装成工具接口,比如「查询用户最近的订单状态」,供 Agent 调用;
  5. 离线和实时的合并:画像这类离线数据和实时数据在服务层合并,返回给模型一个完整的上下文。

给模型的上下文要注意

  • 带上时间:每条数据标明更新时间,「订单状态:已发货(更新于 10:32)」,模型才能判断数据新不新;
  • 精简:只返回回答问题需要的字段;
  • 权限:只能查当前用户自己的数据,用户 ID 由系统注入,不能由模型从对话中提取后随意填写;
  • 兜底:实时链路延迟或故障时,告诉模型「数据可能有延迟」,而不是给出过期数据还当作最新的。

一致性问题

  • 实时数据和离线数据口径要一致,比如「订单金额」在两边的定义相同;
  • 实时链路要监控延迟和数据完整性,和业务库定期对账。