2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
我如何构建一个使用大语言模型作为转换层、并使用 Delta Lake 进行有状态内容版本控制的流式处理管道
我的第一个作品集项目(弹道学)是批处理模式——按计划调用应用程序接口,使用 Airflow 进行编排,以及使用亚马逊简单存储服务作为数据落地区。我的第二个项目(脉搏)是流式处理模式——使用卡夫卡,实现精确一次交付,并在 dbt 中进行会话分析。两者都使用了相同的转换工具(dbt),但采用了不同的数据摄入模式。
哨兵是第三个项目,而核心问题发生了变化。弹道学和脉搏处理的是结构化数据——来自应用程序接口的 JSON 数据和模拟的点击流事件。当原始数据是非结构化时会发生什么?当“转换”不再是结构化查询语言模型,而是一个从原始超文本标记语言中提取实体、情感倾向和摘要的大语言模型时呢?
哨兵是一个新闻情报管道,它从多个来源摄入文章,使用大语言模型提取结构化数据,并通过应用程序接口和仪表板提供服务。它不是一个产品,而是对人工智能增强型数据工程模式的可行性验证。
我构建的内容
全球事件、语言和语调数据库 + 简易信息聚合 ──► 卡夫卡 ──► 抓取器 ──► 卡夫卡 ──► 大语言模型解析器 ──► 卡夫卡 ──► 青铜层写入器 ──► Delta Lake ──► FastAPI
│ │ │ │
Redis 一级/二级 死信队列主题 Delta Lake 写入 PySpark 合并
(去重网关) (指数退避) (变更数据反馈)
两个生产者(全球事件、语言和语调数据库和一个包含18个源头的简易信息聚合器)发现文章网址并将它们推送到卡夫卡。一个抓取器消费者检索超文本标记语言内容。一个大语言模型解析器提取结构化数据——标题、作者、公司、人物、主题、情感倾向、摘要——并将其生产到 parsed_articles(已解析文章)主题中。一个青铜层写入器消费者从该主题读取数据并写入 Delta Lake。一个 PySpark 作业使用有状态的合并操作将青铜层数据转换为白银层数据。FastAPI 将白银层数据提供给一个 React 仪表板。
所有服务均在 Docker 中本地运行——包括处于 KRaft 模式的卡夫卡、Redis 和仪表板。生产者、抓取器和解析器都是长期运行的 Python 服务。
架构
┌──────────────┐
│ 全球事件、 │──┐ ┌─────────────┐ ┌─────────────┐
│ 语言和语调 │ ├───►│ Redis 去重 │────►│sentinel.urls│
│ 数据库 │ │ │ 一级+二级 │ └──────┬──────┘
│ 生产者 │ │ │ 键值 │ │
└──────────────┘ │ └─────────────┘ │
┌──────────────┐ │ ▼
│ 简易信息 │──┘ ┌─────────────────────┐
│ 聚合器 │ │ 抓取器 (事务) │
│ (18个源) │ │ 开始→抓取→提交 │
└──────────────┘ └──────────┬──────────┘
▼
┌──────────────────┐
│sentinel.raw_html │
└──────────┬───────┘
▼
┌─────────────────────┐
│ 大语言模型解析器 │
│ (事务) │
│ OpenAI / Anthropic │
│ / DeepSeek │
└──────────┬──────────┘
┌──────────┐ │
│ 死信 │◄── 失败 │
│ 队列 │ │
│ 重放 │ │
│1分→5分→30分│ │
└──────────┘
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。