你还在手动刷新闻、自己猜各国立场?
我是沈知夏。上周我在做地缘政治风险监测时,每天要刷10多家媒体:ynetnews(以色列视角)、Press TV(伊朗)、白宫官网、Al Jazeera……光看标题就花40分钟,还得手动对比各方怎么说美伊协议。直到我写了一个自动化工作流——每天早上8点,Tavily自动抓取最新报道,Claude分析并提取立场标签,数据自动写入Notion数据库。现在打开Notion就能看到:
| 来源 | 摘要 | 对伊朗态度 | 对以色列态度 | 关键金句 |
|---|---|---|---|---|
| Ynetnews | 以色列认为备忘录让伊朗成为赢家 | 负面 | 担忧 | “失望且有问题” |
| Press TV | 伊朗称协议是外交胜利 | 正面 | 未提及 | - |
| 白宫 | 框架性谈判,涉及制裁缓解 | 中立 | 不评论 | - |
从阅读到分析,全程自动化,耗时最多2分钟(检查异常)。
自动化前后效果对比
| 维度 | 手动(之前) | 自动化(之后) |
|---|---|---|
| 时间消耗 | 45-60分钟/天 | 2分钟(浏览+判断) |
| 覆盖源数 | 4-5个(人肉切换) | 10+个(Tavily同时搜索) |
| 立场分析 | 主观记忆 | 结构化标签,可对比 |
| 历史检索 | 散落在浏览器收藏夹 | Notion数据库可筛选、排序 |
工具组合与流程图
核心链:
Tavily API (新闻搜索) → 数据清洗 (Python script) → Claude API (立场分析) → Notion API (写入数据库)
触发方式: 每天8:00通过GitHub Actions(免费计划)或Zapier定时任务启动Python脚本。
工具清单
- Tavily API:专为AI搜索优化的搜索引擎,支持按源、时段筛选,返回结构化结果(标题、摘要、URL、发布时间)。月免费额度1000次调用。
- Claude API(或ChatGPT API):用于提示词分析。推荐Claude Haiku,速度更快,成本每百万token约$0.25。
- Notion API:创建数据库,字段包括:标题、来源、日期、摘要、立场_伊朗、立场_以色列、关键金句、原始URL。
- **Python 3.10+**:脚本胶水。
关键节点配置(可直接复制)
1. Tavily搜索配置
# 搜索美伊协议相关新闻,指定来源为ynetnews和Press TV
from tavily import TavilyClient
tavily = TavilyClient(api_key="YOUR_TAVILY_KEY")
query = "US Iran memorandum deal 2026" + \
" source:ynetnews.com OR source:presstv.ir OR source:whitehouse.gov"
response = tavily.search(
query=query,
days=2, # 只取最近2天
max_results=10,
include_raw_content=False
)
注意: Tavily的source过滤支持域名,但需要写完整URL。如果想同时搜中文媒体,加OR source:huanqiu.com。
2. Claude提示词模板
这是最关键的部分。你需要让模型输出结构化JSON,方便后续写入Notion。
你是国际政治分析师。请分析以下新闻标题和摘要,输出JSON格式。
输入:
标题:{title}
摘要:{summary}
来源:{source}
请分析:
1. "立场_伊朗":取值 "正面" / "负面" / "中立" / "未提及"。判断依据:对伊朗核计划、制裁缓解、地区影响力的评价。
2. "立场_以色列":同上。
3. "关键金句":原文中最能体现立场的1-2句话,用双引号括起来。
4. "摘要_50字":用50字以内中文总结核心事实(不包含立场评价)。
输出严格JSON格式,不要加额外文字。
{
"立场_伊朗": "",
"立场_以色列": "",
"关键金句": "",
"摘要_50字": ""
}
调试技巧: 如果模型经常输出错误字段名,在system message里加一句“只输出JSON,不要用markdown代码块”。另外,对于“未提及”的情况,模型可能会强行编造。可以在user prompt末尾加“如果原文未提及某个国家,不要推测,直接写'未提及'”。
3. Notion数据库字段
创建Database时,API需要提前拿到Database ID。字段类型:
| 字段名 | 类型 | 备注 |
|---|---|---|
| title | title | 自动 |
| source | rich_text | 域名 |
| date | date | 发布日期 |
| iran_stance | select | 选项:正面/负面/中立/未提及 |
| israel_stance | select | 同上 |
| key_sentence | rich_text | 关键金句 |
| summary | rich_text | 50字摘要 |
| url | url | 原文链接 |
写入代码片段(Python + notion-client):
from notion_client import Client
notion = Client(auth="YOUR_NOTION_TOKEN")
db_id = "xxxxxxxxx" # 从浏览器URL复制
for item in analyzed_results: # item是Claude返回的dict
notion.pages.create(
parent={"database_id": db_id},
properties={
"title": {"title": [{"text": {"content": item["title"]}}]},
"source": {"rich_text": [{"text": {"content": item["source"]}}]},
"date": {"date": {"start": item["date"]}},
"iran_stance": {"select": {"name": item["立场_伊朗"]}},
"israel_stance": {"select": {"name": item["立场_以色列"]}},
"key_sentence": {"rich_text": [{"text": {"content": item["关键金句"]}}]},
"summary": {"rich_text": [{"text": {"content": item["摘要_50字"]}}]},
"url": {"url": item["url"]}
}
)
常见问题与调试技巧
Q1:Tavily返回的结果太少或太旧
- 增加
days参数到7,或改用include_raw_content=True获取全文(但消耗API额度多)。 - 也可同时用NewsAPI作为后备,但需要自己写聚合。
Q2:Claude立场分析不准(比如把中立判断为负面)
我的经验:在提示词里给出具体判断标准。例如:“如果报道提到‘解除制裁’但未加负面形容词,算中立;如果提到‘伊朗获益’且带有负面语气(如‘令人失望’),算负面。” 最好提供一个示例,比如从过往分析中选一条人工标注正确的作为few-shot。
Q3:重复新闻(同一事件不同媒体)
在写入Notion前,用URL的md5作为唯一ID。如果Notion里已有该URL,跳过。或者直接用Tavily的id字段(如果有的话)去重。
Q4:API限流
Tavily免费版每分钟10次,完全够用。Claude API建议用Haiku,成本极低。如果一次分析10条新闻,调用10次API(每次约500 token),总花费不到$0.01。
我的思考:为什么这个工作流对开发者有价值
你可能会问:“这跟写代码有什么关系?” 我的回答是:信息筛选能力正在成为职业护城河。产品经理、技术决策者、甚至开源项目维护者,都需要快速理解全球动态对行业的影响。把重复劳动交给自动化,把判断力留给自己。
以美伊协议为例,如果我是做跨境支付或能源合规的开发者,我需要立刻知道:伊朗制裁缓解是否影响我的API对接?以色列的立场变化会不会导致中东局势升级,进而影响云服务可靠性?这些判断依赖多源、结构化信息。这套工作流让我不再被单一媒体的叙事牵着走。
下一步你可以做什么
- 把脚本部署到GitHub Actions(免费的
.github/workflows/daily_news.yml),每天定时运行。 - 在Notion里建一个看板视图,按“立场_伊朗”分组,一眼看出媒体报道倾向。
- 加一个“告警”节点:如果某来源连续3天对伊朗立场都是负面,自动发邮件提醒。可以用Zapier + Gmail实现。
以上所有代码和提示词模板,你都可以直接复制使用。如果踩坑,欢迎留言交流。
记住:不会自动化信息筛选的开发者,迟早会被信息流淹没。