本项目是一个基于MCP(Model-View-Controller-Presenter)架构的本地新闻、天气及国内外重要新闻实时推送应用。它通过集成阿里百炼大模型,实现了智能对话和信息处理,并通过微信服务号为用户提供个性化的新闻和天气信息推送服务。
- 定时新闻推送: 每天定时(默认早上8点)向所有关注用户推送最新的新闻摘要和天气预报。
- 智能用户交互: 用户可以通过微信服务号与阿里百炼大模型进行自然语言交互,获取更详细的信息或执行特定操作。
- 个性化设置: 用户可以随时通过向服务号发送指令(如“更改城市 [城市名]”)来更新自己的地理位置,从而接收到更精准的天气信息。
- 微信集成: 无缝集成微信服务号,支持消息的接收、处理和回复。
- Web框架: FastAPI
- 大语言模型: 阿里百炼(DashScope)
- 消息调度: APScheduler
- 微信SDK: wechatpy
- 数据获取: 通过第三方API(如极速数据)获取新闻和天气信息。
git clone <your-repo-url>
cd news_push_apppip install -r requirements.txt在项目根目录下创建一个 .env 文件,并根据 config/config.py 中的定义,填入以下配置信息:
DASHSCOPE_API_KEY="your_dashscope_api_key"
WECHAT_TOKEN="your_wechat_token"
WECHAT_APPID="your_wechat_appid"
WECHAT_APPSECRET="your_wechat_appsecret"
NEWS_API_KEY="your_news_api_key"
WEATHER_API_KEY="your_weather_api_key"
注意:
WECHAT_TOKEN需要与您在微信公众平台后台设置的Token保持一致。WECHAT_APPID和WECHAT_APPSECRET是您服务号的唯一凭证。DASHSCOPE_API_KEY是您在阿里百炼平台上创建的应用的API Key。NEWS_API_KEY和WEATHER_API_KEY来自您选择的第三方数据提供商。
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload应用启动后,您需要使用内网穿透工具(如 ngrok)将本地的 8000 端口暴露到公网,以便微信服务器能够访问您的API。
- 登录微信公众平台,进入您的服务号后台。
- 在“开发” -> “基本配置”页面,找到“服务器配置”部分。
- 点击“修改配置”,并填写以下信息:
- URL:
http://<your-ngrok-domain>/api/wechat - Token: 与您在
.env文件中配置的WECHAT_TOKEN一致。 - EncodingAESKey: 随机生成即可。
- 消息加解密方式: 选择“明文模式”。
- URL:
- 点击“提交”并“启用”服务器配置。
您可以在 tests 目录下编写单元测试用例。例如,创建一个 test_services.py 文件:
import unittest
from app.services.push_service import get_push_content
class TestServices(unittest.TestCase):
def test_get_push_content(self):
# 注意:此测试会真实调用API,请确保API Key有效
content = get_push_content("北京")
self.assertIn("北京今日天气", content)
self.assertIn("今日新闻摘要", content)
if __name__ == '__main__':
unittest.main()运行测试:
python -m unittest discover tests- 关注您的微信服务号。
- 发送“帮助”查看可用指令。
- 发送“更改城市 上海”来更新您的位置。
- 发送“今日新闻”或“天气预报”来获取实时信息。
- 直接输入任何文本,与阿里百炼大模型进行对话。
本应用基于MCP(Model-View-Controller-Presenter)架构设计,采用模块化和服务化的方式组织代码:
-
适配器层(Adapters): 封装外部MCP服务的API调用
MojiWeatherMCP: 墨迹天气服务适配器CityNewsMCP: 城市新闻服务适配器GaodeMapMCP: 高德地图服务适配器
-
服务层(Services): 实现核心业务逻辑
LLMService: 阿里百炼大模型服务WeatherService: 天气信息服务NewsService: 新闻信息服务LocationService: 位置管理服务InteractionService: 用户交互处理PushService: 推送内容生成SchedulerService: 任务调度管理
微信用户 → 微信API → 交互服务 → 意图识别(LLM) → 业务服务 → MCP适配器 → 外部API
← ← ← ← ← ←
系统支持以下用户交互命令:
帮助或help: 显示帮助信息更改城市 [城市名]: 更新用户所在城市我的设置: 查看当前用户设置今日天气: 获取当前城市天气信息今日新闻: 获取最新新闻摘要
- 自然语言对话: 直接发送任何文本,与阿里百炼大模型进行智能对话
- 智能意图识别: 系统能理解用户的复杂需求并提供相应服务
- 上下文理解: 支持多轮对话和上下文记忆
POST /api/wechat
处理微信公众号消息推送。
GET /health
返回系统健康状态和各MCP服务状态。
推荐使用Docker进行部署:
# 构建镜像
docker build -t news-push-app .
# 运行容器
docker run -d --name news-push-app \
-p 8000:8000 \
--env-file .env \
news-push-appQ: 微信服务器配置验证失败? A: 检查Token配置和URL可访问性,确保防火墙允许微信服务器访问。
Q: 第三方API调用失败? A: 检查API Key配置和网络连接,查看详细错误日志。
本项目采用 MIT 许可证 - 详细信息请查看 LICENSE 文件。