2026 হলো সেই বছর যখন AI এজেন্টরা আর কেবল ডেমো থাকেনি। browser-use, OpenAI-এর Operator-ধাঁচের এজেন্ট, Anthropic-এর computer use, এবং Playwright-এর উপর গড়ে ওঠা ডজনখানেক ফ্রেমওয়ার্ক এখন বাস্তব ওয়েবসাইটের বিরুদ্ধে বাস্তব ব্রাউজার চালায় — বুকিং, কেনাকাটা, গবেষণা, মনিটরিং। আর এরা সবাই একই দেয়ালে ধাক্কা খায়: যেসব সাইটে এরা কাজ করে, সেগুলো এদের বট হিসেবেই গণ্য করে, কারণ এরা সত্যিই বট।
এই গাইড নির্দিষ্টভাবে ব্রাউজার-চালিত AI এজেন্টদের জন্য প্রক্সি স্তর নিয়ে আলোচনা করে। আপনার এজেন্ট যদি ব্রাউজারের বদলে HTTP লাইব্রেরি ব্যবহার করে (LangChain টুল, CrewAI-এর ভেতরের স্ক্র্যাপার), তাহলে দেখুন AI এজেন্টের জন্য প্রক্সি: LangChain, AutoGPT & CrewAI — এই আর্টিকেলটি সেইসব এজেন্ট নিয়ে যারা একটি পূর্ণাঙ্গ ব্রাউজার নিয়ন্ত্রণ করে।
স্বজ্ঞার বিপরীত হলেও সত্য: একটি বাস্তব Chrome ব্রাউজার চালানো LLM এজেন্ট প্রায়ই একটি সাধারণ Python স্ক্র্যাপারের চেয়ে দ্রুত ব্লক হয়। তিনটি কারণ:
navigator.webdriver, CDP-নির্দিষ্ট টাইমিং আর্টিফ্যাক্ট, এবং headless লক্ষণের জন্য পরীক্ষা চালায়। একটি ফ্ল্যাগ করা IP-এর সাথে মিলিয়ে স্কোর তৎক্ষণাৎ ব্লক থ্রেশহোল্ড অতিক্রম করে।তিনটির মধ্যে IP-ই সবচেয়ে সস্তায় ঠিক করা যায়, আর কেবল এটি ঠিক করলেই বেশিরভাগ ব্লক সমাধান হয়ে যায়: এজেন্টকে রেসিডেনশিয়াল প্রক্সির মাধ্যমে রাউট করুন যাতে IP-এর গল্প ব্রাউজারের গল্পের সাথে মেলে।
browser-use Playwright-এর উপর বসে, তাই প্রক্সি সাপোর্ট নেটিভ। প্যাটার্নটি হলো: প্রতি এজেন্ট টাস্কে একটি sticky session, যাতে এজেন্ট কাজ করার সময় IP স্থিতিশীল থাকে, এবং পরবর্তী টাস্কের জন্য একটি নতুন IP।
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
import uuid
task_id = uuid.uuid4().hex[:8]
browser = Browser(config=BrowserConfig(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": f"USERNAME-session-{task_id}", # sticky: same IP for this task
"password": "PASSWORD",
},
))
agent = Agent(
task="Find the current price of the Sony WH-1000XM6 on the three largest US retailers.",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
result = await agent.run()
মূল বিষয়: session-{task_id} সাফিক্সটি। এটি ছাড়া, একটি রোটেটিং গেটওয়ে টাস্কের মাঝপথে এজেন্টকে একটি নতুন IP দিয়ে দিতে পারে — কার্টের বিষয়বস্তু উবে যায়, লগইন বাদ পড়ে, আর এজেন্ট ধাপগুলো আবার করতে গিয়ে LLM কল অপচয় করে। এটি থাকলে, টাস্কটি শুরু থেকে শেষ পর্যন্ত একটি IP-তে চলে, আর পরবর্তী টাস্ক একটি পরিষ্কার IP পায়।
আপনি যদি Playwright-এর উপর নিজের এজেন্ট লুপ তৈরি করে থাকেন (যা বেশিরভাগ Operator-ধাঁচের ও computer-use বাস্তবায়নের পেছনের প্যাটার্ন), তাহলে প্রক্সিটি ব্রাউজার কনটেক্সটে যায়:
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": "USERNAME-session-agent42",
"password": "PASSWORD",
},
viewport={"width": 1366, "height": 768},
locale="en-US",
timezone_id="America/Chicago", # match the proxy country
)
page = await context.new_page()
# ... agent loop: screenshot -> LLM -> action -> repeat
প্রক্সির দেশের সাথে মেলাতে locale এবং timezone_id সেট করুন। একটি US IP থেকে UTC+8 ঘড়ি নিয়ে ব্রাউজ করা এজেন্ট একটি অসঙ্গতি, যা আচরণগত সিস্টেমগুলো আপনার বিরুদ্ধে স্কোর করে।
প্রতি-কনটেক্সট প্রক্সি আপনাকে একটি ব্রাউজার, অনেক এজেন্টও দেয়: প্রতিটি new_context() নিজস্ব সেশন সাফিক্স বহন করতে পারে, ফলে দশটি Chrome প্রসেস ছাড়াই দশটি একযোগে এজেন্ট টাস্ক দশটি ভিন্ন রেসিডেনশিয়াল IP-তে চলে।
| এজেন্ট ওয়ার্কলোড | সেশন কৌশল | কেন |
|---|---|---|
| গবেষণা / দাম যাচাই (লগইন ছাড়া) | Sticky, ১০ মিনিট, প্রতি টাস্কে নতুন সেশন | টাস্কের ভেতরে স্থিতিশীল, টাস্কের মধ্যে নতুন IP |
| লগইন-করা অ্যাকাউন্ট অপারেশন | Sticky ৩০ মিনিট, প্রতিবার একই সেশন ID | লগইনের মধ্যে দেশ পাল্টানো অ্যাকাউন্টকে সাইট ফ্ল্যাগ করে |
| চেকআউট / বুকিং ফ্লো | Sticky ৩০ মিনিট | চেকআউটের মাঝপথে IP পরিবর্তন সেশন নষ্ট করে এবং জালিয়াতি পর্যালোচনা চালু করে |
| উচ্চ-পরিমাণ মনিটরিং (শত শত পৃষ্ঠা) | রোটেটিং, কোনো সেশন পিন নেই | IP বৈচিত্র্য সর্বোচ্চ করা, সংরক্ষণের জন্য কোনো স্টেট নেই |
রেসিডেনশিয়াল ট্রাফিক প্রতি GB হিসেবে বিল করা হয়, এবং একটি ব্রাউজার এজেন্ট পূর্ণ পৃষ্ঠা টানে — ছবি, ফন্ট, ট্র্যাকার — একটি HTTP স্ক্র্যাপারের বিপরীতে। নিয়ন্ত্রণহীনভাবে, একটি এজেন্ট টাস্ক ২০–৫০ MB খেয়ে ফেলতে পারে। প্রভাবের ক্রমানুসারে তিনটি সমাধান:
await context.route("**/*.{png,jpg,jpeg,webp,gif,woff,woff2,mp4}",
lambda route: route.abort())
আপনার এজেন্ট যদি স্ক্রিনশট পড়ে, তাহলে টার্গেট পৃষ্ঠায় ছবি রাখুন কিন্তু ভিডিও ও ফন্ট তবু ব্লক করুন। এটি যদি DOM/অ্যাক্সেসিবিলিটি ট্রি পড়ে, তাহলে ছবিও ব্লক করুন — এতে ট্রাফিক ৬০–৮০% কমে।ছবি ব্লকিং এবং সীমিত রাউটিং সহ, সাধারণ ব্রাউজার-এজেন্ট টাস্ক ২–৮ MB রেঞ্জে নামে — $2/GB-তে যা প্রতি একশো টাস্কে মাত্র কয়েক সেন্ট।
সততার অংশ। একটি রেসিডেনশিয়াল IP ASN অসঙ্গতি এবং IP সুনাম ঠিক করে, যা 2026-এর অ্যান্টি-বট স্কোরিংয়ে সবচেয়ে ভারী একক সংকেত। এটি যা ঠিক করে না:
requests দিয়ে "শুধু রিপ্লে" করতে পারবেন না। দেখুন JA3/JA4 ব্যাখ্যা।একটি রেসিডেনশিয়াল IP-তে তিনটিই স্ট্যাক করুন, তাহলে ব্রাউজার এজেন্টরা বাস্তব ব্যবহারকারীদের মতোই একই যাচাই পার হয়। সবচেয়ে কঠিন টার্গেটের জন্য (DataDome, PerimeterX), দেখুন আমাদের DataDome/PerimeterX গাইড।
timezone_id/locale প্রক্সির দেশের সাথে মেলান।500MB ফ্রি ট্রাফিক — রিসোর্স ব্লকিং চালু রেখে কয়েকশো ব্রাউজার-এজেন্ট টাস্কের জন্য যথেষ্ট।
ফ্রি ট্রায়াল শুরু করুননতুন ব্যবহারকারীরা নিবন্ধনের সময় 500MB পান, সাথে প্রথম রিচার্জে বোনাস। সীমিত সময়ের অফার।