大模型应用需要实时的业务数据,实时上下文链路怎么设计?
面试怎么回答
我会先按时效区分:订单状态、库存、余额这类秒级当前状态直接查业务接口或实时同步的副本;近期行为用实时链路加工;画像和累计统计用离线数仓;政策说明走 RAG。实时部分通过 CDC 和消息队列采集,用 Flink 计算近期特征,写入低延迟的 KV 或缓存,封装成工具接口给 Agent 调用,服务层把离线画像和实时数据合并。给模型的数据要标注更新时间、只返回需要的字段,用户 ID 由系统注入保证只能查本人数据,链路延迟时明确告诉模型数据可能有延迟。还要保证实时和离线口径一致,监控延迟并定期和业务库对账。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
客服 AI 被用户问:「我刚下的订单什么时候发货?」如果 AI 用的是 T+1 的数据,就只能答「查不到」或者答错。越来越多的大模型应用需要实时的业务状态作为上下文:订单状态、库存、账户余额、最近的操作记录。面试官问这题,想看你怎么把实时数据能力和大模型应用结合起来。
先区分数据的时效需求
- 秒级的当前状态:订单状态、库存、余额。最好直接查业务系统的接口或者实时同步的副本;
- 分钟级的近期行为:用户最近浏览了什么、最近的投诉记录。适合实时数据链路加工;
- 天级的画像和统计:用户等级、历史偏好、累计消费。离线数仓产出即可;
- 文档知识:政策、说明,走 RAG。
不要所有数据都做实时,成本会很高。
实时链路的设计
- 数据采集:业务库通过 CDC 实时同步变更,行为数据从消息队列接入;
- 实时加工:用 Flink 这类流计算引擎计算近期的统计特征(最近 1 小时的操作次数、最近一笔订单的状态);
- 在线存储:结果写入低延迟的 KV 存储或缓存,按用户 ID、订单 ID 查询;
- 服务化:封装成工具接口,比如「查询用户最近的订单状态」,供 Agent 调用;
- 离线和实时的合并:画像这类离线数据和实时数据在服务层合并,返回给模型一个完整的上下文。
给模型的上下文要注意
- 带上时间:每条数据标明更新时间,「订单状态:已发货(更新于 10:32)」,模型才能判断数据新不新;
- 精简:只返回回答问题需要的字段;
- 权限:只能查当前用户自己的数据,用户 ID 由系统注入,不能由模型从对话中提取后随意填写;
- 兜底:实时链路延迟或故障时,告诉模型「数据可能有延迟」,而不是给出过期数据还当作最新的。
一致性问题
- 实时数据和离线数据口径要一致,比如「订单金额」在两边的定义相同;
- 实时链路要监控延迟和数据完整性,和业务库定期对账。