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. 内容过长:在解析节点中添加长度限制
第三步:发布工作流
测试成功后:
- 点击”发布”工作流
- 获取API端点地址和密钥
- 记录下这些信息,后续集成会用到
最终效果:
配置Home Assistant
1、安装xiaomi home并登录
可 doker 安装,或者群晖Nas 套件安装,我已经有群晖,因此直接在套件中安装
注册账号登录,并在集成中安装 xiaomi home
配置并登录导入所有设备
如果默认认证跳转地址(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 获取路径:
终端测试一下
curl -X POST -H "Content-Type: application/json" \
> -d '{"message":"测试测试,Home Assistant TTS播报正常"}' \
> http://群晖ip/:8123/api/webhook/dify_news_webhook
没有问题进行下一步
Dify配置发送HA的请求
如图配置,并测试
报错,查看日志:
原因:
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端点地址和密钥),