要点
- Agent 创建的日程: 智能体可以在对话中设置提醒和重复任务。
- 每次运行的配置: 一次部署可以为每次运行选择其模型、技能和工具。
- Slack 表情回应: 代理在回复之前先确认收到消息。
今天我们发布 Managed Deep Agents v0.9,其新功能可让智能体自行安排后续任务、在每次运行时重新配置自己,并对 Slack 消息做出反应。
这些更新让你能更轻松地构建驻留在 Slack 或你自己的频道中的内部智能体,它们的工作方式更像是团队成员。
让智能体自行安排工作
该 新的 Schedules SDK 让智能体能够在对话过程中创建提醒、跟进事项和重复任务,从而处理诸如“明天提醒我这件事”之类的请求。
代理在对话过程中自行创建日程,该日程以提出请求者的身份并使用其权限集和连接运行,结果会返回到同一频道。
在运行内部创建一个计划:
await schedules.create(owner={"type": "user"}, cron="0 9 * * 1-5", timezone="America/Los_Angeles", prompt="Write the daily digest.")将它放在工具之后最为实用,这样你的智能体用户只需通过聊天即可创建、列出、更新和删除日程。以下是一个提醒工具:
from langchain.tools import tool
from managed_deepagents import schedules
@tool
async def remind_me(prompt: str, cron: str, timezone: str = "UTC") -> str:
"""Run a prompt for the current user on a cron schedule."""
item = await schedules.create(
owner={"type": "user"},
cron=cron,
timezone=timezone,
prompt=prompt,
)
return f"Created schedule {item['id']}."该智能体接收一个提示词和一个 cron 表达式,每当 cron 触发时,LangSmith 就会使用该提示词启动一次新的运行。定时任务会继承其创建时所在的频道,因此结果会发布回请求来源处:在 Slack 中请求的工作日提醒会在每次运行时向该会话发布一条新消息。一次性定时任务(at 而不是 cron)在原话题中回复,这适合像“一小时后检查这次部署”这类后续提醒。
按运行配置代理
现在可以动态配置代理 每次运行。将该代理设置为可调用函数:它接收 运行时 在每次运行开始时,并返回一个 define_deep_agent 定义、选择模型、指令、技能、MCP 服务器以及该次运行所用的沙箱。
你无需为每个团队或代码库维护近乎相同的代理副本,而是只运行一个部署。这使你的部署能够更灵活地运行,即单个代理部署可以根据上下文(例如发起请求的频道或用户)为不同团队或用例进行定制。

比如说,一个内部 Slack agent 服务于多个团队。你的 agent 函数可以检查某次运行来自哪个频道,然后为财务团队加载计费技能,或为平台团队加载一个事件响应 MCP 服务器。这不同于在指令中告诉模型何时使用某项技能:配置是在模型运行之前设置的,因此该 agent 永远不会看到其配置之外的技能或 MCP 工具。这既保持了其上下文较小,又兼作访问控制,还让你可以选择模型本身——这是模型自己做不到的。
总的来说,它防止了非确定性的输出,即在我们已经确切知道应该为智能体提供哪些工具集的情况下,却让模型负责选择工具包。
同样的思路也适用于一个编码代理,它可以为每个代码仓库加载不同的技能,并使用更便宜或更强大的模型:
# agent.py: one coding agent, configured per repo at the start of each run
from dataclasses import dataclass
from managed_deepagents import ManagedServerRuntime, define_deep_agent
REPOS = {
"payments-service": {
"model": "openai:gpt-5",
"instructions": "Python service. Run pytest before opening a PR.",
"skills": ["./skills/python-service"],
},
"storefront": {
"model": "openai:gpt-5-mini",
"instructions": "Next.js app. Run web tests and an a11y check before opening a PR.",
"skills": ["./skills/typescript-web"],
},
}
@dataclass
class AppContext:
repository: str = ""
def agent(runtime: ManagedServerRuntime[AppContext]):
execution = runtime.execution_runtime
context = execution.context if execution is not None else None
repo = context.repository if context is not None else None
config = REPOS.get(repo, REPOS["storefront"])
return define_deep_agent(name="open-swe", context_schema=AppContext, **config)
该函数读取 runtime.execution_runtime.context 并在没有配置时回退到默认值,例如在频道运行或 Agent Server 加载 agent 以读取其 schema 时。调用者通过 run 的 context:
# Same deployment, different repo: just change the run context
await client.runs.create(
thread_id,
"open-swe",
input={"messages": [{"role": "user", "content": "Fix the flaky refund test."}]},
context={"repository": "payments-service"},
)对 Slack 消息作出反应
Slack 反应 让发送者立即看到 agent 已收到其消息,即使 agent 在回复之前还要花一段时间进行推理和调用工具。反应默认开启(👀),新的 reactions 选项让你可以在 Slack 频道上关闭它们、选择另一个 emoji,或按消息各选一个。此示例在消息提到出问题的内容时使用 🐛,否则使用 👀:
from managed_deepagents import channels
async def choose_emoji(context: dict) -> str:
return "bug" if "broken" in context["text"].lower() else "eyes"
channel = channels.slack(name="Support Bot", reactions=choose_emoji)反应可以很简单。不过,你也可以用一个函数来配置反应响应,该函数调用模型来挑选更精确的 emoji。像 Jev 这样的决策模型能让这一过程保持快速且低成本; Slack 频道文档 提供了一个完整示例。
开始使用
Managed Deep Agents v0.9 今日已在 Public Beta 中发布。你可以在 Managed Deep Agents 文档中了解更多信息,或通过以下方式开始:
uvx --from managed-deepagents mda init my-agent
cd my-agent
uv run mda deployICYMI:v0.8 增加了按用户的记忆、可从任意服务触发运行的自定义 HTTP 频道、由 Parallel 提供支持的内置网页搜索,以及更多功能。 阅读 v0.8 文章.
