程序在哪里运行
本地、服务器、Serverless、容器与沙箱的区别。
一句话理解:同一段 Agent 代码,放在你的电脑、云服务器、Serverless、容器或沙箱里运行,能访问的东西、能跑多久、出事后影响多大,完全不同。
“这个 Agent 部署在哪?”是需求评审里经常被跳过、上线前才被发现的问题。它直接决定了一系列产品特性:用户关掉电脑后任务还能不能继续?Agent 能不能读用户本地文件?一次任务能跑 30 分钟吗?执行了恶意命令会不会波及生产系统?
这一课帮你分清几种常见的运行位置,并理解在 Agent 系统中,模型、Harness 和工具往往运行在三个不同的地方。
先分清三个“在哪里”
一个 Agent 系统中,至少有三类东西在运行,它们可以在不同位置:
以几个典型产品为例:
| 产品形态 | 模型在哪 | Harness 在哪 | 工具在哪执行 |
|---|---|---|---|
| 本地 Coding Agent(命令行工具) | 厂商云端 | 你的电脑 | 你的电脑终端与文件系统 |
| 云端 Coding Agent(后台任务) | 厂商云端 | 厂商服务器 | 云端沙箱中的代码副本 |
| 企业客服工单 Agent | 厂商云端或私有部署 | 企业服务器 / 容器 | 企业内部业务系统 API |
| 浏览器插件型 Agent | 厂商云端 | 浏览器插件 + 厂商服务 | 你的浏览器页面 |
所以“Agent 在本地运行”这句话要追问清楚:是 Harness 在本地、工具在本地,还是模型也在本地?
五种运行位置
| 位置 | 是什么 | 类比 | 优点 | 局限 |
|---|---|---|---|---|
| 本地 | 用户自己的电脑 | 在自己家里干活 | 能访问本地文件与登录态;数据不出本机(模型调用除外) | 关机即停;环境千差万别;本机权限大,风险直接落在用户电脑上 |
| 服务器 / 虚拟机 | 一台长期运行的云主机 | 租一间办公室 | 可长期运行;环境可控 | 需要运维;闲置也要付费;扩容需要规划 |
| Serverless | 按请求临时启动的函数,平台管理机器 | 按次叫的外卖骑手 | 无需运维;按用量计费;自动扩容 | 单次执行时长、内存等有平台限制;冷启动延迟;不适合长时间保持状态 |
| 容器 | 把程序与依赖打包成标准化的运行单元 | 标准集装箱 | 环境一致、便于迁移与扩容 | 需要编排与镜像管理;默认隔离强度不足以运行不可信代码 |
| 沙箱 | 强隔离、受限的执行环境,常是一次性的 | 带玻璃墙的实验室 | 限制文件、网络、进程访问;可随时销毁重建 | 访问外部资源需要显式放行;启动与资源有成本 |
几个需要注意的地方:
- Serverless 的时长限制:各平台对单次执行时间有上限,具体数值因平台和套餐而异。长时间运行的 Agent 任务通常需要拆分成多段,或结合队列、工作流引擎来实现(见异步、队列、Webhook 与定时任务)。
- 容器不等于沙箱:容器主要解决“环境一致”的问题,隔离能力取决于配置。要运行模型生成的、不可信的代码,通常需要专门加固的沙箱方案。
- 沙箱的核心是“限制”:它规定能读写哪些目录、能访问哪些网络地址、能用多少 CPU 与内存、能运行多久。详见沙箱。
为什么 Agent 特别关心运行位置
普通软件的代码是工程师写好、测试过的;Agent 执行的命令和代码是模型在运行时生成的,而且可能受到注入攻击的影响。这让运行位置从“部署问题”变成了“安全与产品问题”。
以 Coding Agent 执行一条被注入的恶意命令为例:
同时,运行位置也决定了用户体验:
| 产品需求 | 更适合的运行位置 |
|---|---|
| 读取用户本地文件、使用本地开发环境 | 本地 |
| 关闭电脑后任务继续运行 | 服务器 / 云端沙箱 |
| 同时跑 20 个任务 | 云端(容器 / 沙箱,可并发扩容) |
| 流量忽高忽低的轻量 API 型 Agent | Serverless |
| 运行模型生成的代码、安装依赖、跑测试 | 沙箱 |
| 数据不能离开企业内网 | 企业私有服务器 / 私有云,必要时模型也私有部署 |
本地与云端的完整取舍(权限、数据位置、并发与成本)见本地执行与云端执行。
用三个贯穿场景做一次选型
场景一:销售分析 Agent(企业内部使用)
- Harness:企业服务器上的容器,便于统一管理凭据与日志。
- 工具:通过内网 API 访问数据仓库的只读视图。
- 数据分析代码:在沙箱中运行模型生成的 Python 做统计与画图,沙箱内不可访问公网。
- 理由:数据敏感、需要集中审计、分析代码不可信。
场景二:SEO 诊断 Agent(面向外部客户的 SaaS)
- Harness:云端服务,诊断任务放入队列由 Worker 执行。
- 工具:网页抓取在隔离环境中执行,限制并发与频率。
- 理由:客户多、任务可并行、需要后台长时间运行,抓取不可信网页需要隔离。
场景三:个人 Coding Agent
- Harness:用户本地命令行工具。
- 工具:本地终端与文件系统,但配置了权限规则,高风险命令需确认;需要时可切换到云端沙箱跑长任务。
- 理由:需要访问本地代码与开发环境,同时要控制风险。
三个场景用到的东西,可以放回同一张图里——这也是本模块七课内容的全景:触发与排队、Harness 与模型和工具之间的通信,以及运行位置、身份权限、数据格式和异步机制这四条支撑。
常见误区
- “部署是研发的事,产品不用管。” 运行位置决定了任务能否后台运行、能否访问本地文件、并发能力和安全边界,这些都是产品特性。
- “放在容器里就安全了。” 容器的默认隔离不足以对抗恶意代码。运行不可信代码需要专门的沙箱方案,并限制网络与文件访问。
- “本地运行就不会有数据外泄。” 本地 Harness 仍会把上下文发送给云端模型;本地执行恶意命令的破坏力反而可能更大。
产品经理检查清单
- 模型、Harness、工具分别在哪里运行?
- 用户关闭页面或电脑后,任务是否继续?
- 单个任务最长需要运行多久?所选平台是否支持?
- 需要同时运行多少任务?如何扩容?
- Agent 会执行模型生成的代码或命令吗?是否在沙箱中执行?
- 执行环境能访问哪些文件、哪些网络地址?谁来配置白名单?
- 敏感数据会离开哪些边界(本机、内网、企业、国家或地区)?
- 执行环境出问题时,能否销毁重建?会丢失哪些状态?
练习
用 30–45 分钟完成:
- 选两个你用过的 Agent 产品(例如一个本地 Coding Agent 与一个网页端通用 Agent),查阅其官方文档,填写:
| 产品 | 模型在哪 | Harness 在哪 | 工具在哪执行 | 是否有沙箱 | 能否后台运行 |
|---|---|---|---|---|---|
- 为“订单售后诊断 Agent”写一段 200 字以内的部署建议:Harness、工具、数据分析代码分别放在哪里,为什么。
下一步
理论准备完毕。下一课「实操:调通第一个 API」让你亲手发出请求、读懂 JSON,并完成一次“手动版 Tool Calling”。