InfoFlow AI 的核心不仅仅是一个脚本,而是一个基于 DAG (有向无环图) 的自动化媒体工厂。系统采用模块化微服务设计,确保任何一个环节(如 TTS 引擎升级)都可以独立替换而不影响整体流程。
1. 系统架构全景图 (System Overview)
Jina Reader
LangChain
Pydub
FFmpeg
2. 核心技术栈 (Tech Stack)
- 编程语言: Python 3.10+ (胶水语言,处理所有 I/O 和逻辑)。
- 流程编排: LangChain (用于管理 LLM 的 Prompt Template 和 Chain)。
- 大语言模型: OpenAI GPT-4o / DeepSeek V3 (负责理解、改写、结构化输出)。
- 搜索服务: Tavily Search API (专为 AI Agent 优化的搜索引擎)。
- 内容清洗: Jina Reader API (将 HTML 转换为对 LLM 友好的 Markdown)。
- 语音合成: ElevenLabs API (多角色、高情感 TTS)。
- 媒体处理: MoviePy (视频合成), Pydub (音频处理), FFMPEG (底层转码)。
3. 模块详解 (Pipeline Details)
3.1 The Hunter (信息猎手)
任务: 解决“不知道今天要讲什么”的问题。
逻辑: 系统内置了一个 Cron Job(定时任务),每天早晨 8:00 触发。它会向 Tavily 发送查询请求(例如:"top AI news today"),并获取前 5 个结果的 URL。随后,利用 Jina Reader 抓取这些 URL 的正文内容,剔除广告和导航栏。
3.2 The Writer (王牌编剧)
任务: 解决“新闻太枯燥”的问题。
技术难点: LLM 通常喜欢输出一大段废话。我们需要它输出机器可读的 JSON。
Prompt 策略: 我们使用 Few-Shot Prompting,强制模型返回如下 JSON 结构:
3.3 The Studio (音频工作室)
任务: 解决“声音听起来像机器人”的问题。
实现逻辑: Python 脚本解析上述 JSON。系统维护一个 Voice_Map 字典,将角色 Alex 映射到 ElevenLabs 的特定 Voice ID。脚本并行调用 API 生成音频片段(Chunk),然后使用 Pydub 库将这些碎片按顺序拼接,并在对话切换处插入 300ms - 500ms 的静音(Silence),模拟真实呼吸感。
3.4 The Visualizer (视觉引擎)
任务: 将音频“可视化”以便在视频平台发布。
MVP 方案: 1. 封面生成: 调用 DALL-E 3 生成一张与新闻关键词匹配的 16:9 图片。 2. 波形动画: 使用 Python `matplotlib` 或 `numpy` 生成对应音频的动态波形视频流(可选)。 3. 合成: 使用 `MoviePy` 将封面图(静态)+ 音频(MP3)+ 字幕(SRT)压制为最终的 MP4 文件。
4. 数据流与存储 (Data Flow)
- Input: 关键词 (Keywords) 或 原始 URL。
- Process: Raw HTML -> Markdown -> JSON Script -> MP3 Chunks -> Final MP4。
- Output: 存储于 AWS S3 或本地 `output/` 文件夹,并生成元数据文件 `metadata.json`(包含标题、简介、标签,供上传脚本使用)。
5. 部署方案 (Deployment)
为了实现 7x24 小时无人值守,我们推荐以下部署方式:
- 容器化: 提供
Dockerfile,预装 FFMPEG 和 Python 依赖,解决环境一致性问题。 - CI/CD: 使用 GitHub Actions 进行轻量级任务(如抓取、写稿),或使用 Fly.io / VPS 处理重型的视频渲染任务。
- 通知机制: 集成 Telegram Bot 或 Slack Webhook。当视频生成完毕后,向管理员发送预览链接和“发布确认”按钮。