1. 每天60秒读懂世界背后的自动化痛点:新闻聚合与AI摘要工作流怎么搭
每天60秒读懂世界这类栏目,核心诉求其实很明确:把当天散落在各处的新闻快速聚合成一份结构化速览,再给出趋势判断。手动做这件事,流程大概是打开十几个信息源、复制标题、归类、写摘要、补判断,一套下来四十分钟起步。如果每天都要做,时间成本会迅速压垮坚持的意愿。
真正能跑起来的方案,是把这条链路拆成三段:抓取、摘要、结构化输出。抓取负责把新闻原文拿到手,摘要负责把长文压缩成短句,结构化输出负责按“技术/产业/民生/国际”这类主线归类并生成趋势判断。三段里最耗人力的是摘要和归类,而这恰好是大模型最擅长的事。
问题在于,很多人在第一步就卡住了。要么是每个模型单独申请 Key、单独配环境,切换一次就要改一次配置;要么是摘要质量不稳定,同一批新闻今天输出还行、明天就开始漏要点。我试过把不同模型的 Key 分散写在几个脚本里,结果调试时根本分不清哪个请求走了哪个通道,排障成本比写业务逻辑还高。
所以这篇的目标很具体:用 TaoToken 的统一 Key 把摘要链路跑通,一次配置,之后每天只需要换新闻输入,就能稳定产出 60 秒速览加趋势判断。适合谁?适合做资讯类内容、需要每日简报、或者想给自己搭一套个人信息聚合管道的开发者。不需要你懂模型微调,只要能跑 Python 请求、会改 JSON 配置就行。
下面从接入配置开始,一步步把这条链路搭出来,包括可复制的请求体、提示词模板、验证动作,以及跑不通时怎么对照报错定位。
2. TaoToken 统一 Key 接入前置准备:Base URL、API Key 与模型选择
在动手写摘要脚本之前,先把接入层的事情理清楚。TaoToken 在这里扮演的角色是统一入口:你不需要为每个模型单独维护一套鉴权逻辑,而是用同一个 Base URL 和同一个 API Key,通过切换 Model ID 来调用不同模型。这对新闻摘要这种“可能今天用这个模型、明天换那个模型对比效果”的场景特别友好。
需要准备三样东西,我把它称为三件套:
| 配置项 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 所有请求的统一入口,不要加多余路径 |
| API Key | 在控制台生成 | 形如sk-开头的一串字符,只显示一次 |
| Model ID | 按需选择 | 例如摘要用通用对话模型,趋势判断可用推理更强的模型 |
API Key 的获取路径是:进入控制台,找到 API Keys 页面,新建一个 Key 并立刻复制保存。这里有个容易踩的坑:Key 只在创建时完整显示一次,关掉弹窗后就只能看到前缀,所以务必当场存进密码管理器或环境变量文件。
拿到 Key 之后,不要急着写业务代码,先用最小请求验证通道是否通。最小请求只需要 Base URL、Key、Model ID 三个参数,请求体里放一句“你好”即可。如果这一步返回正常,说明鉴权、网络、模型路由都没问题,后面再叠加新闻内容就不会把接入问题和业务问题混在一起排查。
模型选择上给一个实用建议:新闻摘要优先选响应快、上下文窗口够大的通用模型,因为你要一次性塞进多条新闻原文;趋势判断可以单独用推理能力更强的模型跑第二遍。两者用同一个 Key,只是 Model ID 不同,切换成本几乎为零。
另外提醒一点,Key 不要硬编码在脚本里然后提交到代码仓库。用环境变量或者本地.env文件加载,这是基本的安全习惯。下面第三节会给出完整的可复制配置。
3. 可复制配置:JSON 请求体、提示词模板与每日摘要脚本
这一节是整篇的核心,直接给可复制的内容。先看请求配置,我用一个config.json把三件套和模型参数集中管理,这样换模型只改一个字段。
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key粘贴在这里", "model_summary": "通用对话模型ID", "model_trend": "推理模型ID", "temperature": 0.3, "max_tokens": 2000 }注意temperature设成 0.3,新闻摘要要的是稳定和忠实原文,不需要发散。max_tokens给 2000 是为了容纳多条新闻的摘要加趋势判断,如果当天新闻特别多可以往上调。
接下来是提示词模板,这是决定输出质量的关键。我把它拆成两个:一个负责摘要,一个负责趋势判断。摘要模板的核心是约束输出格式,让模型按固定字段返回,方便后续程序解析。
你是一名新闻编辑。请把下面这组新闻压缩成60秒可读完的速览。 要求: 1. 每条新闻输出一行,格式为「序号. 标题|一句话要点」 2. 一句话要点不超过40字,只保留事实,不加评论 3. 按技术、产业、民生、国际四条主线分组 4. 不要编造原文没有的信息 新闻原文: {news_content}趋势判断模板则要求模型在摘要基础上给出判断,并且明确区分“事实”和“判断”,避免把推测写成结论。
基于以下新闻速览,输出3条趋势判断。 要求: 1. 每条判断先写结论,再写一句依据 2. 依据必须来自速览中的具体新闻 3. 如果某条判断证据不足,标注「待观察」 4. 不要使用「随着…发展」这类空泛表述 新闻速览: {summary_content}然后是调用脚本,用 Python 的requests库,逻辑很直白:读配置、拼请求、发 POST、取返回。
import json import os import requests with open("config.json", "r", encoding="utf-8") as f: cfg = json.load(f) def call_model(model_id, prompt): url = f"{cfg['base_url']}/v1/chat/completions" headers = { "Authorization": f"Bearer {cfg['api_key']}", "Content-Type": "application/json" } payload = { "model": model_id, "messages": [{"role": "user", "content": prompt}], "temperature": cfg["temperature"], "max_tokens": cfg["max_tokens"] } resp = requests.post(url, headers=headers, json=payload, timeout=60) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"] news = open("news_today.txt", "r", encoding="utf-8").read() summary_prompt = open("prompt_summary.txt", "r", encoding="utf-8").read().replace("{news_content}", news) summary = call_model(cfg["model_summary"], summary_prompt) print(summary) trend_prompt = open("prompt_trend.txt", "r", encoding="utf-8").read().replace("{summary_content}", summary) trend = call_model(cfg["model_trend"], trend_prompt) print(trend)把新闻原文放进news_today.txt,提示词分别存成两个 txt 文件,运行脚本就能拿到速览和趋势判断。整个链路只有一次配置,之后每天换新闻文件即可。如果你想把结果自动写进 Markdown,在脚本末尾加一段文件写入就行,这里不展开以免偏离主线。
4. 验证请求与成功结果:确认摘要链路真的跑通
配置写完不代表链路通了,必须做一次端到端验证。验证分两步:先确认接口返回结构正常,再确认摘要内容质量达标。
第一步,用最小请求测通道。把下面这段单独跑一次,不掺任何新闻内容:
import requests url = "https://taotoken.net/api/v1/chat/completions" headers = { "Authorization": "Bearer sk-你的Key", "Content-Type": "application/json" } payload = { "model": "你的模型ID", "messages": [{"role": "user", "content": "回复两个字:通了"}] } r = requests.post(url, headers=headers, json=payload, timeout=30) print(r.status_code) print(r.json()["choices"][0]["message"]["content"])预期结果是状态码 200,返回内容包含“通了”。如果这一步就失败,先别往下走,直接跳到第五节对照报错。
第二步,跑完整摘要链路。准备一份包含 5 到 8 条新闻的测试文件,运行第三节的脚本。成功时你会看到类似这样的输出结构:
【技术】 1. 大模型数学评测|6款模型参与高考数学测试,头部模型得分接近满分 2. 模型商业化|某大模型估值半年内大幅上升,调用量持续增长 【产业】 3. 新能源车|5月零售渗透率创新高,消费结构继续变化 【趋势判断】 1. 大模型竞争进入商业化验证阶段。依据:估值上升与调用量增长同时出现。 2. 新能源车从补充选项变成主流选项。依据:渗透率数据创新高。 3. 城市更新资金投向存量改造。依据:专项资金规模与惠及户数明确。判断验证是否真正通过,看三个点:一是分组是否清晰,二是每条要点是否控制在 40 字内且没有编造,三是趋势判断是否都带了依据。如果要点超长或者出现原文没有的信息,说明提示词约束不够,回去把“不超过40字”“不要编造”这两条再强调一遍。
实测下来,温度参数对稳定性影响很大。0.3 的时候输出格式基本稳定,调到 0.8 以上就开始出现格式漂移,所以别随意改这个值。
5. 本篇常见报错排查:401、local proxy failed 与 reading choices
链路跑不通时,报错信息通常集中在几个固定位置。这一节按真实报错逐条对照,帮你快速定位。
401 Unauthorized。这是最常见的鉴权失败。原因通常是 Key 拼错、Key 已失效、或者请求头格式不对。检查三处:Authorization头必须是Bearer sk-xxx格式,Bearer 和 Key 之间有一个空格;Key 前后不能有换行或空格;确认 Key 是在控制台 API Keys 页面生成的,而不是别的地方复制的。如果确认无误还是 401,重新生成一个 Key 再试。
local proxy failed 或连接超时。这类报错指向网络层,不是鉴权问题。先确认 Base URL 写的是https://taotoken.net/api,没有多写或少写路径段。然后检查本机网络是否能正常访问外网,可以用curl -I https://taotoken.net/api看返回头。如果公司网络有出口限制,换一个网络环境测试。注意不要在任何环节引入来路不明的网络工具,保持请求直连即可。
reading 'choices' 报错,类似 KeyError: 'choices'。这个报错说明返回的 JSON 里没有choices字段,通常是请求体结构不对,或者模型 ID 写错了导致服务端返回了错误对象。排查方法:先把resp.json()完整打印出来看实际返回内容。如果返回里有error字段,按里面的 message 定位;如果模型 ID 不存在,换成配置里确认可用的 Model ID。还有一种情况是messages数组格式写错,必须是[{"role": "user", "content": "..."}]这种结构。
OAuth 相关报错。如果你在别的工具里见过 OAuth 报错,注意本方案用的是 API Key 鉴权,不涉及 OAuth 流程。如果某个客户端提示 OAuth 失败,说明它走的是另一套鉴权方式,检查是不是把 Base URL 填到了需要 OAuth 的字段里。统一用 API Key 加 Base URL 的组合即可。
返回内容为空或截断。检查max_tokens是否设得太小,新闻条数多的时候 2000 可能不够,调到 4000 再试。另外确认提示词里没有把{news_content}占位符漏掉替换,占位符没替换会导致模型收到字面量而不是真实新闻。
排障的通用思路是:先隔离接入层,用最小请求确认通道;再隔离业务层,用固定测试新闻确认提示词。两层分开测,问题定位会快很多。接入相关的文档可以在接入文档页对照查看,Key 管理在 API Keys 页面。
6. 从每日速览到长期工作流:把摘要链路固定下来
链路跑通之后,真正决定它能不能长期用的是稳定性,而不是单次效果。这里给几个把工作流固定下来的实用做法。
第一,把新闻抓取和摘要调用解耦。抓取脚本只负责把当天新闻写进news_today.txt,摘要脚本只读这个文件。这样任何一段出问题都不会互相拖累,也方便你单独替换抓取源。
第二,给输出加时间戳和版本。每天生成的速览存成summary_20260609.md这种带日期的文件,方便回溯。如果某天摘要质量异常,可以对比前后几天的输出定位是输入问题还是模型问题。
第三,模型 ID 不要写死在代码里。放在config.json里,想对比不同模型的摘要效果时,改一个字段重跑即可。同一个 Key 切换模型是这个方案最大的便利,别浪费掉。
第四,趋势判断建议人工过一遍再发布。模型给的判断带依据,但依据是否成立、结论是否过度延伸,需要你自己把关。把模型当草稿生成器,而不是最终决策者,这样既省时间又不丢判断力。
如果你打算把这条链路扩展到更多场景,比如自动生成周报、自动聚合某个垂直领域的资讯,思路是一样的:换输入源、换提示词模板,接入层完全不用动。需要长期跑编码或 Agent 类任务的话,可以了解下 Coding Plan,按用量规划更划算。想先手动验证模型输出效果的,可以直接在模型对话页面试提示词,确认满意再写进脚本。
最后留一个我自己的习惯:每天生成速览后,顺手把当天最有价值的 1 到 3 条存进一个长期素材库,按“问题、场景、结论”三个字段记录。积累一段时间后,这个库本身就是选题来源,比临时翻聊天记录高效得多。链路的价值不在于省下那四十分钟,而在于它让你愿意每天都做这件事。