一个自用的个性化科技热点推送 Web 应用。在电脑本地运行后端,手机浏览器访问电脑局域网地址即可使用。
- 可自定义关注方向,也支持默认通用科技热点。
- 调用 Tavily 搜索近 7 天信息,由大模型筛选最有价值的内容并给出分析。
- 每次推送保存为历史会话,随时回看。
- 原生 HTML/CSS/JS 前端,手机端响应式适配。
- 模块化解耦:搜索、摘要、会话管理分文件,便于替换供应商。
- Python Flask 后端
- 原生 HTML/CSS/JS 前端
- Tavily Search API
- DeepSeek(OpenAI 兼容格式)大模型 API
- 访问 https://tavily.com
- 注册账号并登录
- 进入 Dashboard 获取 API Key
- 访问 https://platform.deepseek.com
- 注册账号并登录
- 进入 API 平台创建 API Key
复制或修改项目根目录的 config.json:
{
"tavily_api_key": "你的 Tavily API Key",
"llm_api_key": "你的 DeepSeek API Key",
"llm_base_url": "https://api.deepseek.com/v1",
"llm_model": "deepseek-chat",
"debug_mock": true
}默认
debug_mock: true,首次运行使用假数据零成本跑通全流程。确认链路正常后,将其改为false并填入真实 API Key,即可调用 Tavily 与 DeepSeek。
双击运行项目根目录的 启动.bat:
- 自动安装依赖
- 自动启动 Flask 服务
- 启动后自动用默认浏览器打开
http://127.0.0.1:5000 - 提示防火墙放行事项
注意:
启动.bat当前为纯英文版本。原 UTF-8 中文版本在某些 Windows 环境下因chcp 65001与 ANSI 编码冲突导致echo行被切碎成乱码命令,故改为纯英文以保证所有 Windows 环境稳定运行。
pip install -r requirements.txt
python app.py在 Windows 中打开命令提示符或 PowerShell,运行:
ipconfig找到当前连接(通常是 WLAN 或无线适配器)的 IPv4 地址,例如 192.168.43.123。
示例输出片段(关注 IPv4 地址 那一行):
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : 192.168.43.123
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.43.1
确保手机已连接电脑开启的个人热点,且与电脑处于同一局域网。
在手机浏览器地址栏输入:
http://电脑IP:5000
例如:
http://192.168.43.123:5000
实测验证:Windows 11 电脑通过个人热点共享网络,安卓手机连接该热点后,使用手机浏览器访问上述地址可正常完成一次完整推送(含搜索、摘要、保存会话)。若出现白屏/超时,请优先检查防火墙放行设置。
注意:手机热点在 Windows 11 中通常被识别为“公用网络”,必须在“专用和公用网络”两处都放行 5000 端口(或放行 python.exe),否则电脑能打开、手机白屏。
- 打开 Windows 安全中心 → 防火墙和网络保护。
- 点击 高级设置。
- 点击 入站规则 → 新建规则。
- 选择 端口 → TCP → 输入
5000→ 允许连接。 - 在“配置文件”页面,同时勾选 专用 和 公用,完成命名。
或者,直接允许 python.exe 通过防火墙的专用/公用网络。
config.json 中 debug_mock 默认设为 true:
{
"debug_mock": true
}开启后:
- 不调用 Tavily 搜索 API
- 不调用大模型 API
- 直接返回写死的 3 条假数据
- 用于零成本跑通全流程,验证前端与后端链路
跑通后,将 debug_mock 改为 false,并确保 tavily_api_key 与 llm_api_key 已正确填写,即可使用真实 API。
本应用对 sessions/ 目录下的历史会话文件执行双重清理策略:
- 时间策略:删除创建时间超过 7 天的会话文件。
- 数量策略:若删除后总数仍超过 30 条,按创建时间从旧到新删除,直至剩余 30 条。
清理逻辑在每次成功保存新会话后触发,策略写死在代码中,不做配置项。
daily-digest/
├── app.py # Flask 后端入口
├── collector.py # Tavily 搜索采集模块
├── summarizer.py # 大模型筛选摘要模块
├── session_manager.py # 会话管理模块
├── config.json # API 密钥与模型配置(不提交到 Git)
├── requirements.txt # Python 依赖
├── .gitignore # Git 忽略规则
├── 启动.bat # Windows 一键启动脚本
├── README.md # 本文件
├── decisions.md # 决策与断点备忘
├── templates/
│ └── index.html # 前端页面
├── static/
│ ├── css/
│ │ └── style.css # 样式
│ └── js/
│ └── app.js # 前端脚本
└── sessions/ # 历史会话文件(自动生成,不提交)
- 保持
debug_mock: true,双击启动.bat或运行python app.py。 - 在电脑浏览器打开
http://127.0.0.1:5000,确认页面能加载、点击“获取热点”能返回 3 条调试数据、历史列表能正常显示。 - 将
config.json中的debug_mock改为false,并填入真实的 Tavily 与 DeepSeek API Key。 - 输入一个关注方向,点击“获取热点”,测试真实推送;逐条点击
source_url验证链接可跳转。 - 若手机无法访问,优先检查 Windows 防火墙是否已在“专用和公用网络”放行 5000 端口。
说明 config.json 不是合法 JSON。常见原因:
- 使用了中文逗号
,而非英文逗号, - 某个字符串末尾缺少引号
- 最后一项后面多加了逗号
可用任意 JSON 在线校验工具检查,或在 Python 中运行:
python -c "import json; json.load(open('config.json', encoding='utf-8'))"- 请妥善保管
config.json,不要上传到公开仓库。 - 单次推送条数范围 1-10,默认 3 条;条数越多,耗时越长、单次成本越高。
- 所有 source_url 均来自 Tavily 搜索结果,不会由大模型生成或修改。
sessions/目录在首次保存会话时自动创建,已被.gitignore排除,无需手动维护。
自用项目,暂不设置开源协议。