新闻播报系统

一个通过MCP服务器获取实时新闻标题,生成AI图像并提供交互式播报体验的系统。

  • by DavidZucchet
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 davidzucchet/news-narrator

使用说明

MCP集成新闻旁白系统

该系统使用MCP(模型上下文协议)服务器获取实时新闻标题,为每个标题生成AI驱动的图像,并提供具有暂停/恢复功能和智能问答功能的交互式叙述体验。

🚀 特性

  • 实时新闻获取:使用MCP服务器从主要新闻来源获取实时头条新闻
  • AI图像生成:使用稳定扩散为每个标题创建相关图像
  • 互动叙事:具有实时用户交互的暂停/恢复功能
  • 智能问答:询问有关头条新闻的问题,并获得人工智能的答案
  • 优雅的退路:即使MCP服务器发生故障,示例标题也能正常工作

📋 先决条件

  • Python 3.12+
  • Node.js(用于MCP服务器)
  • OpenAI API密钥
  • uv包管理器

🛠️ 安装

  1. 克隆存储库

    git clone <repository-url>
    cd news-narrator
    
  2. 使用uv安装依赖项

    # Install uv if you haven't already
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Install project dependencies from pyproject.toml
    uv sync
    
  3. 设置环境变量

    # Create .env file manually with your OpenAI API key
    echo "OPENAI_API_KEY=your_api_key_here" > .env
    
  4. 安装Playwright浏览器(如果需要)

    # If you don't have Chrome or Chromium installed
    uv run playwright install chromium
    

🚀 用法

运行应用程序

uv run python main.py

⏰ 首次运行注意事项: 初始执行大约需要 10分钟 下载稳定扩散模型(~4GB)。由于模型在本地缓存,后续运行将开始得更快。

交互流

  1. 选择标题计数:输入标题数量(1-20,默认值:5)
  2. 等待取回:系统使用MCP获取实时头条新闻
  3. 查看标题:请参阅要叙述的标题列表
  4. 交互式控制:
    • 按 Enter 暂停/继续叙述
    • 键入问题以获得AI支持的答案
    • 每个标题都会自动生成图像

示例会话

📊 How many headlines would you like? (1-20, default: 5): 3
📰 Fetching 3 latest headlines...
✅ Successfully fetched 3 headlines!

🟢 Narration starting. Press ENTER to pause/resume or type questions.

📰 Headline 1: Major breakthrough in renewable energy storage announced
🛠️ Generating image...
🖼️ Image saved at: generated_images/major_breakthrough_renewable_energy.png

[Press Enter to pause, type questions, or let it continue...]

🔧 配置

环境变量

  • OPENAI_API_KEY:您的OpenAI API密钥(必需)
  • LOG_LEVEL:日志记录级别(默认值:INFO)
  • IMAGE_OUTPUT_DIR:生成图像的目录(默认:generated_images)
  • MCP_TIMEOUT:MCP服务器超时(秒)(默认值:60)

🧪 测试

测试标题来源

uv run python -c "
import asyncio
from main import fetch_latest_headlines

async def test_headlines():
    print('Testing headline fetching...')
    try:
        headlines = await fetch_latest_headlines(3)
        print(f'✅ Fetched {len(headlines)} headlines:')
        for i, h in enumerate(headlines, 1):
            print(f'   {i}. {h}')
    except Exception as e:
        print(f'❌ Error: {e}')

asyncio.run(test_headlines())
"

使用开发依赖关系运行

# Install development dependencies
uv sync --group dev

# Run linting and formatting
uv run black main.py
uv run flake8 main.py
uv run mypy main.py

🐛 故障排除

常见问题

MCP服务器连接失败

  • 确保已安装Node.js: node --version
  • 如果您遇到与浏览器相关的错误,请安装Playwright浏览器: uv run playwright install chromium
  • 检查网络连接

图像生成错误

  • 第一轮需要时间:初始设置下载稳定扩散模型(约4GB,约10分钟)
  • 后续运行:模型在本地缓存时速度更快
  • 系统默认使用CPU进行优化
  • 检查输出目录中的磁盘空间
  • 为了更快地生成,请确保您有足够的RAM

OpenAI API错误

  • 在中验证API密钥 .env 文件
  • 检查API配额和账单
  • 确保稳定的互联网连接

浏览器/编剧问题

  • 安装所需的浏览器: uv run playwright install chromium
  • 在某些系统中,您可能需要: uv run playwright install chrome

调试模式

启用调试日志记录:

export LOG_LEVEL=DEBUG
uv run python main.py

📁 项目结构

news-narrator/
├── main.py                    # Final polished version with all features
├── FullMCPNarratorImage.py   # Full integration (development step 4)
├── NarratorImage.py          # Basic narrator with Q&A (development step 3)
├── image.py                  # Image generation component (development step 2)
├── MCP.py                    # MCP integration component (development step 1)
├── pyproject.toml            # Project configuration with dependencies
├── .env                      # Environment variables (create manually)
├── README.md                 # This file
└── generated_images/         # Generated images (created at runtime)

🚀 发展历程

该项目是逐步构建的,展示了解决复杂问题的系统方法:

  1. MCP.py -从用于网页浏览的基本MCP服务器集成开始
  2. image.py -添加了稳定扩散图像生成功能
  3. NarratorImage.py -创建了具有问答功能的基本叙述者系统
  4. FullMCPNarratorImage.py -集成MCP标题提取和叙述者
  5. main.py -经过改进的用户体验和错误处理的最终抛光版本

每个文件都代表开发过程中的一个工作里程碑,显示了项目是如何从单个组件演变为一个完整的集成系统的。

🔧 发展

代码的风格

# Format code
uv run black main.py

# Type checking  
uv run mypy main.py

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature-name
  3. 通过适当的测试进行更改
  4. 确保代码质量: black, flake8, mypy
  5. 用描述性消息提交
  6. 推送并创建拉取请求

📝 许可证

该项目根据MIT许可证获得许可。

🙏 致谢

  • 用于GPT模型和API的OpenAI
  • 稳定扩散的稳定性AI
  • MCP(模型上下文协议)项目
  • Astral紫外包装管理器

版本: 1.0.0
Python版本: 3.12+
程序包管理器:紫外线