主题
为 Managed Deep Agents 添加计划
为 Managed Deep Agents 部署声明托管 cron 计划。
Managed Deep Agents 可以让 agent 按 cron 计划运行。当你部署项目时,mda deploy 会在部署上线后将每个计划预配为一个 LangSmith cron。
NOTE
Managed Deep Agents 处于公开 beta 阶段,仅在 US 区域的 LangSmith Cloud 上可用。
项目结构
计划声明位于项目级的 schedules/ 目录中,每个文件一个计划:
text
my-agent/
agent.py
schedules/
daily_digest.py添加计划任务
文件名成为托管计划名称。
计划模块必须定义一个名为 schedule 的声明。
python
from managed_deepagents import define_schedule
schedule = define_schedule(
cron="0 8 * * 1-5",
timezone="America/Los_Angeles",
prompt="Write the daily digest.",
)配置计划输入
每个计划必须恰好定义以下之一:
prompt:一个自然语言提示。当 cron 触发时,Managed Deep Agents 会将其转换为一条用户消息。input:一个结构化 LangGraph 输入对象。当你需要传入自定义图输入而非单个提示时,使用此项。
python
from managed_deepagents import define_schedule
schedule = define_schedule(
cron="30 2 * * *",
input={
"messages": [
{"role": "user", "content": "Sweep stale tickets and summarize changes."}
]
},
)cron 必须是一个标准的五字段 cron 表达式:分钟、小时、一个月中的日、月和一周中的日。如果省略 timezone,LangSmith cron 使用 UTC。
选择线程行为
计划默认使用临时线程。Managed Deep Agents 会为每次运行创建一个新线程,并请求 LangSmith 在运行完成后删除那个临时线程。
仅当计划运行应当在各次调用之间累积持久线程状态时,才使用持久线程。
持久线程 ID 必须是一个已存在于部署上的线程的 UUID。Managed Deep Agents 会将该值直接传给 Agent Server,后者会拒绝任何不是 UUID 的 ID。
创建持久线程
在你部署计划之前创建该线程。在 LangSmith Studio 中打开部署,创建一个新线程,并复制其线程 ID。mda deploy 会打印部署 URL,LangSmith 也会在部署页面上列出它。
Managed Deep Agents 和 mda CLI 都不会创建该线程,因此对每个持久计划来说这是一个一次性的手动步骤。
声明持久计划
在计划声明中使用那个线程 ID。
NOTE
以下示例需要持久记忆。
python
from managed_deepagents import define_schedule
schedule = define_schedule(
cron="0 3 * * *",
prompt="Review the current project memory and list follow-up tasks.",
thread={"mode": "persistent", "id": "<thread-uuid>"},
)将结果交付到 Slack
设置 deliver_to,以通过一个已配置的 Slack 渠道发布最终响应。
使用一个 Slack 渠道 ID,因为计划运行没有发起线程。
NOTE
计划交付需要 managed-deepagents>=0.4.0。
python
from managed_deepagents import define_schedule
schedule = define_schedule(
cron="0 9 * * 1",
prompt="Write a short Monday greeting.",
deliver_to={
"channel": "slack",
"to": {
"type": "provider_conversation",
"conversation_id": "C0123456789",
},
},
)Slack bot 必须有权访问目的地。
使用静态声明
计划声明在编译时被提取。请让计划配置保持静态可序列化:
使用字面量、列表、字典,以及对顶层字面量常量的引用。
不要读取环境变量、调用函数、使用
**kwargs,或动态计算计划值。请将动态行为改放到 agent、工具、中间件或运行时上下文中。
在本地测试计划
mda dev 会编译 schedules/ 并在其启动横幅中列出每个计划,但它不会预配它们。计划只在部署上运行。
WARNING
计划在 mda dev 下从不触发。本地服务器不报告任何错误,因此在启动时列出的计划仍是未激活的。
要测试计划所触发的 agent 行为,请在本地 Studio 中直接把计划的 prompt 或 input 发送给 agent。要测试计划本身,请将项目部署到一个开发部署。
部署计划
使用 mda dev 在本地测试项目,然后使用 mda deploy 部署。在 LangSmith 中打开部署追踪,以检查模型调用、工具调用、错误和延迟。
当部署达到 DEPLOYED 时,mda deploy 会在已部署的 Agent Server 上搜索现有的、由 Managed Deep Agents 拥有的 cron 作业,删除它们,并为当前的 schedules/ 声明创建 cron 作业。移除一个本地计划文件并重新部署,会移除对应的托管 cron。
WARNING
如果你用 --no-wait 部署,CLI 会触发远程构建并在部署达到 DEPLOYED 之前退出,因此该次调用不会协调计划。在添加、更改或移除计划时,请运行不带 --no-wait 的 mda deploy。
排查计划问题
must export a named schedule declaration:在schedules/中的每个文件里定义一个顶层schedule。must define exactly one of prompt or input:添加prompt或input之一,但不要两者都加。cron must be a standard 5-field expression:使用五个 cron 字段,而不是基于秒的 cron 语法。schedule is not static:将计算值替换为字面量或顶层字面量常量。failed to create cron for schedule:在 LangSmith 中打开部署 URL,并确认已部署的 Agent Server 健康。Invalid thread ID: must be a UUID (HTTP 422):一个持久计划声明了一个不是 UUID 的线程 ID。将它替换为一个现有线程的 UUID。参阅选择线程行为。计划在本地开发期间不运行:
mda dev不预配计划。参阅在本地测试计划。