返回博客列表

别再重造轮子:Managed Deep Agents 0.8 把认证、记忆、渠道一次打包

2026-10-11T11:20:00+08:00
Managed Deep AgentsLangChainLangSmithAI AgentDeep Agents翻译

别再重造轮子:Managed Deep Agents 0.8 把认证、记忆、渠道一次打包

又一个 Agent 平台?先别划走,这次它管的是你最不想写的那部分。

做 Agent 的人大多经历过同一个剧本:原型三天跑通,然后花三个月补基础设施——谁在用它、它能用哪些工具、聊过的内容记不记得住、怎么接进 Slack。这段代码和你的业务半点关系没有,可每个团队都要从头写一遍,还要长期维护。

LangChain 在 2026 年 9 月 24 日发布 Managed Deep Agents 0.8(下称 MDA),想接手的正是这块活。它把 Deep Agents 这个 harness 与跑生产所需的基础设施打成一套,agent 就是你仓库里的一个目录。

本文翻译并解读这篇官方发布博文,重点讲清楚三件事:它到底打包了什么、每一层为什么这么设计,以及什么时候你反而不该用它。

本文提纲

  1. MDA 解决了什么问题:harness 有,基础设施没有
  2. code-first:agent 就是一个目录
  3. 记忆分两层:agent memory 与 user memory
  4. Connections:把凭证分成 agent-owned 和 user-owned
  5. Channels:Slack 与 HTTP 两条入口
  6. 内置 Web Search:LangSmith 托管的 Parallel
  7. 上手、代价与失效边界

MDA 解决了什么问题:harness 有,基础设施没有

先分清两个概念。

Agent harness(比如 Deep Agents)解决的是"怎么把 agent 造出来"。它提供构建复杂 agent 的 primitives,让 agent 能扛住长时间运行、任务关键型的工作。

Managed Deep Agents 解决的是"造出来的 agent 怎么在生产里活下去"。它把定制过的 Deep Agents harness 和托管基础设施打包在一起,这家基础设施包含渠道(channels)、身份与认证(identity and authentication)、工具权限管理(permissions for tools)。

官方博文里有一句话很关键:自建这套基础设施"通常要吃掉几个季度的 roadmap,而且需要持续维护"。这句话不是夸张。身份、OAuth token 刷新、多用户之间的记忆隔离、Slack 事件回调,任何一项单拎出来都不算难,难的是它们互相耦合——记忆该按谁隔离,取决于认证出来的身份是什么;工具该开放哪些,取决于当前用户在这个工具里的权限。MDA 的价值就在于把这四件事(记忆、认证、渠道、工具管理)当成一个整体来设计。

这正好对应了博文开头列出的、团队在生产里最常撞上的四个问题:agent memory、authentication、channels、tool management。

code-first:agent 就是一个目录

MDA 第一个反直觉的点是:它是 code-first 的,不是拖拽式的低代码平台。

一个 Managed Deep Agent 是你 repo 里的一个项目,所有 primitives 用一个简单目录组织起来:

my-agent/
  agent.py | agent.ts | agent.tsx
  pyproject.toml | package.json      # project dependencies
  instructions.md                    # prompt synced to Context Hub
  identity.py | identity.ts          # auth, thread scoping, memory scoping
  memory.py | memory.ts              # define your agent's memory
  tools/                             # custom tools
  channels/                          # entry points like Slack and GitHub
  middleware/                        # custom middleware
  schedules/                         # managed cron schedules
  connectors/                        # managed connectors
  skills/                            # skills synced to Context Hub
  sandbox/                           # sandbox configuration
  evals/                             # agent evals

这个选择值得琢磨。低代码平台把 agent 关进可视化编辑器,改起来快,但 agent 逻辑再也不是代码——没法 review、没法跑单测、没法进 CI,一复杂就出不来。MDA 反其道而行,agent 逻辑仍然是仓库里的 Python/TypeScript 文件,能进版本控制、能走 code review。它托管的只是外围的基础设施,不是你的业务逻辑。

从商业角度看这也是 LangChain 的必然选择:它的用户是工程团队,不是运营同学。把 agent 做成一个目录,也就意味着上手门槛在 git 和部署 CLI 那一侧,而不是在鼠标上。

记忆分两层:agent memory 与 user memory

记忆是 MDA 这次更新的重头。

在此之前,MDA 已经支持 durable agent memory,让一个 deployment 跨会话保留指令与偏好。0.8 加了第二层:user-level memory,作用域绑定到发起这次 run 的、经过认证的那个人。

配置本身就是一份声明文件:

from managed_deepagents import MemoryLayer, define_memory

memory = define_memory(
    agent=MemoryLayer(),
    user=MemoryLayer(),
)

底下由 LangSmith Context Hub 支撑——就是那套用来存储、版本化、协作 agent 文件(Skills、AGENTS.md 等)的机制。两层记忆挂载在两个路径上:

  • agent memory 挂在 /memories/agent/,整个 deployment 里所有人共享。
  • user memory 挂在 /memories/user/,按调用者的认证身份隔离。

runtime 从不在两层之间复制内容,所以共享知识和个人上下文默认就是分开的。

这里值得追问一句"为什么"。为什么不干脆一层记忆,用元数据打个 tag 就完事?因为共享和个人是两种语义完全不同的存储,混在一起迟早出事。下面这张默认策略表说明了问题:

Run source Agent memory User memory
Slack one-to-one DM Allowed Allowed
Slack channel or group DM Allowed Denied
HTTP Allowed Denied

注意第三行。HTTP 渠道默认拒绝 user memory——这看着反直觉:HTTP 是最通用的入口,为什么反而最保守?

答案在"身份能不能被稳定确认"。Slack 一对一 DM 里,调用者身份是明确的、单一的;而一个 Slack 频道或群组 DM 里坐着多个人,HTTP endpoint 更可能被多个用户、甚至自动化系统共享。这时候如果还往里写 user memory,就会把 A 的偏好泄漏进 B 的上下文。所以 MDA 的默认选择是:身份不明确,就不写个人记忆。想放开得显式配置。

博文给的例子很具体:一个支持 agent 用 agent memory 存团队级的升级规则(escalation rules),用 user memory 记住某个同事偏爱简洁的 Slack 更新;一个研究 agent 把共享的研究流程放进 agent memory,把某个人偏好的信源类型、排版习惯放进 user memory。

Kyth.ai 的 CTO Zahid 的说法也印证了这个设计的现实价值:他们的生产 chat app 就跑在 MDA 上,"靠 Context Hub 和 user-level memory,我们既保住了客户机密,又交付了更好的体验"。

记忆配置在一个文件里就能改完。agent 层、user 层可以单独开,也可以都开;每层的访问策略也能自定义,团队能控制记忆什么时候可用、作用范围多大。

Connections:把凭证分成 agent-owned 和 user-owned

Connections 是 MDA 里连接外部服务(GitHub、Notion、Tavily 等)的机制。它们是 LangSmith workspace 里命名过的凭证(named credentials),工具只在运行时读取。

和记忆一样,凭证也要按用途和作用范围分级。MDA 提供两级:

  • Agent-owned credentials:所有用户共享。适合"不因人而异"的 agent 能力,比如 web search——张三搜和李四搜,用的应该是同一套。
  • User-owned credentials:每个用户一套。适合"用户在工具里各有各的权限"的场景,典型如 GitHub、Linear、Notion。

这个分级不是可有可无的选项。想象一个 GTM agent 要查 Salesforce 数据:如果一个销售只能看到自己负责的 account,那它必须以这个销售的身份去查,否则要么越权看到不该看的,要么被 API 拒绝。反过来,agent 上网搜一家公司的公开信息,压根不需要用户身份。

MDA 开箱支持 23 个服务,包括 Linear、GitHub、Google Workspace 等。LangSmith 托管授权、token 和接入方式,开发者只需要配置 user ID 和 secret。这里省掉的其实是 OAuth 里最烦的部分——token 过期刷新、scope 管理、多用户 token 存储。

Channels:Slack 与 HTTP 两条入口

内部 agent 通常从团队已经在用的渠道进入。MDA 内置了 Slack 支持。

0.8 的两处更新:

  1. Slack 支持文件传输。用户可以在 DM、app mention 或 thread reply 里调用 agent,还能直接把材料丢进对话——日志、表格、合同、截图、客户文档都行。GTM agent 的场景是:用户把上一次通话的笔记或者客户发来的文档放进 Slack,agent 接住文件、加进 context、据此作答。
  2. 新增 HTTP channels。任何能发 JSON webhook 的服务都能接 agent。

HTTP channel 的写法是一份声明:

# channels/orders.py
from managed_deepagents import channels
from lib.orders import parse, verify, messaging

channel = channels.http(
    provider="orders",
    verify=verify,
    parse=parse,
    messaging=messaging,
)

HTTP 渠道把 agent 带进内部工具、客户门户、支持系统、订单系统——任何能发 webhook 的产品界面。博文举了两个例子:管理 intake 与 triage 的客服 agent 住在产品里,负责约 demo 的 agent 住在网页上。

两条渠道都保留团队对认证、身份、记忆的控制权,同时把 agent 送到用户已经习惯的界面里。Consensus 工程团队的 Derek Gilbert 提到,他们全部 agent 都通过 Slack 访问,"Slack 集成工作得很完美";他们用 CLI 和 GitHub Actions 把多个带自定义 MCP server 的 agent 部署到了生产,现在有了 7×24 的 triage,能访问监控、开 PR、告警。

内置 Web Search:LangSmith 托管的 Parallel

Web search 是最常见的 agent 工具之一,MDA 干脆把它做进产品里,底层用的是 Parallel。

它省掉的是什么?不用单独注册一家搜索厂商、不用多管一个 API key、不用自己把搜索工具接到 agent 上。你只要在 tools/ 目录里声明 MCP server,LangSmith 负责托管 Parallel 凭证并执行调用。agent 拿到的是相关摘录和可引用的来源 URL,而调用、延迟、错误都会出现在 LangSmith traces 里。

在 tools/mcp.py 或 tools/mcp.ts 里把 Parallel 加进 servers map,mcp 只定义一次:

from managed_deepagents import define_mcp

mcp = define_mcp(
    servers={
        "Parallel": {
            "transport": "http",
            "url": "https://api.smith.langchain.com/v1/managed-tools/servers/parallel/mcp",
        },
    },
)

注意这里用的是标准的 MCP 传输层。MDA 没有另造一套工具协议,而是复用 MCP,把"凭证托管 + 执行 + 追踪"包在外面——这个选择很聪明,开发者已有的 MCP 心智模型直接能用。

上手、代价与失效边界

上手只有三条命令:

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

成本维度:长跑 beta 期间,通过 MDA 使用的 Parallel web search 免费。这也符合 MDA 的定位——它想先把基础设施标准化这件事的采用成本降到接近零,等你依赖上这套 auth/memory/channels,再谈商业化。

失效边界,这几点是你在选型前必须想清楚的:

  • 深度绑定 LangSmith / LangGraph 生态。记忆靠 Context Hub、凭证靠 LangSmith workspace、可观测性靠 LangSmith traces。你换来的是开箱即用,付出的是迁移成本。一旦 agent 逻辑之外的每一层都由平台提供,想换平台就不是改配置那么简单了。
  • OOTB 只覆盖 23 个服务。超出这个目录的外部系统,你还得自己写 connector。
  • beta 意味着接口会变。博文本身是 0.8 的发布说明,而 LangChain 迭代很快——本文写稿时的相关列表里,0.9 已经发布,加了 schedules、per-run configuration 和 Slack reactions。对这种跑得比文档还快的产品,别把内部 API 当成稳定契约来依赖。
  • 它不是低代码平台。如果你的团队里没人愿意碰 git 和 CLI,MDA 不是给你的;回头去看拖拽式方案更合适。

至于坐标系:如果你已经在用 LangGraph 且手上有成熟的 auth/memory 基建,MDA 的边际价值有限;如果你是从零起一个要上生产的 agent,又不想把几个季度砸在身份和渠道上,那它解决的是真痛点。它的竞争对手不是 LangChain 自己的开源 harness,而是"每个团队各自重造的那套基础设施"。

Managed Deep Agents 的野心,是把生产级 Agent 里那块最没意思、又最绕不开的地基标准化。它赌的是:agent 逻辑值得你亲自写,但认证、记忆、渠道不值得。

参考文档与链接

你手上有多少 agent 是在重复写 auth 和 memory?评论区聊聊你的选择和理由。觉得有用的话,点个赞让更多人看到。


作者: itech001
来源: 公众号:AI人工智能时代(the-ai-era)
网站: https://www.theaiera.top/ 关注每日最新AI新闻和技术博客,主页有更多的文章的AI 技术参考:https://www.theaiera.top

本文首发于 AI人工智能时代,转载请注明出处。

分享给朋友