[控场AI]
· 6 分钟阅读· 3,434 字

LangChain 发布 Managed Deepagents v0.9:让 AI 智能体像团队成员一样工作

LangChain 发布 Managed Deepagents v0.9:让 AI 智能体像团队成员一样工作

LangChain 发布 Managed Deepagents v0.9,新增智能体自主排期、按运行动态配置与 Slack 表情反馈三项能力。

Managed Deepagents v0.9 围绕"让 AI 智能体成为真正的团队协作者"这一目标推出三项更新。Schedules SDK 允许智能体在对话中自主创建 cron 或一次性定时任务,并以请求者身份在原渠道触发,实现权限隔离与上下文连续性。按运行(per-run)动态配置则解决了多团队场景下部署冗余的问题:单一部署可在运行前根据上下文动态选择模型、技能和工具集,兼具访问控制效果,从根本上避免模型自行选择工具带来的非确定性。Slack reactions 功能在智能体接手消息时立即回以表情,解决长时推理造成的无响应感知问题。v0.9 目前已进入公开测试,可通过 `mda init` 和 `mda deploy` 快速上手。

LangChain 团队在 r/langchain 社区发布了 Managed Deepagents v0.9 版本,带来了三项核心更新:智能体自主创建日程、按运行(per-run)动态配置,以及 Slack 消息反应(reactions)。这些能力的共同指向,是让 AI 智能体从被动响应的工具,转变为能够驻留在 Slack 等内部沟通渠道、像真正团队成员一样运转的协作者。

Managed Deepagents v0.9 发布

智能体自主安排工作:Schedules SDK

最受关注的更新是新的 Schedules SDK。它允许智能体在对话过程中自行创建提醒、跟进任务和周期性任务。换句话说,当用户说出"明天提醒我这件事"时,智能体可以自己把这个请求落地成一个定时任务。

这个设计有几个值得注意的细节。日程以请求者的身份运行,继承请求者的权限和连接关系,这意味着权限边界清晰、不会越权。同时,日程会继承创建它的渠道——在 Slack 中请求的工作日提醒,每次触发都会回到同一个对话中发送新消息;而一次性日程(使用 at 而非 cron)则会回复到原始线程,适合"一小时后检查这次部署"这类跟进场景。

从代码来看,开发者可以把日程能力封装成一个工具,让智能体用户通过聊天就能创建、查看、更新和删除日程:

from langchain.tools import tool
from managed_deepagents import schedules

async def remind_me(prompt: str, cron: str, timezone: str = "UTC") -> str:
    item = await schedules.create(
        owner={"type": "user"},
        cron=cron,
        timezone=timezone,
        prompt=prompt,
    )
    return f"Created schedule {item['id']}."

每当 cron 表达式触发,LangSmith 就会以该 prompt 启动一次新的运行。这种"智能体为自己排期"的能力,把原本需要人工维护的定时任务交给了对话本身。

cron 表达式是一种源自 Unix 系统的时间调度格式,由五个(或六个)字段组成,分别表示分钟、小时、日期、月份和星期,例如 0 9 * * 1-5 表示"每个工作日早上9点"。它被广泛用于服务器定时任务(如数据库备份、报告生成),现在被引入到对话式 AI 场景中,意味着用户可以用自然语言描述需求,再由智能体(或辅助逻辑)将其翻译成 cron 表达式落地执行。at 与 cron 的区别在于:at 指定一个绝对时间点只触发一次,适合"一小时后提醒我"这类一次性任务;cron 则按周期重复触发,适合每日站会提醒或每周报告汇总等场景。将这两种调度模式直接暴露为智能体工具,是 Schedules SDK 的核心设计思路。

按运行动态配置:一个部署服务多个团队

第二项更新解决的是工程上的现实痛点:过去为每个团队或代码仓库维护一个几乎相同的智能体副本,既冗余又难以管理。v0.9 允许将智能体定义为一个可调用函数,它在每次运行开始时接收 runtime,并返回 define_deep_agent 定义——动态选择模型、指令、技能、MCP 服务器和沙箱。

这与"在指令里告诉模型何时使用某个技能"有本质区别。配置是在模型运行之前就确定的,因此智能体根本看不到配置范围之外的技能和工具。官方指出这带来三重好处:保持上下文精简、天然充当访问控制、并且允许由系统而非模型来选择模型本身。它从根本上避免了让模型自行挑选工具集带来的非确定性输出——在我们已经明确知道该用哪些工具的场景下,没必要把这个决策交给模型。

一个典型例子是编程智能体按仓库加载不同配置:

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"],
    },
}

调用方只需在运行上下文里传入不同的 repository,同一个部署就能针对支付服务用更强的 GPT-5、针对前端用更便宜的 GPT-5-mini。对运维多团队内部智能体的组织来说,这是部署复杂度的显著简化。

MCP(Model Context Protocol)是由 Anthropic 于2024年末提出的开放协议,旨在为 AI 模型提供标准化的外部工具和数据源接入方式。它的定位类似于 USB 接口——无论底层是文件系统、数据库还是第三方 API,只要服务端实现了 MCP 规范,模型就能以统一方式调用,无需为每种工具单独开发适配层。在 per-run 动态配置的语境下,MCP 服务器的按需加载意味着同一个智能体部署可以在不同运行实例中接入完全不同的工具集——例如针对支付服务的运行挂载数据库查询工具,针对前端仓库的运行挂载浏览器测试工具,两者互不干扰,也不会因为工具列表过长而污染模型上下文。

Slack 反应:让智能体"有礼貌地"回应

第三项更新偏向用户体验。智能体在长时间推理和调用工具时往往会让用户等待,v0.9 引入的 Slack reactions 能在智能体接手消息的瞬间给出一个表情反应(默认是 👀),告诉发送者"我收到了"。

新的 reactions 选项允许关闭、更换默认表情,或为每条消息动态选择。下面的例子在消息提到"broken"时用 🐛,否则用 👀:

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)

反应逻辑可以很简单,也可以接入一个轻量决策模型来挑选更精准的表情。这种小而实用的交互细节,正是让智能体"更像队友"的关键。

如何上手

Managed Deep Agents v0.9 目前已进入公开测试(Public Beta)。开发者可以通过以下命令快速初始化并部署:

uvx --from managed-deepagents mda init my-agent
cd my-agent
uv run mda deploy

作为延续,上一版 v0.8 已经加入了按用户记忆、可从任意服务触发运行的自定义 HTTP 渠道,以及由 Parallel 提供的内置网页搜索等能力。从 v0.8 到 v0.9 的演进可以看出,LangChain 正在把 Deepagents 打造成一个面向企业内部、以沟通渠道为中心的智能体运行平台——重点不再是单次问答,而是让智能体在真实协作环境中长期、安全、可配置地运行。

分享:

相关推荐