context_from的工作原理
context_from 参数让一个cron任务自动读取另一个任务的最近输出,作为自己的上下文。这是构建"流水线"(数据采集 → 处理 → 推送)的核心机制。
# 任务A:采集数据
job_a = cronjob(
name="采集AI新闻",
prompt="搜索今日AI热点,输出JSON格式的新闻列表",
schedule="0 8 * * *",
deliver="local" # 只保存本地,不推送
)
# 任务B:处理并推送(依赖任务A的输出)
job_b = cronjob(
name="生成AI日报",
prompt="基于以下数据生成中文日报:{context}",
context_from=[job_a.job_id], # 注入任务A的最近输出
schedule="0 9 * * *", # 任务A完成1小时后运行
deliver="origin" # 推送给用户
)链式调度设计:A采集→B处理→C推送
Job A: 每天08:00 采集数据 → 保存本地
Job B: 每天09:00 读取A的输出 → 分析处理 → 保存本地
Job C: 每天09:30 读取B的输出 → 格式化 → 推送给用户
# 注意:时间间隔要给上游任务足够的运行时间重要注意事项
- ⚠️
context_from注入的是上游任务最近一次成功完成的输出,不等待实时同步 - ⚠️ 如果上游任务还没有运行过,context_from注入的是空内容
- ⚠️ 时间间隔要足够:确保上游任务在下游开始前已经完成
- ✅ 可以引用多个上游任务:
context_from=[job_a_id, job_b_id]
适合用context_from的场景
- ✅ 数据采集和数据处理分离(采集稳定,处理灵活)
- ✅ 多个数据源汇总后统一处理
- ✅ 定期报告:日报→周报(周报读取本周所有日报)
不适合的场景
- ❌ 需要实时同步(context_from不是实时的)
- ❌ 上游输出太大(会占用大量token)
- ❌ 上游输出格式不稳定(下游无法可靠解析)
三级链式配置完整示例
# 第一级:每天08:00 采集股票数据
stock_collector = cronjob(
name="股票数据采集",
script="a_stock_daily_review.sh",
no_agent=True,
schedule="0 8 * * 1-5",
deliver="local"
)
# 第二级:每天09:00 分析股票数据
stock_analyst = cronjob(
name="股票深度分析",
prompt="基于以下股票数据进行深度分析:\n\n{context}\n\n给出详细的操作建议",
context_from=[stock_collector.job_id],
schedule="0 9 * * 1-5",
deliver="local"
)
# 第三级:每天09:10 发布分析报告
stock_publisher = cronjob(
name="股票报告发布",
prompt="将以下分析报告格式化为适合微信阅读的样式:\n\n{context}",
context_from=[stock_analyst.job_id],
schedule="10 9 * * 1-5",
deliver="origin"
)context_from是Hermes工作流编排的核心能力。合理使用它,可以把复杂的多步任务拆分成独立的小任务,每个任务职责清晰、容易调试。