xiaohack's Blog - AgentRun
type: channel
link: https://blog.xiaohack.org/tag/agentrun/
items: 探秘 AgentRun丨动态下发＋权限隔离，重构 AI Agent 安全体系
items: 探秘 AgentRun｜基于 Serverless 的 AI Agent 沙箱工程化之路
items: 探秘 AgentRun丨为什么应该把 LangChain 等框架部署到函数计算 AgentRun
items: 快速上手：LangChain + AgentRun 浏览器沙箱极简集成指南

探秘 AgentRun丨动态下发＋权限隔离，重构 AI Agent 安全体系
type: item
date: 2026-02-02T16:03:39+08:00
description: 作者：江昱在构建 Agent 应用时，凭证管理是一个容易被忽视但又极其重要的问题。一个典型的 Agent 应用会面临两个方向的凭证需求：向内，用户如何安全地调用你的 Agent？向外，Agent 如何安全地调用外部服务？传统做法存在诸多问题。硬编码在代码里容易泄露且难以更新，存在配置文件中同样有安全风险，每次都手动传递不仅麻烦还容易出错，让大模型处理凭证更是巨大的安全隐患。更棘手的是，当凭证需要更新时（比如 API Key 过期、权限变更），如何在不重启服务的情况下动态更新？函数计算 AgentRun 的凭证管理系统就是为了解决这些问题而生。入站凭证与出站凭证：双向安全保障函数计算 AgentRun 的凭证管理分为两个维度，分别解决“谁能调用我”和“我能调用谁”的问题。入站凭证：控制谁能访问你的 Agent入站凭证用于控制外部用户或系统如何访问你的 Agent 应用。当你创建一个 Agent 并对外提供服务时，需要确保只有授权的用户才能调用。函数计算 AgentRun 提供了灵活的入站凭证管理，可以为不同的调用方生成独立的凭证，设置不同的权限和配额，控制每个凭证能访问哪些 Agent、调用频率限制、有效期等。由于所有请求都经过函数计算 AgentRun 网关，入站凭证可以实现真正的动态更新。 比如你的 Agent 对外提供客服能力，可以为不同的业务部门生成不同的入站凭证，每个部门只能访问各自授权的 Agent。当某个部门的凭证泄露时，可以立即撤销并重新生成，所有变更在网关层实时生效，不影响其他部门的使用，也无需重启任何服务。出站凭证：安全调用外部服务出站凭证用于 Agent 访问外部服务时的身份认证。Agent 应用通常需要调用各种外部服务：大模型 API（OpenAI、Claude、Qwen 等）、数据库、第三方工具、企业内部系统等，每个服务都需要相应的凭证。传统方式下，开发者要么把这些凭证硬编码在代码里，要么通过环境变量传递，不仅不安全，更新时还需要重启服务。函数计算 AgentRun 采用了一套巧妙的定时查询与缓存机制来管理出站凭证。 所有出站凭证统一存储在加密的凭证库中，代码里不再出现任何敏感信息。Agent 启动时会从凭证库拉取所需的所有凭证并缓存到本地，运行过程中直接使用本地缓存，避免频繁的网络请求带来的性能开销。同时，系统会定期进行健康检查，主动查询凭证是否有更新，发现变更时只更新发生变化的凭证。如果健康检查失败，会自动重试，确保凭证始终可用。这种定时查询方案带来了多重价值。 从性能角度看，本地缓存避免了每次调用都查询凭证库，大幅降低了延迟和网络开销；从可用性角度看，即使凭证服务短暂不可用，缓存的凭证仍然可用，不会影响 Agent 的正常运行；从安全性角度看，定时健康检查确保凭证泄露或过期时能在几分钟内完成更新，而不需要等到下次部署。最关键的是，整个更新过程对 Agent 代码完全透明，开发者无需编写任何凭证更新逻辑，专注于业务实现即可。这种最终一致性的设计在实践中被证明是最优的平衡：既保证了性能和可用性，又实现了凭证的动态更新能力。相比于每次都实时查询（性能差）或者只在启动时加载（更新不及时），定时查询方案在三者之间找到了最佳平衡点。实际应用：工具和模型的凭证配置函数计算 AgentRun 的凭证管理在两个关键场景发挥作用，展示了从理论到实践的完整闭环。场景一：大模型调用的凭证管理当你的 Agent 需要调用多个大模型时，每个模型都需要各自的 API Key。以前你可能需要在代码里硬编码这些 Key，或者通过环境变量传递，但这样做存在安全风险且更新困难。有了函数计算 AgentRun 的凭证管理，你只需要在平台上配置各个模型的出站凭证，给每个凭证命名（如 openai_key、qwen_key），然后在 Agent 配置中引用这些凭证名称。运行时系统会自动注入实际的 Key，你的代码里完全看不到任何敏感信息。当某个模型的 Key 过期需要更新时，只需在凭证管理界面更新，几分钟后所有使用该凭证的 Agent 会通过定时健康检查自动获取新的 Key，无需修改代码或重启服务。这种体验就像是有一个智能管家在后台默默地帮你管理所有的钥匙，你只需要告诉他你要开哪扇门。# Agent 配置示例（伪代码） models: - name: gpt-4 credential: ${credentials.openai_key} # 引用凭证名称，不暴露实际Key - name: qwen-max credential: ${credentials.qwen_key}场景二：工具调用的凭证注入回到之前提到的 FunctionQ 案例，这是一个更复杂但也更能体现凭证管理价值的场景。Agent 需要通过 MCP 调用 CLI 工具查询用…

探秘 AgentRun｜基于 Serverless 的 AI Agent 沙箱工程化之路
type: item
date: 2026-01-22T17:42:07+08:00
description: 阿里云函数计算 AgentRun 全新发布后，我们整理了“探秘 AgentRun”系列文章，本系列将梳理企业落地Agent 常见难题，给出具体解法，助力 Agentic AI 快速走进生产级环境。欢迎加入“函数计算 AgentRun 客户群”与我们交流，钉钉群号：134570017218。AI Agent 时代的沙箱需求从 Copilot 到 Agent：执行能力的质变在生成式 AI 的早期阶段，应用主要以“Copilot”形式存在，AI 仅作为辅助生成建议。然而，随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter（现为 Advanced Data Analysis）的出现，AI 开始扮演“Agent”的角色。Agent 被赋予了目标，并能自主规划步骤、使用工具来达成目标。这种质变的核心在于代码执行（Code Execution）。为了回答“分析这层楼的销售数据并绘制趋势图”这样的请求，LLM 不再只是生成一段 Python 代码文本，而是需要在一个真实的 Python 环境中运行这段代码，并获取绘图结果。同样，为了“帮我预订一张去东京的机票”，Agent 可能需要在一个无头浏览器（Headless Browser）中模拟用户点击。不可信代码的安全隐患当 LLM 生成代码并执行时，这段代码在本质上是不可信的（Untrusted）。如果直接在应用服务器或用户的本地设备上运行，将面临灾难性的安全风险：系统破坏：AI 生成的代码可能无意或恶意地包含 rm -rf / 等破坏性指令，或者修改关键系统配置文件。数据泄露：代码可能尝试读取环境变量中的 API Key，或者扫描内网数据库，将敏感数据发送到外部服务器。资源耗尽：死循环或内存泄漏代码可能导致宿主机崩溃，影响其他租户的服务。网络攻击：恶意 Prompt 注入（Prompt Injection）可能诱导 AI 将执行环境作为跳板（Jump Box），对内部网络发起 DDoS 攻击或端口扫描。Agent 场景面临的独特挑战除了基础的安全性，AI Agent 的交互特性还给沙箱环境带来了前所未有的工程挑战，这也是传统沙箱（如简单的 Docker 容器或虚拟机）难以应对的：状态保持：与传统的“请求-响应”模式不同，Agent 往往需要进行多轮对话。上一轮定义的变量（如 df = load_data()）需要在下一轮（df.plot()）中继续可用。这就要求沙箱环境必须具备上下文记忆能力，而非每次请求都重置环境。极速启动：用户无法忍受每次交互都等待数秒甚至数十秒的虚拟机启动时间。为了保证流畅的对话体验（Time to First Token），沙箱必须具备毫秒级的冷启动能力。环境依赖多样性：不同的 Agent 任务可能需要完全不同的依赖库（如 Pandas、Scipy 用于数据分析，Puppeteer 用于网页操作）。沙箱需要支持灵活的自定义镜像或动态依赖加载，同时不能影响启动速度。资源成本控制：Agent 的调用往往具有稀疏性和突发性（例如一天只用几次，但一次用很久）。长期运行独占的虚拟机（VM）成本高昂且资源利用率低，而传统的 FaaS 虽然便宜但往往缺乏状态保持能力。如何在低成本和高性能之间找到平衡点，是一个巨大的挑战。因此，构建一个沙箱（Sandbox）——一个与宿主机、内网以及其他用户数据严格隔离，同时具备高性能、低成本、有状态的封闭执行环境——成为了 AI Agent 沙箱落地的前提条件。AgentRun Sandbox：专为 Agent 设计的工程化方案为了解决上述挑战，我们推出了 AgentRun Sandbox。这是一个以高代码为核心，开放生态、灵活组装的一站式 Agentic AI 基础设施平台。AgentRun 并非从零构建传统的虚拟机集群，而是基于阿里云函数计算（FC）这一强大的 Serverless 底座构建。通过充分利用 Serverless 的按需付费、极致弹性以及免运维（NoOps） 特性，AgentRun 解决了一直困扰沙箱领域的成本与效率难题，并在此基础上通过工程化封装，提供了面向 Agent 场景的专业能力。为什么选择函数计算作为 Sandbox Infra在构建 Agent 沙箱时，我们坚定地选择了函数计算（FC）作为底层基础设施，这主要基于以下核心优势的考量：强安全隔离： 沙箱的核心诉求是安全。函数计算底层采用神龙裸金属与 RunD 安全容器技术，每个执行环境都运行在独立的 MicroVM 中。这种基于虚拟化技术的内核级隔离，相比传统的 Docker 容器隔离具有更高的安全性，能有效防止恶意代码逃逸，为不可信代码执行提供了坚实屏障。极致弹性与冷启动优化： Agent 的调用往往具有突发性。函数计算具备毫秒级的…

探秘 AgentRun丨为什么应该把 LangChain 等框架部署到函数计算 AgentRun
type: item
date: 2026-01-22T17:41:17+08:00
description: 作者：江昱阿里云函数计算 AgentRun 全新发布后，我们整理了“探秘 AgentRun”系列文章，本系列将梳理企业落地 Agent 常见难题，给出具体解法，助力 Agentic AI 快速走进生产级环境。欢迎加入“函数计算 AgentRun 客户群”与我们交流，钉钉群号： 134570017218 。当你已经用 LangChain、AgentScope、LangGraph 等框架开发了 Agent 应用，如何让它们享受函数计算 AgentRun 提供的 Serverless 运行时、企业级 Sandbox、模型高可用、全链路可观测等能力？好消息是，你几乎不需要改动现有代码，只需要简单的适配就可以迁移到函数计算 AgentRun。这篇文章将通过真实的代码示例，展示如何将不同框架的 Agent 应用部署到函数计算 AgentRun 上，以及如何充分利用函数计算 AgentRun 的各种能力。为什么要部署到函数计算 AgentRun？在讨论具体的集成方案前，让我们先明确一个问题：如果你的 Agent 应用已经在本地或自建服务器上运行良好，为什么还要迁移到函数计算 AgentRun？答案很简单：从开发环境到生产环境，有一道巨大的鸿沟。 本地运行只需要考虑功能实现，但生产环境需要考虑性能、稳定性、成本、安全、可观测等一系列问题。函数计算 AgentRun 提供的不是又一个 Agent 框架，而是让你的 Agent 能够以企业级标准运行的完整基础设施。具体来说，部署到函数计算 AgentRun 后，你能获得：零运维的 Serverless 运行时（自动扩缩容、按量付费），企业级的 Sandbox 环境（高性能、安全隔离），模型高可用保障（自动熔断、多模型 Fallback），全链路可观测（完整的 Trace、成本归因），以及统一的工具和 MCP 管理。快速上手：5 分钟部署你的第一个 LangChain Agent让我们从最流行的 LangChain 框架开始，通过一个完整的例子展示如何将 LangChain Agent 部署到函数计算 AgentRun。第一步：安装 Serverless Devs函数计算 AgentRun 使用 Serverless Devs 作为部署工具。如果你有 Node.js 环境，一行命令即可安装：npm i -g @serverless-devs/s第二步：创建项目使用脚手架快速创建项目（注意：需要 Python 3.10 及以上版本）：# 初始化模板 s init agentrun-quick-start-langchain # 进入代码目录 cd agentrun-quick-start-langchain/code # 初始化虚拟环境并安装依赖 uv venv && uv pip install -r requirements.txt第三步：配置认证信息通过环境变量（建议使用 .env 文件）配置你的 AgentRun 访问凭证：export AGENTRUN_ACCESS_KEY_ID="your-access-key-id" export AGENTRUN_ACCESS_KEY_SECRET="your-access-key-secret" export AGENTRUN_ACCOUNT_ID="your-account-id" export AGENTRUN_REGION="cn-hangzhou"第四步：理解集成方式这是最关键的部分。打开生成的代码，你会看到集成非常简单：from agentrun.integration.langchain import model, sandbox_toolset from agentrun.server import AgentRunServer # 使用 AgentRun 的模型（自动享受高可用、熔断等能力） llm = model("<your-model-name>") # 使用 AgentRun 的 Sandbox 工具 tools = sandbox_toolset( template_name="<your-sandbox-name>", template_type=TemplateType.CODE_INTERPRETER, sandbox_idle_timeout_seconds=300, ) # 创建 LangChain Agent（和原来的代码完全一样） agent = create_agent( model=llm, tools=tools, system_prompt="你是一个智能助手" ) # 定义调用函数 def invoke_agent(request): result = agent.invoke({"messages"…

快速上手：LangChain + AgentRun 浏览器沙箱极简集成指南
type: item
date: 2026-01-22T17:35:21+08:00
description: 作者：辰泉前言在 Agentic AI 时代，智能体需要与真实世界交互，而浏览器是连接虚拟世界与现实世界的重要桥梁。AgentRun Browser Sandbox 为智能体提供了安全、高性能、免运维的浏览器执行环境，让 AI Agent 真正具备“上网”的能力——从网页抓取、信息提取到表单填写、自动化操作，一切皆可实现。AgentRun Browser Sandbox 介绍什么是 Browser Sandbox?Browser Sandbox 是 AgentRun 平台提供的云原生无头浏览器沙箱服务，基于阿里云函数计算（FC）构建。它为智能体提供了一个安全隔离的浏览器执行环境，支持通过标准的 Chrome DevTools Protocol (CDP) 远程控制浏览器实例。核心特性无头浏览器能力内置 Chromium/Chrome 浏览器，支持完整的 Web 标准原生兼容 Puppeteer、Playwright 等主流自动化框架支持通过 CDP 协议进行精细化控制实时可视化内置 VNC 服务，支持实时查看浏览器界面提供操作录制功能，方便调试和回放支持通过 noVNC 客户端在网页中直接交互安全与隔离每个沙箱实例运行在独立的容器环境中文件系统和进程空间完全隔离支持 WSS 加密传输，确保数据安全Serverless 架构按需创建，按量付费，无需提前预置资源快速弹性伸缩，支持高并发场景零运维，无需管理服务器和浏览器依赖主要应用场景AI Agent 赋能： 为大模型提供“眼睛”和“手”，执行网页浏览、信息提取、在线操作等任务自动化测试： 在云端运行端到端（E2E）测试和视觉回归测试数据采集： 稳定、高效地进行网页抓取，应对动态加载和反爬虫挑战内容生成： 自动化生成网页截图或 PDF 文档上手使用 AgentRun Browser SandboxAgentRun SDK 快速介绍后续的内容将基于 AgentRun SDK 进行，因此我们先对 SDK 进行简要介绍。Agentrun SDK 是一个开源的开发者工具包，本期介绍 Python 版本。其旨在简化智能体与 AgentRun 平台各种服务（包括 Browser Sandbox）的集成。它提供了统一的接口，让您可以用几行代码就将沙箱能力集成到现有的 Agent 框架中。SDK 的核心功能如下：统一集成接口提供对 LangChain、AgentScope 等主流框架的开箱即用支持统一的模型代理接口，简化多模型管理标准化的工具注册机制Sandbox 生命周期管理自动创建和销毁沙箱实例支持会话级别的状态保持灵活的资源配置和超时控制安装 AgentRun SDKpip install agentrun-sdk[playwright,server]注意： 确保您的 Python 环境版本在 3.10 及以上。基本使用示例以下是使用 AgentRun SDK 创建和管理 Browser Sandbox 的核心代码：from agentrun.sandbox import Sandbox, TemplateType from playwright.sync_api import sync_playwright # 创建 Browser Sandbox sandbox = Sandbox.create( template_type=TemplateType.BROWSER, template_name="your-template-name", sandbox_idle_timeout_seconds=300 ) # 获取 CDP URL（用于 Playwright 连接） cdp_url = sandbox.get_cdp_url() # 使用 Playwright 连接并操作 with sync_playwright() as p: browser = p.chromium.connect_over_cdp(cdp_url) page = browser.contexts[0].pages[0] page.goto("https://www.example.com") page.screenshot(path="screenshot.png") browser.close() # 销毁 Sandbox sandbox.delete()关键概念：template_name： 控制台创建的浏览器环境模板cdp_url： 用于 Playwright/Puppeteer 连接vnc_url： 用于实时查看浏览器画面（可通过 sandbox.get_cdp_url() 获取）注意： 由于所有浏览器操作都在云端进行，您无需在本地安装浏览器。Playwright 仅用于通过 CDP 协议连接到云端的浏览…