---
name: searchnews
description: 当用户要求"搜索新闻"、"查询AI新闻"、"整理新闻"、"获取某天的新闻"，或提到需要搜索、整理、汇总指定日期的AI行业新闻时，应使用此技能。
metadata:
  version: "0.4.0"
---

# AI新闻搜索技能 (Ralph Loop 增强版)

## 概述

此技能用于从多个AI新闻源精确搜索指定日期的新闻，采用 Ralph Loop 模式进行地毯式迭代，确保不留死角。

## 核心机制 (Ralph Loop)

### 1. 任务清单 (prd.json)
记录待爬取的源网站及其状态。
- `date`: 目标日期，格式 YYYY-MM-DD
- `keywords_ref`: 引用关键词库文件路径（如 `references/keywords.md`），搜索时加载 10 大分类和 100+ 标签进行筛选
- `sources`: 每个源包含 `name`, `url`, `status` (pending/done/failed), `retry_count` (max 3)

### 2. 退出逻辑 (目标导向)
- **成功退出**：当所有 `sources` 状态均为 `done` 时，输出 `<promise>COMPLETE</promise>` 并立即停止循环。
- **失败容错**：单个源抓取失败时，最多尝试 **3次**。若 3 次均失败，将状态标记为 `failed`，记录失败原因，跳过该源。
- **高效收工**：一旦所有源都处理完毕（状态为 `done` 或 `failed`），立即生成最终日报并交付，不强制跑完预设的最大轮次。

## 必抓源列表（按优先级排序）

| 优先级 | 源名称 | URL | 说明 |
|--------|--------|-----|------|
| **高** | AIBase日报 | https://news.aibase.com/zh/daily | 每日AI新闻汇总，必抓！内容精炼、覆盖全面 |
| 中 | IT之家AI频道 | https://next.ithome.com/ | 国内科技资讯，AI专栏 |
| 中 | 36氪AI频道 | https://36kr.com/information/AI/ | 创投视角，AI产业报道 |
| 中 | 机器之心 | https://www.jiqizhixin.com/articles | 专业AI媒体，技术深度 |
| 中 | 量子位 | https://www.qbitai.com | AI前沿，产品报道 |

> **注意**：AIBase日报通常在当天发布，内容即为当天新闻汇总，是最高效的信息源。

## 工作流程

### ⚠️ 铁律：必须使用 Ralph 脚本启动！

**禁止手动乱抓！** 必须严格按以下流程执行：

```bash
# 第零步：启动 Ralph Loop（必须执行！）
bash .opencode/skills/searchnews/scripts/ralph/ralph.sh 2026-01-19
```

脚本会自动初始化 `prd.json`，然后 Agent 按任务清单逐个处理。

### 第一步：初始化任务清单（由脚本完成）
脚本会在 `.opencode/skills/searchnews/scripts/ralph/prd.json` 中生成源网站列表，初始状态均为 `pending`。**AIBase日报必须放在第一位，优先抓取。**

### 第二步：地毯式循环搜索
1. 读取 `prd.json` 中处于 `pending` 状态的源。
2. **每处理一个源，必须更新 prd.json 状态**（pending → done/failed）。
3. **每轮迭代必须写入 progress.txt**，记录进度和失败原因。
4. 严格校验日期，仅保留目标日期的内容。
5. 抓取失败时 `retry_count + 1`，最多重试3次。

### 第二点五步：深度检索（重要！）
**禁止只抓列表页！** 对于筛选出的重要新闻，必须深入到详情页抓取：
1. 从列表页提取新闻详情 URL
2. **逐条访问详情页**，获取完整内容
3. 提取关键信息：
   - 完整正文（不是摘要）
   - 技术细节、数据指标
   - 原始来源/论文链接
   - 划重点/要点总结
4. 深度检索的新闻质量远高于列表页复制粘贴

> **示例**：AIBase日报列表页只有标题和简介，但详情页有完整的技术解读、数据对比、划重点等深度内容。

### 第三步：去重与聚合
合并不同来源的相同新闻，保留详情最丰富的版本，合并标注来源。

### 第四步：输出结构化文档
文件存储在 `dailynews/YYYY-MM-DD/YYYY-MM-DD.md`（每日独立文件夹）。

#### 输出格式模板（必须严格遵守！）

```markdown
---
date: YYYY-MM-DD
type: 新闻日报
tags: [AI新闻, 日报]
---

# AI新闻日报 - YYYY-MM-DD

> 日期校验: 已通过 | 仅包含YYYY-MM-DD发布的新闻 | 已去重

---

## 1. 新闻标题

**分类**: 分类标签 | **来源**: 来源网站 | **时间**: YYYY/M/D HH:MM

一句话摘要，概括新闻核心内容。

**详情**：
- 详情要点1（包含具体数据、指标）
- 详情要点2
- 详情要点3
- 详情要点4（可选）
- 详情要点5（可选）

---

## 2. 下一条新闻标题
...

*数据来源: 来源列表 | 整理时间: YYYY-MM-DD*
```

#### 格式要点
1. **每条新闻必须包含**：编号标题、分类|来源|时间、摘要、详情要点（3-5条）
2. **详情要点必须包含具体数据**：金额、百分比、时间节点、技术指标等
3. **分类标签参考**：AI基础设施、AI产品、投融资、机器人、商业化、AI监管、行业观点、企业战略、AI能力、趣闻等
4. **时间格式**：精确到分钟（如 2026/1/19 15:28）
5. **新闻数量要求**：每日至少整理 10-20 条新闻，不得偷懒只抓几条！

### 第五步：确认完成
当所有源状态均为 `done` 或 `failed` 时，输出：
```
<promise>COMPLETE</promise>
```

## 质量要求

- [ ] **必用脚本**：必须先执行 `ralph.sh` 初始化，禁止手动乱抓！
- [ ] **状态追踪**：每处理一个源必须更新 `prd.json` 状态。
- [ ] **进度记录**：每轮迭代必须写入 `progress.txt`。
- [ ] **必抓AIBase**：AIBase日报是必抓源，每次整理新闻必须首先访问。
- [ ] **深度检索**：禁止只抓列表页！重要新闻必须深入详情页获取完整内容。
- [ ] **全量覆盖**：必须尝试清单中所有的源网站。
- [ ] **日期铁律**：严禁混入非目标日期的新闻。
- [ ] **标签映射**：必须对照 10 大分类进行精准打标。
- [ ] **详情完整**：包含标题、摘要、3-5条详情要点、溯源链接、精确时间。
- [ ] **循环退出**：所有源 done/failed 后才输出 `<promise>COMPLETE</promise>`。

## ⛔ 输出铁律（违反即解雇！）

### 被剔除的新闻禁止输出！
1. **只输出符合日期的新闻**：最终日报中只能出现目标日期的新闻
2. **剔除的不要提**：因日期不符被剔除的新闻，**禁止在任何地方输出或提及**
3. **不要显示剔除过程**：不要告诉用户"我剔除了 xx 条"、"以下是被过滤的"等废话
4. **静默过滤**：日期校验是内部逻辑，用户只需要看到最终结果，不需要知道你筛掉了什么
5. **简洁交付**：只输出干净的、符合日期的新闻列表，没有任何多余说明

**错误示例（禁止！）**：
```
以下新闻因日期不符已剔除：
- xxx（1月18日）
- yyy（1月20日）
```

**正确做法**：
静默跳过不符合日期的新闻，只输出符合的，一个字都不要多说。

## 资源引用

- **scripts/ralph/ralph.sh** - 启动主循环。
- **scripts/ralph/prd.json** - 动态任务清单。
- **scripts/ralph/progress.txt** - 迭代进度与重试日志。
- **references/keywords.md** - 10 大分类 100+ 标签地图。
- **templates/** - 视频风格模板库。

---

## 第六步：生成新闻视频（可选）

新闻日报整理完成后，可生成AI新闻视频。

### 6.1 交互流程（必须询问！）

收到"生成新闻视频"请求后，**必须依次询问**：

#### 问题1：确认日期
```
生成哪天的新闻视频？
- 今天 (YYYY-MM-DD)
- 昨天 (YYYY-MM-DD)  
- 自定义日期
```

#### 问题2：是否使用风格模板
```
是否使用提示词库中的风格模板？
- 是，使用模板 (推荐) - 从21种预设风格中选择，风格统一
- 否，自由生成 - 不使用模板，AI自由发挥
```

**如果选择"使用模板"，继续问题3；否则跳到问题4**

#### 问题3：选择视觉风格（21种）

**风格提示词库位置**：`{prompts_dir}/图片生成风格/AI新闻早报风格/`

```
选择配图风格：

【科技感】
- 默认风格-Dashboard (推荐) - 科技仪表盘，数据可视化
- 赛博未来风 - 霓虹赛博朋克
- 科技媒体封面风 - 新闻媒体封面感
- AI操作系统界面风 - JARVIS控制台风格
- 深色金融终端风 - Bloomberg终端感
- 全息投影风 - 全息科幻
- 量子科幻风 - 量子粒子效果

【简约风】
- 毛玻璃拟态风 - 苹果风毛玻璃
- 信息图表风 - 数据信息图
- 极简信息设计风 - 扁平极简

【特色风】
- 未来报纸头版 - 报纸版式
- 杂志封面风 - 杂志风格
- 漫画分镜风 - 漫画格子
- 太空宇宙风 - 星空宇宙
- 水墨国风 - 中国风水墨
- 复古像素风 - 8bit像素
- 霓虹波普风 - 波普艺术
- 工程蓝图风 - 技术蓝图
- 自然有机风 - 环保自然
- 未来实验室风 - 实验室科研
- 社交媒体爆款风 - 抖音小红书
```

#### 问题4：生成模式
```
选择生成模式：
- 完整版（总览+详情）(推荐) - 1张总览图 + N张详情图
- 仅总览 - 只生成1张总览图
- 仅详情 - 只生成N张详情图
```

#### 问题5：新闻数量（如果超过10条）
```
日报共有XX条新闻，如何处理？
- 全部生成
- 精选10条 - 自动挑选最重要的
- 精选5条 - 只做头条
```

### 6.2 加载并使用风格模板

#### 步骤1：读取模板文件
```
{prompts_dir}/图片生成风格/AI新闻早报风格/{风格名}.md
```

#### 步骤2：提取"完整提示词模板"
每个风格文件都包含 `## 完整提示词模板` 段落，提取其中的提示词。

#### 步骤3：替换变量
| 变量 | 替换内容 | 示例 |
|------|----------|------|
| `{日期}` | 日报日期 | 2026年01月23日 |
| `{N}` | 新闻条数 | 25 |
| `{新闻列表}` | 编号+标题列表 | 1. ChatGPT Atlas更新... |

#### 步骤4：生成总览图
用替换后的提示词调用 image-service：
```bash
python .opencode/skills/image-service/scripts/text_to_image.py \
  "{替换变量后的完整提示词}" -r 16:9 -o "assets/video/{日期}/00_overview.png"
```

#### 步骤5：生成详情图
每条新闻单独生成，提示词结构：
```
AI新闻详情配图 - {风格名}

【新闻标题】{标题}

【新闻要点】
- {要点1}
- {要点2}
- {要点3}

【视觉要求】
- 沿用{风格名}的视觉风格
- 中心突出新闻主题的3D/扁平化插图
- 标题大字清晰，要点用图标化卡片展示
- 底部水印：{your_watermark}

输出尺寸：2560x1440 横版 16:9
```

### 6.3 视频生成流程

#### 目录结构
```
assets/video/{YYYY-MM-DD}/
├── 00_overview.png      # 总览图
├── 01_xxx.png           # 详情图1
├── 02_xxx.png           # 详情图2
├── ...
├── audio/
│   ├── 00_overview.mp3  # 总览配音
│   ├── 01.mp3           # 详情配音1
│   └── ...
├── video.yaml           # 合成配置
└── {日期}_ai_news.mp4   # 最终视频
```

#### 生成命令

```bash
# 1. 创建目录
mkdir -p "assets/video/{日期}/audio"

# 2. 并发生成配图（使用 text_to_image）
python .opencode/skills/image-service/scripts/text_to_image.py \
  "{风格提示词}" -r 16:9 -o "assets/video/{日期}/00_overview.png"

# 3. 并发生成配音
python .opencode/skills/video-creator/scripts/tts_generator.py \
  --text "{配音文本}" \
  --voice zh-CN-YunyangNeural \
  --output "assets/video/{日期}/audio/XX.mp3"

# 4. 合成视频
python .opencode/skills/video-creator/scripts/video_maker.py \
  assets/video/{日期}/video.yaml
```

### 6.4 配音规范

| 场景 | 文本模板 |
|------|----------|
| 总览 | "AI早报，{日期}。今天共有{N}条AI行业重磅新闻，让我们一起来看看！" |
| 详情 | "第X条，{标题}。{摘要}" |
| 结尾 | 最后一条追加"以上就是今天的AI早报，感谢收看！" |

**音色选择**：
- `zh-CN-YunyangNeural` - 男声，新闻播报（推荐）
- `zh-CN-YunxiNeural` - 男声，阳光活泼
- `zh-CN-XiaoxiaoNeural` - 女声，温暖自然

### 6.5 视频配置模板 (video.yaml)

```yaml
output: {YYYY-MM-DD}_ai_news.mp4

scenes:
  - image: 00_overview.png
    audio: audio/00_overview.mp3
  - image: 01_xxx.png
    audio: audio/01.mp3
  # ... 依次列出所有场景
```

### 6.6 完成后输出

```
✅ 视频生成完成！

📍 位置：assets/video/{日期}/{日期}_ai_news.mp4
⏱️ 时长：X分X秒
🎬 场景：X个（1总览 + X详情）
🎨 风格：{选择的风格}

是否打开预览？
```

### 6.7 注意事项

1. **并发生成**：配图和配音都要并发，提升效率
2. **水印**：所有配图底部必须添加水印
3. **片尾**：视频自动拼接通用片尾
4. **BGM**：自动添加科技风背景音乐
5. **比例**：所有配图使用 16:9 横版
