## 核心优化 - 移除详情页自动调用博查API的逻辑,改为按需加载 - 添加基于IP的频率限制(每小时3次) - 实现验证码防护机制(超过阈值后要求验证) - 新增频率限制工具类 utils/rate_limiter.py ## 成本控制 - API调用减少约90%+(只在用户点击时调用) - 防止恶意滥用和攻击 - 可配置的频率限制和验证码策略 ## 文档整合 - 创建 docs/ 目录结构 - 归档历史版本文档到 docs/archive/ - 移动部署文档到 docs/deployment/ - 添加文档索引 docs/README.md ## 技术变更 - 新增依赖: Flask-Limiter==3.5.0 - 修改: app.py (移除自动调用,新增API端点) - 修改: templates/detail_new.html (按需加载UI) - 新增: utils/rate_limiter.py (频率限制和验证码) - 新增: docs/archive/DEVELOP_v2.6.0_API_SECURITY.md ## 部署说明 1. pip install Flask-Limiter==3.5.0 2. 重启应用 3. 无需数据库迁移 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
10 KiB
10 KiB
ZJPB v2.3.0 部署指南
版本: v2.3.0 发布日期: 2025-12-31 核心功能: 新闻获取准确性优化
📋 版本概述
v2.3.0版本专注于解决新闻获取准确性问题,通过引入专用新闻关键词字段和严格匹配策略,显著提升新闻相关性。
✨ 核心改进
-
专用新闻关键词字段
- Sites表新增
news_keywords字段 - 支持为每个网站设置专属搜索关键词
- 避免网站名称混淆导致的不相关新闻
- Sites表新增
-
严格匹配搜索策略
- 使用双引号包裹关键词,确保完整匹配
- 优先使用news_keywords,降级使用网站名称
- 提高新闻相关性和准确性
-
前台手动刷新功能
- 详情页新增"获取最新资讯"按钮
- 用户可主动刷新最新新闻
- 无需后台权限,前台直接使用
🔧 技术变更
数据库变更
Sites表:
ALTER TABLE sites
ADD COLUMN news_keywords VARCHAR(200)
COMMENT '新闻获取关键词(用于精准匹配相关新闻)'
AFTER features;
代码变更
| 文件 | 变更类型 | 说明 |
|---|---|---|
models.py |
修改 | Site模型添加news_keywords字段 |
migrate_news_keywords.py |
新增 | 数据库迁移脚本 |
app.py |
修改 | • 后台表单配置 • search_site_news调用 • 新API路由 |
utils/news_searcher.py |
修改 | 支持news_keywords参数 |
templates/detail_new.html |
修改 | 刷新按钮和JavaScript |
🚀 部署步骤
方法一:Git Pull 部署(推荐)
1. 备份数据库
# SSH登录服务器
cd /opt/1panel/apps/zjpb
# 备份数据库
mysqldump -h localhost -u ai_nav -p ai_nav > backup_before_v2.3_$(date +%Y%m%d_%H%M%S).sql
2. 拉取最新代码
# 停止应用
./manage.sh stop
# 查看当前状态
git status
# 如有本地修改,先暂存
git stash
# 拉取最新代码
git pull origin master
# 如有stash,可选择恢复
# git stash pop
# 查看当前版本
git log --oneline -3
3. 运行数据库迁移
# 激活虚拟环境
source venv/bin/activate
# 运行迁移脚本
python migrate_news_keywords.py
预期输出:
============================================================
开始执行数据库迁移 v2.3.0
============================================================
1. 添加 news_keywords 字段...
>>> news_keywords 字段添加成功
2. 为现有网站设置默认关键词(使用网站名称)...
>>> 已更新 X 个网站的默认关键词
============================================================
>>> 数据库迁移完成!
============================================================
4. 重启应用
# 重启应用
./manage.sh restart
# 检查状态
./manage.sh status
# 查看日志(可选)
./manage.sh logs
方法二:手动文件上传(备用)
如果Git pull失败,可以手动上传修改的文件:
需要上传的文件
models.pymigrate_news_keywords.py(新文件)app.pyutils/news_searcher.pytemplates/detail_new.html
上传后执行:
cd /opt/1panel/apps/zjpb
source venv/bin/activate
python migrate_news_keywords.py
./manage.sh restart
✅ 部署验证
1. 数据库验证
-- 检查sites表结构
DESCRIBE sites;
-- 应该看到新字段
-- news_keywords | varchar(200) | YES
-- 检查现有数据
SELECT id, name, news_keywords
FROM sites
LIMIT 5;
2. 后台验证
访问后台管理:http://your-domain.com/admin/login
检查项:
- 进入"网站管理"
- 点击"编辑"任意网站
- 查看是否有"新闻关键词"输入框
- 输入测试关键词,保存成功
3. 前台验证
访问任意网站详情页:http://your-domain.com/site/xxxxxxxx
检查项:
- 页面正常加载
- 滚动到"相关新闻"模块
- 查看是否有"获取最新资讯"按钮
- 点击按钮测试刷新功能(需配置BOCHA_API_KEY)
4. API测试
# 测试刷新新闻API
curl -X POST http://your-domain.com/api/refresh-site-news/12345678 \
-H "Content-Type: application/json"
# 预期返回
{
"success": true,
"message": "成功获取 X 条新资讯",
"total_found": X,
"saved_count": X
}
📝 使用指南
后台管理员
设置新闻关键词
- 登录后台:
/admin/login - 进入"网站管理" → 选择要编辑的网站
- 找到"新闻关键词"字段
- 输入精准的搜索关键词
关键词设置建议:
- ✅ 推荐:使用产品官方全称或核心品牌词
- 示例:
ChatGPT、GitHub Copilot、Midjourney
- 示例:
- ✅ 多个关键词:可以使用空格分隔(会被当作一个整体匹配)
- 示例:
Claude AI、Google Gemini
- 示例:
- ❌ 避免:过于宽泛的词
- 错误示例:
AI、工具、助手
- 错误示例:
批量设置关键词
-- 示例:批量设置关键词
UPDATE sites SET news_keywords = 'ChatGPT' WHERE name = 'ChatGPT';
UPDATE sites SET news_keywords = 'GitHub Copilot' WHERE name = 'GitHub Copilot';
UPDATE sites SET news_keywords = 'Claude AI' WHERE name = 'Claude';
前台用户
手动刷新新闻
- 访问网站详情页
- 滚动到"相关新闻"模块
- 点击"获取最新资讯"按钮
- 等待1-2秒,页面自动刷新
注意:
- 刷新功能需要配置BOCHA_API_KEY
- 每次刷新获取最新5条一周内的新闻
- 自动去重,不会重复保存
🔍 问题排查
1. 迁移脚本报错
错误:news_keywords字段已存在
解决:正常现象,脚本会自动跳过已存在的字段
2. 后台表单没有新字段
可能原因:
- 代码未更新
- 浏览器缓存
解决方案:
# 确认代码已更新
grep -n "news_keywords" app.py
# 清除浏览器缓存,强制刷新(Ctrl + F5)
# 重启应用
./manage.sh restart
3. 刷新按钮不显示
可能原因:
- detail_new.html未更新
- 模板缓存
解决方案:
# 确认模板已更新
grep -n "refresh-news-btn" templates/detail_new.html
# 清除Flask缓存,重启应用
./manage.sh restart
4. 刷新新闻失败
错误信息:新闻功能未启用
原因:BOCHA_API_KEY未配置
解决方案:
# 编辑.env文件
nano /opt/1panel/apps/zjpb/.env
# 添加或确认以下配置
BOCHA_API_KEY=sk-your-api-key-here
BOCHA_BASE_URL=https://api.bocha.cn
# 重启应用
./manage.sh restart
🔄 回滚方案
如果部署后出现问题,可以快速回滚:
1. 回滚代码
cd /opt/1panel/apps/zjpb
./manage.sh stop
# 查看提交历史
git log --oneline -5
# 回滚到v2.2.0(假设是前一个提交)
git reset --hard <v2.2.0的commit-id>
./manage.sh start
2. 回滚数据库(可选)
# 删除新添加的字段(如需要)
mysql -h localhost -u ai_nav -p ai_nav
ALTER TABLE sites DROP COLUMN news_keywords;
注意:删除字段会丢失已设置的关键词数据,谨慎操作!
📊 性能影响
数据库
- 新增字段:1个VARCHAR(200)字段
- 存储增长:约200字节/网站
- 查询性能:无影响(字段不参与索引查询)
应用性能
- 后台表单:无明显影响
- 前台刷新:
- API调用耗时:1-3秒(取决于博查API响应)
- 不影响页面正常浏览
- 仅在用户主动点击时触发
🆕 新增API端点
POST /api/refresh-site-news/<site_code>
手动刷新指定网站的新闻
参数:
site_code:网站编码(URL路径参数)
返回:
{
"success": true,
"message": "成功获取 3 条新资讯",
"total_found": 5,
"saved_count": 3
}
权限:无需登录,前台可用
📈 版本对比
| 功能 | v2.2.0 | v2.3.0 |
|---|---|---|
| 新闻搜索 | ✅ | ✅ |
| 搜索关键词 | 仅网站名称 | 专用关键词优先 |
| 匹配策略 | 普通匹配 | 严格匹配(双引号) |
| 手动刷新 | ❌ | ✅ 前台按钮 |
| 关键词管理 | ❌ | ✅ 后台配置 |
🔧 维护建议
定期检查关键词
建议定期检查新闻获取效果,优化关键词设置:
-- 查看没有设置关键词的网站
SELECT id, name, news_keywords
FROM sites
WHERE news_keywords IS NULL OR news_keywords = '';
-- 查看新闻获取较少的网站
SELECT s.name, s.news_keywords, COUNT(n.id) as news_count
FROM sites s
LEFT JOIN news n ON s.id = n.site_id
GROUP BY s.id
HAVING news_count < 3
ORDER BY news_count;
关键词优化流程
- 识别新闻数量少的网站
- 访问该网站,了解官方品牌名称
- 在后台设置更精准的关键词
- 点击前台刷新按钮测试效果
- 根据结果调整关键词
📞 技术支持
项目: ZJPB - 焦提示词 | AI工具导航 版本: v2.3.0 更新日期: 2025-12-31
常见问题:
- 查看应用日志:
./manage.sh logs - 检查数据库连接:确认.env中的DB_配置
- 验证API配置:确认BOCHA_API_KEY正确
🎯 后续优化建议
v2.3.0之后可以考虑的优化方向:
-
智能关键词推荐
- 根据网站URL自动提取品牌词
- AI分析网站内容推荐关键词
-
新闻质量评分
- 使用AI评估新闻相关性
- 自动过滤低质量新闻
-
批量关键词管理
- 后台批量设置关键词
- 导入导出关键词配置
-
新闻效果统计
- 统计每个网站的新闻点击率
- 根据数据优化关键词策略
📝 更新日志
v2.3.0 (2025-12-31)
新增:
- ✨ Sites表添加news_keywords字段
- ✨ 后台管理支持设置新闻关键词
- ✨ 详情页新增"获取最新资讯"按钮
- ✨ 新API端点:
/api/refresh-site-news/<code>
优化:
- 🎯 新闻搜索使用专用关键词(优先级高于网站名称)
- 🎯 严格匹配策略(双引号包裹关键词)
- 🎯 所有search_site_news调用传递news_keywords参数
修复:
- 🐛 解决网站名称相似导致的新闻混淆问题
- 🐛 提高新闻相关性和准确性
部署文档版本: v1.0 最后更新: 2025-12-31 维护者: ZJPB开发团队