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

LangChain推出Connections:为Managed Deep Agents提供托管凭证与按调用者身份认证

新功能将凭证从.env中的硬编码API密钥升级为LangSmith工作区内的命名连接,支持静态密钥和按用户OAuth授权,让代理能够以每位调用者的身份行动。

AI解读:LangChain在Managed Deep Agents预发布版中推出了Connections,目标是把代理的凭证管理从"一个固定的API密钥"变成"运行时按调用者解析"。核心改动是:凭证存在你的LangSmith工作区里,代码通过connections.get()按slug读取,不再塞进构建或.env里。

两个关键轴独立使用:凭证的"所有者"可以是部署本身的agent凭证,也可以是调用者的user凭证;凭证的"类型"可以是静态密钥,也可以是OAuth授权。组合一下就分出四种形态——agent所有配静态密钥(共享给所有人)、agent所有配OAuth(共享账户)、user所有配静态密钥(理论上可行)、user所有配OAuth(按人开票、提PR)。

真正带来体验变化的场景是OAuth配置。像Linear这类MCP服务器自注册OAuth客户端时,你只需提供URL;而GitHub这类服务商需要自己建OAuth app,提供client ID和secret。代码里只需在工具函数中加一行connections.get(),代理就能自动触发授权流程或取缓存的token。

授权流程也有它的聪明处:只要用户缺任一授权,运行会在模型开始前暂停,列出全部缺失的grant,用户统一授权后自动恢复。这意味着"让AI代你提issue"这类操作,落款就是提问者的GitHub用户名,而不是bot账号。多用户用同一代理会各自开自己的issue,作者不同。

目前的限制是:Connections属于Managed Deep Agents预发布版,OAuth目录内置于二进制文件,按安装版本决定支持的服务。Agent级凭证需先完成一次scaffold和deploy,本地开发时agent级凭证从.env解析,用户级凭证会映射到你本人。对想在生产中让代理安全替人操作产品的团队,这一功能能省去大量OAuth回调和token刷新代码。

LangChain在Managed Deep Agents预发布版中推出Connections,允许在LangSmith工作区内创建命名凭证,工具通过connections.get()在运行时按slug读取,取代原有的硬编码API密钥。该功能区分凭证所有者(agent或调用者)与凭证类型(静态密钥或OAuth授权),从而支持共享或按人解析的调用身份。

凭证的两条独立轴

LangChain博客文章称,Connections引入了"owner"(所有者)和"credential type"(凭证类型)两个独立的维度。所有者可以是agent(属于部署,所有调用者共享)或caller(运行时按人解析);凭证类型可以是静态秘密或OAuth授权,且一个agent可以持有OAuth授权,一个用户可以持有静态秘密。创建时用mda connections create固定所有权,connections.get()只从已有凭证中选择。

  • Agent拥有的秘密适用于能力不因人而异的场景,如网络搜索、地理编码或定价数据,所有调用者共享同一凭证。
  • 例如,配置Tavily连接的做法是运行uv run mda connections create tavily-agent --secret-from-env TAVILY_API_KEY,由LangSmith存储该值,不进入构建;在工具中通过connections.get("tavily-agent", {"type": "agent"})读取,轮换时可直接更新LangSmith中的值,后续请求自动使用新密钥。
  • 用户拥有的OAuth授权使代理能代表用户行动;GitHub在Connections目录中(连同其他22个服务),用户只需提供客户端ID和秘密,目录负责端点,也可自带元数据连接任何提供OAuth的服务。

按调用者身份执行与授权暂停

在用户OAuth示例中,配置GitHub连接运行uv run mda connections create github-issues --oauth github --client-id ... --secret-from-env GITHUB_CLIENT_SECRET --scope repo,其中scope替换默认值(GitHub默认为read:user)。工具内部,调用connections.get("github-issues", {"type": "user"})会为已认证用户获取或缓存OAuth令牌,或对未授权用户触发授权流。

按调用者解析的效果体现在GitHub工具上:如search_issues,同一部署下不同用户因私有仓库可见性不同而获得不同结果;而create_issue创建的issue以提问者身份打开,响应中的user.login是处理者的账号。若运行涉及多个服务,代理会在首轮模型回合前暂停,通过单个中断列出所有缺失的授权;授权后从暂停处恢复,语言上无需回调路由、令牌存储或刷新逻辑,用户也不需打开LangSmith。

  • 第三方MCP服务器若自注册OAuth客户端,配置只需一个URL,如uv run mda connections create linear-mcp --mcp;代理无需客户端ID或秘密,工具来自MCP服务器。
  • mda connections catalog列出支持的目录服务,mda connections list可查看LangSmith中的现有连接。
  • 另有--authorize可为整个部署存储一个OAuth授权,适用于专用团队账户;--allowed-scope限制后续授权请求范围,--authorize-url和--token-url支持目录外的供应商。

本地开发和可用性

Connections包含在Managed Deep Agents预发布版中,OAuth目录内置于二进制文件,因此所支持的--oauth由安装版本决定。agent级凭证需先完成一次scaffold和部署;之后每个连接需三步:创建、用connections.get()读取、重新部署以推送代码。本地开发时,agent级凭证从MDA_DEV_环境变量解析(大写且连字符替换为下划线);用户级凭证在mda dev下将已登录开发者映射为真实主体,授权中断可在本地触发并存储真实授权。

  • 安装方式:uv tool install managed-deepagents;查看目录:uv run mda connections catalog;列出连接:uv run mda connections list。
  • 完整文档见https://docs.langchain.com/langsmith/python/managed-deep-agents-connections

信息来源

LangChain Blog原始来源