> 版本: 0.3.3(飞书文档存入「科技新闻日报」知识库目录,parent_node: Iv9UwDW5viSJDWk12j7cBazYn8b,对应链接 https://qcnu4qzh46f0.feishu.cn/wiki/Iv9UwDW5viSJDWk12j7cBazYn8b)
v0.3.3 更新说明:
docs +create --wiki-node(会导致中文乱码)改为 wiki +node-create + docs +update --doc-format xml(两步法,确保正确编码和正确位置)按日收集、整理并生成科技新闻热榜报告,包含相关度评分、推荐度评分、来源链接,自动同步到本地文件和飞书文档。
使用 tavily_search 并行搜索中英文科技新闻:
搜索词(英文): "tech news today April YYYY" + "AI artificial intelligence"
搜索词(中文): "科技新闻 YYYY年MM月DD日 热榜" + "AI 人工智能 科技 最新消息"
时间范围: time_range="week" (近7天,过滤掉更早的新闻)
结果数量: max_results=10~15
并行搜索策略:
先合并,再去重,最后评分。
将所有搜索结果(英文 + 中文)合并后,执行两轮去重:
第一轮:URL 精准去重
第二轮:语义去重(核心事实去重 + 独立价值保留)
两步判断,先去重,后判断是否保留独立价值:
Step A — 识别「同一核心事实」的重复:
提取每条新闻的核心三元组(主体 + 动作 + 客体),判断两条新闻是否属于同一核心事实:
Step B — 判断独立保留价值(同一核心事实的多条报道,是否都保留):
同一核心事实的报道,仅在以下条件同时满足时才都保留,否则只保留最权威的一条:
去重优先级:来源权威性 > 摘要完整性 > 发布时间更新
具体判断规则:
具体例子:
对每条新闻评估两个维度:
| 维度 | 说明 | 评分标准 |
|---|---|---|
| ------ | ------ | --------- |
| 相关度 | 与科技/AI 领域的关联程度 | ⭐1-5 星 |
| 推荐度 | 对读者的阅读价值 | 0-100 分 |
评分原则:
保存路径:memory/YYYY-MM-DD-tech-news.md
文件格式要求:
必须用两步法:先创建 wiki 节点,再写入内容。不要用 docs +create --wiki-node(该方式创建的文档编码有问题且位置可能不对)。
正确流程:
# 步骤 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(会导致中文乱码)
# markdown 中的换行用 <br/>,< 用 <,> 用 >,& 用 &
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 权限
lark-cli drive permission.members create \
--params '{"token":"<obj_token>","type":"docx"}' \
--data '{"member_id":"ou_d8ace8a146610ca26bc07d8e68a5620f","member_type":"openid","perm":"full_access","type":"user"}' \
--yes
内容转 XML 注意事项:
< → <,> → >,& → &,换行 →
)@memory/2026-05-15-tech-news.xml),不能是绝对路径--doc-format markdown 写入(会导致中文乱码)飞书知识库存档目标(v0.3.3):
7621391289904516315Iv9UwDW5viSJDWk12j7cBazYn8b(科技新闻日报目录)wiki +node-create 返回的 node_tokenwiki +node-create 返回的 obj_tokenFallback(当 lark-cli 不可用时):
如果 wiki +node-create 调用失败,自动切换到 Feishu Open API 直接调用:
# 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
> 来源:Tavily 搜索 + 公开新闻聚合
---
## 🌐 国际科技热榜
### 1. [新闻标题]
- 相关度:⭐⭐⭐⭐⭐ | 推荐度:XX/100
- 摘要:[1-2句话描述]
- 来源:[媒体名称]
- 链接:[URL]
[... 7条国际新闻 ...]
---
## 🇨🇳 国内 AI 热榜
### 1. [新闻标题]
- 相关度:⭐⭐⭐⭐⭐ | 推荐度:XX/100
- 摘要:[1-2句话描述]
- 来源:[媒体名称]
- 链接:[URL]
[... 8条国内新闻 ...]
---
## 📊 数据总览
- 国际:X 条,平均推荐度 XX
- 国内:X 条,平均推荐度 XX
- 合计:XX 条,平均推荐度 XX
---
## 🔗 关键来源
- [来源1名称]:URL
- [来源2名称]:URL
[...]
---
整理:牛管家 | 整理工具:Tavily 搜索
## 📋 同步记录
- ✅ 本地文件:`memory/YYYY-MM-DD-tech-news.md`
- ✅ 飞书文档:`科技新闻日报 | YYYY年MM月DD日`
- 文档链接:https://feishu.cn/docx/xxxxx
- 知识库:个人知识库
references/feishu-doc.mdtavily_search 工具,topic="news",search_depth="basic" 或 "advanced"owner_open_id 确保用户有编辑权限YYYY-MM-DD-tech-news.md 格式,便于排序检索使用子会话 + 主会话接管的混合模式:
1. 主会话用 sessions_spawn 启动子会话执行前半段:
- runtime: "subagent"
- mode: "run"
- runTimeoutSeconds: 600
- task: 完整的科技新闻日报任务描述(步骤1-6,只写到本地文件)
2. 主会话在子会话完成后,接管后半段:
- feishu_wiki 获取知识库
- feishu_doc 创建并写入飞书文档
- message 发送链接到飞书群
为什么这样拆分:
子会话执行流程(只做前半段):
a) URL精准去重(同一链接只一条)
b) 语义去重:提取核心三元组(主体+动作+客体),同一核心事实的报道:无独立信息无新角度 → 只保留最权威那条;有独立信息或新角度 → 保留多条
memory/YYYY-MM-DD-tech-news.md,checkpoint 标记 step=4,然后子会话结束主会话接管后半段(子会话返回后):
feishu_wiki(action="spaces") 获取个人知识库 space_idfeishu_doc(action="create", title="科技新闻日报 | YYYY年MM月DD日", folder_token="首页节点token", owner_open_id="请求用户open_id") 创建飞书文档feishu_doc(action="write", doc_token="新文档token", content="markdown内容") 写入完整报告进度 Checkpoint(v0.2.5 新增):每步必须写checkpoint
子会话在每个关键步骤完成后,立即将进度写入 checkpoint 文件 memory/YYYY-MM-DD-tech-news-checkpoint.json:
{
"step": 6,
"stepName": "飞书文档创建完成",
"feishuDocUrl": "https://feishu.cn/docx/xxx",
"localFile": "memory/2026-04-17-tech-news.md",
"timestamp": 1776396500000,
"pendingAction": "发送飞书链接"
}
步骤说明:
超时补救机制(v0.2.6 强化版):
子会话只负责前半段(step 1-4),主会话接管后半段。如果主会话收到子会话超时事件,按以下顺序检查:
memory/YYYY-MM-DD-tech-news-checkpoint.jsonstep >= 4(本地文件已写)→ 主会话继续执行步骤7-12(创建飞书文档+发送链接)step == done → 任务已完成,无需补救step < 4 → 任务早期失败,需要重新执行⚠️ 重要:子会话无法创建飞书文档(feishu_doc 工具在 subagent sessions 中不可用)。所有飞书文档操作必须在主会话执行。
⚠️ Fallback 触发条件(v0.2.7):
当 feishu_wiki 或 feishu_doc 工具调用失败(返回 ToolNotFoundError 或类似错误),自动切换到 direct Feishu Open API 调用(见第五步 fallback 说明)。Fallback 模式下需要自行获取 tenant_access_token,建议将 app_secret 存入环境变量 FEISHU_APP_SECRET 供 curl 使用。
⚠️ 关键修复(v0.2.6):只发链接不发内容;子会话不创建文档
oc_d591432cedf9a00c01878c24754cb050📰 科技新闻日报 | YYYY年MM月DD日\n🔗 飞书文档:https://feishu.cn/docx/xxxxx\n💾 本地文件:memory/YYYY-MM-DD-tech-news.mdmessage(action="send", channel="feishu", target="chat:oc_d591432cedf9a00c01878c24754cb050", message="...")step: done共 2 个版本