---
slug: "科技新闻日报"
source_type: "clawhub"
source_url: "https://clawhub.ai/skills/technews-daily-report"
repo: ""
source_file: "description"
---
---
name: tech-news-daily
version: 0.4.0
description: "每日AI/科技热榜日报。从AIHOT单站读取近3天热榜，生成报告并同步飞书文档，只发链接不发全文。"
---

# 科技新闻日报 | Tech News Daily

> **版本：** 0.4.0（数据源切换为 AIHOT 单站，彻底解决 AI overload 问题；时效从一周缩短为近3天；cron 从每2天改为每天；飞书文档存入「科技新闻日报」知识库目录，node: `Iv9UwDW5viSJDWk12j7cBazYn8b`）

**v0.4.0 更新说明：**
- 数据源从 Tavily 全网搜索切换为 AIHOT（aihot.virxact.com）单站聚合
- 彻底移除 Tavily 搜索，大幅降低 token 消耗，避免 AI overload
- AIHOT 内容已经过质量筛选，直接整理使用

## 概述

每日从 AIHOT（aihot.virxact.com）读取已聚合整理的 AI/科技热榜，整理生成报告，同步到本地文件和飞书文档。

## 数据源

**AIHOT（aihot.virxact.com）** — AI 行业动态聚合站，每日提供精选热榜和日报。

**为什么用 AIHOT：**
- 单站聚合多源内容，无需全网搜索
- 内容已经过质量筛选（推荐度已标注）
- 彻底避免 Tavily 全网搜索带来的高 token 消耗和 AI overload 问题

---

## 工作流程

### 第一步：读取 AIHOT 近3天日报

使用 `tavily_extract` 读取 AIHOT `/daily` 页面，抓取近3天所有新闻：

```
URL: https://aihot.virxact.com/daily
query: "AI 科技 新闻 热榜 近3天"
extract_depth: "advanced"
chunks_per_source: 5
```

**时效范围：过去3天**（当日 + 前2天），确保内容充实。

### 第二步：整理与分类

AIHOT 已有分类（模型发布/更新、产品发布/更新、行业动态、论文研究、技巧与观点），直接采用其分类，并根据内容补充来源和标签。

整理后的文件按以下分类组织：
- 模型发布/更新
- 产品发布/更新
- 行业动态
- 论文研究
- 技巧与观点

### 第三步：写入本地文件

保存路径：`memory/YYYY-MM-DD-tech-news.md`

**文件格式要求：**
- 文件头包含整理时间、来源（AIHOT）和今日日期
- 保留 AIHOT 原有分类
- 每条新闻包含：标题、推荐度（如有）、摘要、来源、链接
- 底部包含数据总览表格
- 末尾同步记录（本地文件 ✅、飞书文档链接）

### 第四步：同步飞书文档

**必须用两步法：先创建 wiki 节点，再写入内容。不要用 `docs +create --wiki-node`（该方式创建的文档编码有问题且位置可能不对）。**

**正确流程：**

```bash
# 步骤 1：用 wiki +node-create 在「科技新闻日报」节点下创建 wiki 节点（返回 node_token 和 obj_token）
lark-cli wiki +node-create \
  --space-id "7621391289904516315" \
  --parent-node-token "Iv9UwDW5viSJDWk12j7cBazYn8b" \
  --title "科技新闻日报 | YYYY年MM月DD日"

# 返回示例：
# {"ok":true,"data":{"node_token":"OnBrwGTJciHcOjk90w7c1cMhn9c","obj_token":"JUqNdp3uSodBX1xF66fcNhcHnFh",...}}
# → 从返回中提取 obj_token（即 doc_token）

# 步骤 2：将本地 markdown 文件转成 XML 后，用 docs +update 写入文档
# 重要：内容必须用 XML 格式（--doc-format xml），禁止用 --doc-format markdown（会导致中文乱码）
# ⚠️ 重要：XML 内容必须以 <title>标题</title> 开头，否则文档标题默认为「Untitled」
# 格式：<title>科技新闻日报 | YYYY年MM月DD日</title><h1>科技新闻日报 | YYYY年MM月DD日</h1>...
# markdown 中的换行用 <br/>，< 用 &lt;，> 用 &gt;，& 用 &amp;
lark-cli docs +update \
  --api-version v2 \
  --doc "<obj_token>" \
  --command overwrite \
  --doc-format xml \
  --content @memory/YYYY-MM-DD-tech-news.xml

# 步骤 3：授予张公子 full_access 权限（用 Open API 直接调，绕过 lark-cli 交互限制）
ACCESS_TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \
  -H 'Content-Type: application/json' \
  -d '{"app_id": "cli_a94b4a1e43781cc7", "app_secret": "NALleHubGWREfZJkXpYizwszPIBFIBq7"}' \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('tenant_access_token',''))")

curl -s -X POST 'https://open.feishu.cn/open-apis/drive/v1/permissions' \
  -H 'Authorization: Bearer '$ACCESS_TOKEN \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "docx",
    "token": "<obj_token>",
    "member_id": "ou_d8ace8a146610ca26bc07d8e68a5620f",
    "member_type": "openid",
    "perm": "full_access"
  }'
```

**内容转 XML 注意事项：**
- **第一行必须是 `<title>标题</title>` 元素**，飞书会将其设为文档标题；否则默认为「Untitled」
- 标题后接 `<h1>正文一级标题</h1>` 作为正文开篇
- markdown 内容中的中文必须正确转义（`<` → `&lt;`，`>` → `&gt;`，`&` → `&amp;`，换行 → `<br/>`）
- 推荐用 Python 做 markdown → Feishu XML 的批量转义，避免手动转义出错
- 文件路径必须用相对路径（如 `@memory/2026-05-15-tech-news.xml`），不能是绝对路径
- **禁止**用 `--doc-format markdown` 写入（会导致中文乱码）

**飞书知识库存档目标（v0.4.0）：**
- space_id：`7621391289904516315`
- parent_node_token：`Iv9UwDW5viSJDWk12j7cBazYn8b`（科技新闻日报目录）
- 节点 token：从 `wiki +node-create` 返回的 `node_token`
- doc token：从 `wiki +node-create` 返回的 `obj_token`

**Fallback（当 lark-cli 不可用时）：**

如果 `wiki +node-create` 调用失败，自动切换到 Feishu Open API 直接调用：
```bash
# 1. 获取 tenant_access_token
ACCESS_TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \
  -H 'Content-Type: application/json' \
  -d '{"app_id": "cli_a94b4a1e43781cc7", "app_secret": "<FEISHU_APP_SECRET>"}' \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('tenant_access_token',''))")

# 2. 在知识库「科技新闻日报」节点下创建 wiki 节点
curl -s -X POST 'https://open.feishu.cn/open-apis/wiki/v2/spaces/7621391289904516315/nodes' \
  -H 'Authorization: Bearer '$ACCESS_TOKEN \
  -H 'Content-Type: application/json' \
  -d '{"parent_node_token": "Iv9UwDW5viSJDWk12j7cBazYn8b", "node_type": "origin", "obj_type": "docx", "title": "科技新闻日报 | YYYY年MM月DD日"}'
# → 获得 obj_token

# 3. 写入文档内容（batch create blocks，XML 格式）
curl -s -X POST 'https://open.feishu.cn/open-apis/docx/v1/documents/<obj_token>/blocks/<root_block_id>/children' \
  -H 'Authorization: Bearer '$ACCESS_TOKEN \
  -H 'Content-Type: application/json' \
  -d '{"children": [...]}'
```

> ⚠️ Fallback 需要 `app_secret`，优先确保 lark-cli 可用——只有当 lark-cli 不可用时才走 fallback。

### 第五步：发送飞书文档链接

**只发链接，不发完整报告内容。**

发送格式：
```
📰 科技新闻日报 | YYYY年MM月DD日
🔗 飞书文档：https://feishu.cn/docx/xxxxx
💾 本地文件：memory/YYYY-MM-DD-tech-news.md
```

使用 `message(action="send", channel="feishu", target="chat:oc_d591432cedf9a00c01878c24754cb050", message="...")`

### 第六步：更新本地文件同步记录

在本地文件末尾添加：
```
## 📋 同步记录
- ✅ 本地文件：`memory/YYYY-MM-DD-tech-news.md`
- ✅ 飞书文档：`科技新闻日报 | YYYY年MM月DD日`
  - 文档链接：https://feishu.cn/docx/xxxxx
  - 知识库：个人知识库
```

---

## 输出模板

```
# 科技新闻日报 | YYYY年MM月DD日

> 整理时间：YYYY-MM-DD HH:MM GMT+8
> 来源：AIHOT（aihot.virxact.com）

---

## 模型发布/更新

### [新闻标题]
- 摘要：[1-2句话描述]
- 来源：[媒体名称]
- 链接：[URL]

[...]

## 产品发布/更新

[...]

## 行业动态

[...]

## 论文研究

[...]

## 技巧与观点

[...]

---

## 📊 数据总览

- 模型发布/更新：X 条
- 产品发布/更新：X 条
- 行业动态：X 条
- 论文研究：X 条
- 技巧与观点：X 条
- 合计：XX 条

---

## 🔗 关键来源

- AIHOT：https://aihot.virxact.com
[...]

---

整理：牛管家 | 数据来源：AIHOT

## 📋 同步记录

- ✅ 本地文件：`memory/YYYY-MM-DD-tech-news.md`
- ✅ 飞书文档：`科技新闻日报 | YYYY年MM月DD日`
  - 文档链接：https://feishu.cn/docx/xxxxx
  - 知识库：个人知识库
```

---

## 参考资源

- **AIHOT：** https://aihot.virxact.com
- **飞书文档操作：** 见 `references/feishu-doc.md`

---

## 注意事项

1. **数据源优先**：直接从 AIHOT 读取，不主动进行全网搜索
2. **时效过滤**：只收录当日新闻，老旧新闻不再收录
3. **链接有效性**：优先使用原始来源链接，避免短链接
4. **飞书权限**：创建文档时必须传入 `owner_open_id` 确保用户有编辑权限
5. **文件命名**：使用 `YYYY-MM-DD-tech-news.md` 格式，便于排序检索

---

## 执行建议（重要）

**由于 token 消耗大幅降低（不再做全网搜索），v0.4.0 不再需要子会话拆分，整个流程在主会话完成即可。**

```markdown
1. 使用 tavily_extract 读取 AIHOT /daily 页面
2. 整理分类，写入本地文件 memory/YYYY-MM-DD-tech-news.md
3. 创建飞书 wiki 节点 + 写入文档内容
4. 发送飞书文档链接到群
5. 更新本地文件同步记录，标记完成
```

**进度 Checkpoint：每步必须写 checkpoint**

在每个关键步骤完成后，立即将进度写入 checkpoint 文件 `memory/YYYY-MM-DD-tech-news-checkpoint.json`：

```json
{
  "step": 4,
  "stepName": "飞书文档创建完成",
  "feishuDocUrl": "https://feishu.cn/docx/xxx",
  "localFile": "memory/2026-07-10-tech-news.md",
  "timestamp": 1752124800000,
  "pendingAction": "发送飞书链接"
}
```

**步骤说明：**
- step 1: AIHOT 读取完成 → 写入 checkpoint
- step 2: 本地文件写入完成 → 写入 checkpoint
- step 3: 飞书文档创建完成 → 写入 checkpoint
- step 4: **只发飞书文档链接到群** → 最后一步，**必须成功**，完成后写入 step: done

**⚠️ Fallback 触发条件：**
当 `feishu_wiki` 或 `feishu_doc` 工具调用失败（返回 ToolNotFoundError 或类似错误），自动切换到 direct Feishu Open API 调用（见第四步 fallback 说明）。

**⚠️ 关键规则（v0.4.0）：**
- 步骤4（发送飞书链接）是整个流程中**最后一步**，只发文档链接，不发完整报告内容
- 飞书群组 ID（目标）：`oc_d591432cedf9a00c01878c24754cb050`
- 消息格式：`📰 科技新闻日报 | YYYY年MM月DD日\n🔗 飞书文档：https://feishu.cn/docx/xxxxx\n💾 本地文件：memory/YYYY-MM-DD-tech-news.md`
- 必须使用 `message(action="send", channel="feishu", target="chat:oc_d591432cedf9a00c01878c24754cb050", message="...")`
- **禁止**在发送飞书消息之前结束会话——即使所有文件/文档操作都完成了，也要留足时间发送消息
- 飞书消息发送成功后，才更新 checkpoint 为 `step: done`
