智能体带来的三个问题#
- 目标不可预测。 智能体自行决定访问哪里;你无法预先为一个网站选择数据中心代理、为另一个网站选择住宅代理。住宅出口是稳妥的默认选择。
- 每个任务包含大量跳转。 搜索、打开、点击、阅读,再重复:一个任务就是一个会话,在任务持续期间应始终使用同一出口。
- 支出没有上限。 陷入循环的智能体可能获取数 GB 数据。请为其设置不可超出的上限。
适用于整个工具链的环境变量#
大多数 Python HTTP 技术栈(requests、httpx、aiohttp、urllib)和许多工具都遵循 HTTPS_PROXY、HTTP_PROXY 与 NO_PROXY。在智能体进程中设置这些变量,无需修改代码,即可让所有获取页面的工具走代理。
export HTTPS_PROXY="http://AGENTUSER-cc-us-sid-task-4f2a-ttl-2h:[email protected]:9000"
export HTTP_PROXY="$HTTPS_PROXY"
export NO_PROXY="localhost,127.0.0.1,api.openai.com,api.anthropic.com"
python agent.py使用 NO_PROXY 排除模型提供商的 API 主机:LLM 调用不需要住宅出口,只会徒增流量费用。
Node.js 智能体#
Node 的 fetch(undici)默认忽略环境变量。在启动时设置一次全局 dispatcher,智能体中的每个 fetch(包括第三方工具发起的请求)都会遵循该设置。
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
setGlobalDispatcher(new EnvHttpProxyAgent()); // 读取 HTTPS_PROXY / NO_PROXYPlaywright MCP 服务器#
Claude、ChatGPT 类工具和 IDE 智能体使用 Playwright MCP 服务器驱动浏览器,该服务器可在启动时接收代理。请传入网关、粘性用户名,以及本地主机绕过列表。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--proxy-server=http://res.proxshift.com:9000",
"--proxy-bypass=localhost,127.0.0.1"
]
}
}
}Chromium 会提示输入代理凭据,但 MCP 会话无法响应;请在控制面板中将机器的公网 IP 加入白名单,以免出现提示。如果希望为该机器单独设置流量上限,请使用子用户。如果服务器提供用户名和密码选项,则改为传入粘性用户名。
基于 Playwright 构建的浏览器智能体#
browser-use 等框架会在浏览器配置中公开 Playwright 的代理设置(server、username、password)。每次运行智能体时都分配新的会话 ID,避免并行运行共享出口;同时将上下文的区域设置和时区设为出口所在国家/地区。
proxy = {
"server": "http://res.proxshift.com:9000",
"username": f"AGENTUSER-cc-us-sid-{run_id}-ttl-1h",
"password": "PASS",
}
# 在框架接收 Playwright 代理设置的位置传入 `proxy`上限控制:子用户#
为每个智能体或项目创建一个子用户,并设置以 GB 为单位的流量限制。智能体会获得独立的用户名和密码,其用量单独统计;无论陷入何种循环,都无法突破上限。
保持合理的访问行为#
- 限制智能体每分钟对每个域名的请求数;轮换出口不能成为高频轰炸的借口。
- 在浏览器上下文中屏蔽图片、媒体和字体;智能体只需读取文本。
- 为每个任务记录会话 ID,以便将被拦截的运行追溯到其出口,并在新出口上重新执行。
大家常问的问题#
LLM API 调用也应该通过代理吗?
不应该。使用 NO_PROXY 排除提供商主机:这些调用不需要住宅出口,只会消耗流量。
主要阅读文档和开放网站的智能体应使用哪种网络?
对于开放资源,数据中心地址更便宜、速度也更快,但智能体无法预测何时会遇到受保护的网站。住宅代理是稳妥的默认选择;只有在智能体仅访问已知开放目标时,才改用数据中心代理。