AI agent 網頁瀏覽用的代理已成為正式環境 agent 基礎設施中不可妥協的一環。每次你的 LangChain agent 爬取一個定價頁、你的 AutoGPT 實例研究競爭對手,或你的 CrewAI 小隊蒐集訓練資料時,目標網站看到的都是單一 IP 位址用自動化請求猛烈轟炸它。結果就是:速率限制、CAPTCHA、IP 封鎖,以及默默回傳垃圾資料的 agent。
Gartner 預測,到 2026 年底,40% 的企業應用程式將內建任務專用的 AI agent,相較於 2025 年的不到 5%(Gartner,2025 年 8 月)。隨著 agent 部署規模擴大,封鎖也隨之擴大。本文涵蓋你建立可靠的 LLM 資料蒐集代理基礎設施所需的一切:該用哪些代理類型、如何把它們接進三個最熱門的 agent 框架,以及如何把成本控制在範圍內。
AI agent 與人類用不同的方式與網路互動。單一 agent 可以橫跨數十個網域,每分鐘發出數百個請求。沒有代理的話,那些請求每一個都來自同一個 IP 位址。
速率限制。多數網站會強制執行每個 IP 的請求上限。一個從單一 IP 每分鐘打 60 個請求的 agent,會在數秒內觸發節流。回應慢如龜爬或回傳 429 錯誤,你 agent 的推理鏈就斷了。
反機器人偵測。像 Cloudflare、Akamai 與 PerimeterX 這類系統會分析請求模式、TLS 指紋與行為訊號。一個使用預設 requests 工作階段、沒有瀏覽器指紋、又用機關槍般時序的 agent,要識別出來輕而易舉。
IP 指紋辨識。單一 IP 對同一站台的多個端點發出請求,會形成清楚的指紋。站台把這些請求關聯起來、標記該 IP,然後封鎖它 — 而且往往是永久的。
地理限制。蒐集定價資料、廣告內容或在地化搜尋結果的 agent,需要看起來來自特定國家。沒有地理鎖定的代理,你的 agent 只會看到提供給你伺服器實際所在地的內容。
住宅 IP 來自真實的 ISP 指派裝置。網站把它們當作正常使用者流量看待,使其成為對付有積極反機器人系統的目標的理想選擇。在 JIBAO Proxy,住宅頻寬基礎費率為 $2/GB,搭配量大折扣最低可降到 $5.50/GB。
機房 IP 更快、更便宜,但網站更容易偵測。它們在 API、公開資料來源與沒有反機器人防護的目標上表現良好。以 輪換機房 IP 每 GB $1 計,對於高量、低風險的蒐集,它們是符合成本效益的選擇。
輪換代理為每個請求指派一個新 IP。當每個請求各自獨立時使用它們:搜尋查詢、產品列表、大量 URL 檢查。
黏滯工作階段在一段可設定的時長內(1–30 分鐘)維持同一個 IP。在多步驟工作流程中使用它們:登入、瀏覽分頁結果,或填寫表單。
| Agent 任務 | 代理類型 | 工作階段 | 原因 |
|---|---|---|---|
| 網頁爬取(受保護站台) | 住宅 | 輪換 | 避開以 IP 為基礎的速率限制 |
| 多步驟表單填寫 | 住宅 | 黏滯 | 維持工作階段一致性 |
| API 資料蒐集 | 機房 | 輪換 | 快、便宜,API 很少封鎖機房 IP |
| 價格監控(電商) | 住宅 | 輪換 | 電商使用積極的反機器人 |
| LLM 訓練資料蒐集 | 機房 | 輪換 | 量才是重點,多數目標較寬鬆 |
| 社群媒體研究 | 住宅 | 黏滯 | 平台會追蹤工作階段與 IP 的綁定 |
from langchain_community.document_loaders import WebBaseLoader
# JIBAO Proxy rotating residential endpoint
PROXY_USER = "your_username"
PROXY_PASS = "your_password"
PROXY_HOST = "gate.jibaoproxy.com"
PROXY_PORT = "10001"
proxy_url = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
loader = WebBaseLoader(
web_paths=["https://example.com/pricing"],
proxies={"http": proxy_url, "https": proxy_url},
requests_kwargs={"timeout": 30},
)
docs = loader.load()
import requests
from langchain_community.document_loaders import WebBaseLoader
# Sticky session: append session ID to username
SESSION_ID = "agent-task-001"
PROXY_USER = f"your_username-session-{SESSION_ID}"
PROXY_HOST = "gate.jibaoproxy.com"
PROXY_PORT = "10002"
proxy_url = f"http://{PROXY_USER}:your_password@{PROXY_HOST}:{PROXY_PORT}"
session = requests.Session()
session.proxies = {"http": proxy_url, "https": proxy_url}
loader = WebBaseLoader(
web_paths=["https://example.com/page/1", "https://example.com/page/2"],
session=session,
)
docs = loader.load()
import os
from langchain.tools import tool
os.environ["HTTP_PROXY"] = "http://user:[email protected]:10001"
os.environ["HTTPS_PROXY"] = "http://user:[email protected]:10001"
@tool
def fetch_page(url: str) -> str:
"""Fetch a web page through a residential proxy."""
import requests
resp = requests.get(url, timeout=30)
resp.raise_for_status()
return resp.text[:8000]
AutoGPT 從環境變數讀取代理設定。把這些加到你的 .env 檔:
# .env - AutoGPT proxy configuration
HTTP_PROXY=http://your_username:[email protected]:10001
HTTPS_PROXY=http://your_username:[email protected]:10001
# Bypass proxy for LLM API calls
NO_PROXY=localhost,127.0.0.1,api.openai.com
# Rate limits (seconds between requests)
BROWSE_COOLDOWN=3
SEARCH_COOLDOWN=5
如果你透過 Docker 執行 AutoGPT,就用 docker-compose.yml 傳入這些變數:
services:
autogpt:
environment:
- HTTP_PROXY=http://user:[email protected]:10001
- HTTPS_PROXY=http://user:[email protected]:10001
- NO_PROXY=localhost,127.0.0.1,api.openai.com
NO_PROXY 變數確保對你 LLM 供應商的 API 呼叫直接連出。只有網頁瀏覽流量應該走代理。
import os
# Configure proxy BEFORE importing CrewAI tools
os.environ["HTTP_PROXY"] = "http://user:[email protected]:10001"
os.environ["HTTPS_PROXY"] = "http://user:[email protected]:10001"
os.environ["NO_PROXY"] = "api.openai.com,api.anthropic.com"
from crewai import Agent, Task, Crew
from crewai_tools import ScrapeWebsiteTool, SerperDevTool
scrape_tool = ScrapeWebsiteTool()
search_tool = SerperDevTool()
researcher = Agent(
role="Market Researcher",
goal="Gather competitor pricing data from e-commerce sites",
tools=[scrape_tool, search_tool],
verbose=True,
)
task = Task(
description="Scrape pricing pages of the top 5 competitors",
agent=researcher,
expected_output="A comparison table of competitor prices",
)
crew = Crew(agents=[researcher], tasks=[task])
result = crew.kickoff()
在任務之間輪換 IP,而非在任務之內。如果你的 agent 在同一站台執行一個 5 步驟工作流程,就對全部 5 步用一個黏滯工作階段。在任務中途切換 IP 會觸發反詐欺系統。
驗證流程用黏滯工作階段。任何涉及登入或工作階段 cookie 的工作流程都必須維持同一個 IP。在 IP-A 鑄造的 cookie 卻從 IP-B 出現,看起來就像工作階段劫持。
實作帶代理輪換的重試邏輯:
import requests
from time import sleep
def fetch_with_retry(url, proxy_base, max_retries=3):
for attempt in range(max_retries):
proxy = f"http://user-session-{attempt}:pass@{proxy_base}"
try:
resp = requests.get(
url,
proxies={"http": proxy, "https": proxy},
timeout=30,
)
resp.raise_for_status()
return resp.text
except requests.exceptions.HTTPError:
sleep(2 ** attempt)
raise Exception(f"Failed after {max_retries} retries: {url}")
監控頻寬用量。住宅代理按 GB 計費。一個有 bug、在 10MB 頁面上迴圈的 agent,可以迅速燒光預算。
尊重 robots.txt。代理給了你存取任何東西的能力。那不代表你就應該這麼做。忽略 robots.txt 會帶來法律風險,並讓代理 IP 範圍被標記。
依目標難度路由流量,而非依方便程度。
機房代理($0.8/GB)用於:公開 API、政府入口網站、學術資料庫、新聞站台。這些目標很少採用反機器人系統。
住宅代理($2/GB,量大時最低 $5.50/GB)用於:電商平台、社群媒體、搜尋引擎,以及任何在 Cloudflare/Akamai 後面的東西。
相較於把所有東西都走住宅,這種分層做法可把代理成本削減 60–80%。
承諾之前先測試。JIBAO Proxy 在註冊時提供帶 500M 額度的免費試用 — 足以驗證你的 agent 流程。新帳號也會獲得 100% 首次儲值加碼。
新用戶註冊即送 500M免費流量,首次儲值另有贈金。優惠限時供應。