Dify+HA+小爱同学自动播报新闻

小爱晚报内容最近质量很差,使用 dify+home assistent+n8n 实现自定义源推送小爱同学播报新闻

Dify配置

首先从最核心的部分开始:在 Dify 中构建能够采集和处理新闻的工作流。

第一步:在 Dify 中创建工作流

1. 创建新工作流

  • 登录 Dify 控制台
  • 进入 “工作流” 页面
  • 点击 “创建工作流”
  • 命名为 “每日新闻采集播报”

2. 配置新闻源采集节点

由于三个网站结构不同,我们需要为每个网站配置单独的 HTTP 请求节点。

方式一:使用 Firecrawl(推荐但可能需要付费)

如果你有 Firecrawl API Key,这是最方便的方式:

# 工作流节点配置思路:
1. Firecrawl 节点 (WaytoAGI)
   - URL: https://waytoagi.feishu.cn/wiki/QPe5w5g7UisbEkkow8XcDmOpn8e
   - 模式: Scrape(抓取)

2. Firecrawl 节点 (AIBase)
   - URL: https://news.aibase.com/zh/daily
   - 模式: Scrape(抓取)

3. Firecrawl 节点 (虎嗅)
   - URL: https://www.huxiu.com/article/
   - 模式: Scrape(抓取)

方式二:使用 HTTP Request 节点 + 内容解析(免费方案)

由于网站反爬机制,直接 HTTP 请求可能无法获取完整内容。但我们可以尝试:

首先添加 HTTP Request 节点:

# 节点1: WaytoAGI 采集
- 方法: GET
- URL: https://waytoagi.feishu.cn/wiki/QPe5w5g7UisbEkkow8XcDmOpn8e
- Headers: 
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

# 节点2: AIBase 采集  
- 方法: GET
- URL: https://news.aibase.com/zh/daily
- Headers:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

# 节点3: 虎嗅采集
- 方法: GET  
- URL: https://www.huxiu.com/article/
- Headers:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

3. 添加内容解析节点(也可跳过直接使用采集的文本文件内容)

由于网站返回的是 HTML,我们需要添加 Python 代码节点来解析内容:

# 添加 Python 代码节点解析 WaytoAGI
def parse_waytoagi_content(html_content):
    """
    解析飞书文档内容
    注意:飞书文档可能需要更复杂的解析,这里简化处理
    """
    try:
        # 这里需要根据实际HTML结构调整选择器
        # 简化示例:提取所有段落文本
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html_content, 'html.parser')

        # 尝试提取正文内容
        paragraphs = soup.find_all('p')
        content = '\n'.join([p.get_text().strip() for p in paragraphs if p.get_text().strip()])

        return content[:2000]  # 限制长度
    except Exception as e:
        return f"解析失败: {str(e)}"

# 输出解析后的内容
output = parse_waytoagi_content(inputs['waytoagi_response'])

对其他两个网站也需要添加类似的解析节点。

4. 添加 LLM 处理节点

现在添加关键的 LLM 节点来处理和筛选新闻:

# LLM 节点 Prompt 配置
"""
你是一个专业的新闻编辑。请根据以下三个新闻源的内容:

【WaytoAGI 内容】
{waytoagi_content}

【AIBase 每日新闻】  
{aibase_content}

【虎嗅文章】
{huxiu_content}

请执行以下任务:
1. 筛选出与人工智能、AI技术、大模型、机器学习、财经科技相关的新闻
2. 对每条相关新闻用一句话进行摘要,确保:
   - 准确抓住核心信息
   - 语言口语化,适合语音播报
   - 长度适中(20-50字)
3. 按重要性排序,最重要的新闻放在前面
4. 生成格式规范的播报稿,包含:
   - 开头问候语:"早上好,今天是【日期】,为您带来最新AI和科技新闻"
   - 新闻正文(每条新闻一行)
   - 结束语:"以上就是今日早间新闻,祝您有愉快的一天!"

注意:只输出最终的播报稿内容,不要额外解释。
"""

5. 配置完整工作流结构

graph TD
    A[开始] --> B[WaytoAGI HTTP请求]
    A --> C[AIBase HTTP请求]  
    A --> D[虎嗅 HTTP请求]

    B --> E[解析WaytoAGI内容]
    C --> F[解析AIBase内容]
    D --> G[解析虎嗅内容]

    E --> H[LLM处理节点]
    F --> H
    G --> H

    H --> I[输出播报稿]

第二步:测试工作流

1. 保存并测试

  • 点击”保存”工作流
  • 使用”测试”功能运行工作流
  • 检查每个节点的输出是否正确

2. 调试技巧

如果遇到问题:

# 常见问题排查:
1. HTTP请求失败:检查网络连接、URL是否正确
2. 解析失败:调整BeautifulSoup选择器
3. LLM输出不理想:优化prompt指令
4. 内容过长:在解析节点中添加长度限制

第三步:发布工作流

测试成功后:

  1. 点击”发布”工作流
  2. 获取API端点地址和密钥
  3. 记录下这些信息,后续集成会用到

最终效果:

image

配置Home Assistant

1、安装xiaomi home并登录

可 doker 安装,或者群晖Nas 套件安装,我已经有群晖,因此直接在套件中安装

image

注册账号登录,并在集成中安装 xiaomi home

image

配置并登录导入所有设备

如果默认认证跳转地址(http://homeassistant.local:8123)打不开,将homeassistant.local替换为群晖 ip 打开

2、配置自动化脚本

alias: 播报 Dify 新闻
description: ""
triggers:
  - trigger: webhook
    allowed_methods:
      - POST
      - PUT
    local_only: true
    webhook_id: dify_news_webhook
conditions: []
actions:
  - action: notify.send_message
    metadata: {}
    data:
      message: "{{ trigger.json.message }}" # 稍后在 Dify 配置对应格式
    target:
      entity_id: notify.xiaomi_cn_331870884_lx06_play_text_a_5_1 # 填你实际的设备id
mode: single

设备 id 获取路径:

image

终端测试一下

curl -X POST -H "Content-Type: application/json" \
>   -d '{"message":"测试测试,Home Assistant TTS播报正常"}' \
>   http://群晖ip/:8123/api/webhook/dify_news_webhook

没有问题进行下一步

Dify配置发送HA的请求

如图配置,并测试

image

报错,查看日志:

image

原因:

HA 收到来自反向代理(Docker 网络 172.23.0.6)的请求,但默认没有启用 Forwarded headers 支持,于是把来源 IP 记录为 172.23.0.6,而不是真实客户端 IP。
它不会导致自动化失败,也和小爱音箱播报无关,只是日志看起来有点烦。
如果你确实通过反向代理(Nginx、Traefik、群晖反向代理等)访问 HA,可以按下面方法消除提示。

解决方法:

编辑configuration.yaml文件,群晖套件安装的话,路径如下:

# HomeAssistant 群晖中configuration.yaml路径
/volume1/@apphome/HomeAssistant/.homeassistant/configuration.yaml
# 编辑
sudo vi /volume1/@apphome/HomeAssistant/.homeassistant/configuration.yaml

修改配置文件

# 原有的配置...
default_config:

frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
# 新增的HTTP配置
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.23.0.0/16   # 你 Docker 的网段
    - 127.0.0.1

定时任务配置

使用n8n或者其他定时任务工具调用 Dify api

如图,创建一个定时器节点和http请求节点,http请求节点请求你发布的dify工作流(API端点地址和密钥),

image

小伯安

发表回复