Skip to content
LangSmith 文档版本 跟随上游 源快照 86ea6822 更新于 2026-10-18

为 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 不预配计划。参阅在本地测试计划。

后续步骤


BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。