产品LangChain Blog·原文 2026年10月29日本站收录 2026年10月30日

LangChain发布Managed Deep Agents v0.10:新增浏览器使用与异步子代理

LangChain称该版本处于公开测试阶段,浏览器在独立LangSmith沙箱中运行,可交还给人完成登录;异步子代理在后台运行长任务,不再阻塞主代理与用户的对话。

AI解读:浏览器使用针对没有API、需要点击操作的网站:抓取页面得到的HTML不含JavaScript渲染结果,也无法点击,这是LangChain在发布说明中给出的限制。

每个对话默认分配独立浏览器,跨轮次复用,且不携带其他线程的Cookie与登录信息;scope="user" 时同一登录用户跨所有对话共用一个浏览器,登录状态延续。

browser_handoff让代理把浏览器窗口交给人完成登录或二次验证,LangChain称密码不会进入模型消息与追踪记录;交接链接 15 分钟后过期,交接调用立即返回,代理可在等待期间继续其他工作。

异步子代理通过给子代理定义加上async开启,运行在自己线程上,主代理可继续与用户对话;代理通过一组异步任务工具启动、检查、更新和取消任务,子代理完成时主动通知而非轮询。

子代理完成时的行为取决于主代理状态:忙碌时在下次模型调用前检查未完成任务,空闲时以新运行唤醒,等待审批时不打断审批。异步子代理共享主代理沙箱的文件,其运行在LangSmith中显示在主代理运行之下。

v0.10还有破坏性变更:connectors.mcp() 与connectors/目录布局被移除,MCP服务器须在tools/mcp.ts或tools/mcp.py中声明;sandbox scope选项被移除,LANGSMITH_* 相关shell环境变量优先于项目 .env。

LangChain发布Managed Deep Agents v0.10,新增浏览器使用和异步子代理两项能力,该版本目前处于公开测试阶段。

LangChain在发布说明中称,浏览器使用让代理能够操作没有API的网站,例如预订旅行、取消订阅或提交理赔,这类网站通常需要人点击页面完成。该公司称用curl抓取页面只能得到JavaScript渲染前的HTML,代理无法点击任何元素。

浏览器工具与登录交接

浏览器运行在Managed Deep Agents自己的LangSmith沙箱内,代理自动获得四个浏览器工具:browser_snapshot读取页面的可访问性树并给元素分配ID;browser_run通过JavaScript或基于快照ID的批量动作进行导航和交互;browser_screenshot截取页面,可选择保存到沙箱;browser_handoff把窗口控制权交给真人。

每个对话默认拥有自己的浏览器,跨轮次复用,且初始不带其他线程的Cookie或登录信息。项目根部声明浏览器的示例如下:define_browser(scope="thread", idle_ttl_seconds=600)。LangChain称,scope="user" 时每个登录用户获得一个浏览器,登录状态跨其所有对话保留,代理只需请用户登录一次。

登录墙或二次验证处,代理可调用browser_handoff(reason) 并说明原因。LangChain称Slack和Studio等代理频道会显示交接链接,打开后可操作远程浏览器,并有Hand back按钮;自定义客户端可自行渲染交接产物。用户登录并交回控制权后,代理检查页面确认登录是否成功再继续。交接链接 15 分钟后过期,交接调用本身立即返回,代理可在等待期间做其他工作。

异步子代理与后台任务

此前Managed Deep Agents的子代理以内联方式运行,主代理调用后需等待其返回。LangChain称这适合快速查询,但当任务由同步代理支撑且耗时较长,或多个子代理需要并行展开时,与代理对话的人也要等待,对主代理的进一步交互会被阻塞。

v0.10中,在子代理定义中加入 "async": True即可异步运行,主代理在子代理运行时继续与用户对话。主代理通过一组异步任务工具启动、检查、更新和取消这些任务。LangChain称每个已服务的代理还会获得一个通用子代理的后台副本,可在运行时决定把委派工作放在前台还是后台运行。

异步子代理会主动通知主代理,代理不必轮询。LangChain给出三种情况:主代理忙碌时,它在每次模型调用前检查未完成任务,结果会在运行中送达;主代理空闲时,子代理以一次新运行将其唤醒;主代理因等待审批而暂停时,审批不受影响,用户在给出答复后结果再送达。异步子代理共享主代理的沙箱,可读取代理已写入的文件,其运行在LangSmith中显示在主代理运行之下;在Slack中,其审批请求会发回原线程,在原线程答复即可恢复子代理。

同版本的其他改动

v0.10还加入runtime.thread,每个线程携带其起始位置(例如某个Slack线程)以及线程成员记录,工具可在任意运行中读取;LangChain称这使得Studio恢复、计划运行和异步子代理唤醒运行都能在原Slack线程中回复。

Slack线程新增原生Stop按钮,可取消该线程的运行,Studio也能取消Slack线程上的运行。Slack频道处理器处于实验阶段,onEvent决定提及、私信、其他消息和按钮点击各自启动什么,status设置运行期间Slack的显示内容,reply: "none" 则将回复交给代理。mda deploy会询问新Slack频道使用哪个应用,可选LangSmith创建并管理的应用、按清单新建的应用,或已有应用。

resolveUser用于把在Slack等频道给代理发消息的发送者映射到用户自己系统中的对应用户,以便工具查询该人的账户与权限;可写成函数或指向一个由LangChain调用的端点,并在覆盖所有频道的identity声明或单个频道上设置。

  • 移除connectors.mcp() 和connectors/目录布局,MCP服务器须在tools/mcp.ts或tools/mcp.py中声明
  • 移除sandbox scope选项
  • LANGSMITH_* 相关变量中,shell环境变量优先于项目 .env
  • 可通过uvx --from managed-deepagents mda init my-agent创建项目,再运行uv run mda deploy部署

信息来源

LangChain Blog原始来源