乐于分享
好东西不私藏

AI 应用效果差?来看看 Data+AI 全链路实战

AI 应用效果差?来看看 Data+AI 全链路实战
最近一直在做一件事:基于真实业务场景,从数仓建设到 AI 应用上线,把 Data+AI 整条链路上线
做之前以为最难的是 AI 那层——模型选哪个、prompt 怎么写、Agent 怎么编排。
做完发现,数据往往才是决定性因素
现在讲模型的多,讲数仓的多,讲检索的也不少——但把这三层怎么串起来、数据怎么从原始库一步步流转到最终被 AI 消费,成体系讲完的几乎没有这也是之前有小伙伴提到过的。
今天这篇,把这条链路的关键点拎出来,给你一个全景。
全链路总览
数据源(多业务库)  ↓篇一 · 数仓建设 —— AI 数据底座  ↓篇二 · 数据流转 —— Flink CDC 实时 + 离线双轨  ↓篇三 · 搜索检索 —— 7 个版本迭代,召回率 50% → 92%  ↓篇四 · AI 应用 —— Data Agent + 安全沙箱 + LLM 工程化

篇一  数仓建设到 AI 数据底座

传统数仓的终点是 ADS 层出报表,到这就结束了。
但在 Data+AI 场景下,数仓是起点,不是终点。数据从 ADS 出来之后还要经过:搜索引擎索引 → RAG 上下文构建 → Workflow 编排 → Agent 消费。
这意味着数仓的设计目标需要发生根本性的转变:

三个范式转变

1. 交付对象从「人」到「模型」

传统数仓产出的是给人看的报表和大盘。AI 底座还需要产出模型可消费的知识单元——搜索字段、Embedding 向量、结构化 API。

2.数仓从终点变起点

数据链路不再止步于 ADS:
ODS → DWD → DWM → DWS → ADS → 搜索引擎 → RAG → Agent                                 ↑                           传统数仓在这里就停了

3. 质量标准从「准确完整」到「可召回、低幻觉」

数据不只要对,还要能被 AI 找到、理解、正确引用。如果搜索字段拼得不好,检索层给出的上下文就是噪声,LLM 的回答就是幻觉。

具体怎么做?举两个例子

1.ADS层产出搜索字段

传统数仓不会专门为搜索拼字段。但我们在数仓对数据进行加工,供搜索引擎使用。
这个设计有多关键?——搜索召回率从 v3 的 65% 到 v4 的 72%,没换算法,只是重构了搜索的拼接方式,一次跳了 7 个点。数据质量直接决定了 AI 上层的效果。

2. 102 列 → 14 列:面向模型消费的瘦身

v1 核心事实表 102 列,字段语义混乱,下游没法用。v2 重新梳理实体关系,将混乱的来源字段拆成三个独立维度,表瘦身到 14 列。不是砍字段,是让数据对模型来说更"可理解"。

篇二  数据流转:实时 + 离线双轨

数仓建好了,数据怎么流到下游搜索引擎和 AI 系统?
Flink CDC 毫秒级同步,P99 < 500ms
直连 PostgreSQL WAL,变更从捕获到写入下游延迟在 500ms 以内。
但 CDC 真正的难度不在"接上",在生产环境的边界情况
发布状态门控:业务上只有"已发布"的数据才应该进入搜索。我们用 Flink ConnectedStreams + MapState 实现状态关联——数据先缓存,等发布状态到达后才放行写入。
Sink 端数据补全:状态触发的写入,在 Sink 端回查数据库补全完整文档。这样 Process 流和 Status 流就不需要严格时序对齐——解耦了两条流的时序依赖。

离线全量同步

百万级文档全量同步约 3 小时,采用分批并发 + Bulk 写入。实时和离线双轨并行,互为兜底。

篇三 数据检索:7 个版本,召回从 50% 到 92%

这一篇迭代次数最多,搜索索引从 v1 做到了 v7。

演进路线

版本

核心改动

召回率

v1

纯 BM25

<50%

v2

字段加权 + 过滤条件

58%

v3

分词器优化

65%

v4

数据质量重构

72%

v5

向量检索

78%

v6

BM25 + 向量混合 + 去重

86%

v7

权重优化 + 分层策略

92%

关键发现:v1→v3 换算法,每次提升几个点。v4 没换算法,只重构了搜索字段的数据拼接方式,一次跳了 7 个点


Embedding 领域微调

通用模型对专业术语的理解差。领域微调后:
NDCG@10+36.3%
Recall@10+31.9%
MRR@10+39.7%
训练数据:9,500+ 查询,95,000+ 语料,每个 query 10 个负例(随机 + hard negatives)。

8 种搜索策略体系(S1-S8)

不是一套参数吃遍所有场景。按业务场景分了 8 种策略,各有独立的阈值、字段权重和匹配逻辑。
高难度场景走Hard-case Pipeline:LLM 改写多查询 → 每查询独立 BM25 → 向量重排 → 按唯一标识 max-pooling 聚合。
配合 Latin Hypercube 采样 200 + 100 组的离线权重网格搜索,参数优化全自动。

篇四  AI 应用:从检索到智能

有了前三层数据底座和检索能力,AI 应用才有地基可用。

双数据源 Data Agent

同一个 Agent 同时对接 SQL 查询和搜索引擎——Agent 按意图自动路由
结果:自主取数完成任务,不再依赖人工。

五层 SQL 安全沙箱

AI 生成的 SQL 要跑在生产库上,安全不是可选项:

层级

防御

第 1 层

SELECT-only 白名单

第 2 层

11 个危险关键字的词边界正则检测

第 3 层

去引号后分号检测(防 SQL 注入)

第 4 层

注释注入拦截(-- 和 /*

第 5 层

自动 LIMIT 注入(默认 200,最大 1000)

同时做了Prompt 注入防御的三类攻击分析:语法层直接注入、语义层绕过约束、间接注入(检索文档里埋恶意指令)。每类都有对应的防御策略。

LLM 工程化

AI 应用上线只是开始。要在生产环境持续跑,需要:

Prompt 版本管理:每次修改可回溯、可对比

模型可替换:今天用 A 模型,明天换 B,接口不变

输出校验:LLM 返回不符合预期时的降级策略

成本追踪:token 用了多少、每个请求花了多少

行为可观测:调用链路全程可追踪

做到这一步,AI 才从"功能插件"变成业务工程能力

写在最后

以上只是每篇挑了几个点,完整还涵盖技术选型决策、生产踩坑速查表、环境搭建指南。当前 v1.0,持续更新。
如果对这个全链路项目感兴趣,后台回复「项目」

如果你大数据/AI 感兴趣,欢迎关注「小友Data+AI」,持续分享数据 × AI 的工程实践