
Anh Tuan
Data Science Expert

CrewAI điều phối nhiều trợ lý AI làm việc cùng nhau trên các nhiệm vụ phức tạp — nghiên cứu, thu thập dữ liệu, tạo nội dung và tự động hóa quy trình. Khi bất kỳ trợ lý nào trong Crew gặp phải thách thức CAPTCHA trong tương tác web, toàn bộ quy trình đa trợ lý sẽ bị dừng lại. Gói capsolver-agent của CapSolver tích hợp trực tiếp vào quy trình của CrewAI, cung cấp cho các trợ lý khả năng giải reCAPTCHA, Cloudflare Turnstile và các thách thức xác minh khác mà không làm gián đoạn luồng thực thi hợp tác.
capsolver-agent xử lý giải quyết thông qua dịch vụ AI của CapSolver và trả về kết quả có cấu trúccreate_executor() và ghi chú @tool của CrewAICrewAI cho phép các nhóm trợ lý chuyên biệt hợp tác trên các nhiệm vụ yêu cầu nhiều khả năng. Một nhóm điển hình có thể bao gồm một trợ lý nghiên cứu duyệt web, một trợ lý phân tích xử lý dữ liệu và một trợ lý viết báo cáo. Khi trợ lý nghiên cứu gặp CAPTCHA trên trang web mục tiêu, nó không thể tiếp tục — và vì các trợ lý CrewAI truyền dữ liệu theo trình tự, toàn bộ quy trình của nhóm sẽ dừng lại.
Vấn đề này trở nên nghiêm trọng hơn trong CrewAI vì nhiều trợ lý có thể cần truy cập web. Một nhóm tăng cường thông tin liên lạc có thể có một trợ lý thu thập dữ liệu công ty và một trợ lý xác minh thông tin liên hệ — cả hai đều gặp CAPTCHA trên các trang khác nhau cùng lúc. Nếu không có cơ chế giải quyết, các nhóm sản xuất cần sự giám sát của con người liên tục, làm mất đi mục đích của việc điều phối đa trợ lý tự động.
Theo dữ liệu sản xuất của CapSolver, khoảng 30% các nhiệm vụ web của trợ lý gặp phải các thách thức xác minh. Đối với một nhóm CrewAI thực hiện 10 nhiệm vụ phụ thuộc vào web, điều này có nghĩa là 3 điểm có thể gây treo mỗi lần chạy — mỗi điểm đều cần can thiệp thủ công nếu không có giải pháp tự động.
Cài đặt các gói cần thiết:
# Động cơ CapSolver (phụ thuộc bắt buộc)
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# Công cụ CapSolver cho trợ lý
pip install git+https://github.com/capsolver-ai/capsolver-agent.git
# Khung CrewAI
pip install crewai crewai-tools
Thiết lập biến môi trường:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
Đảm bảo bạn có tài khoản CapSolver với tín dụng API đã nạp. Trang giá cả của CapSolver hiển thị mức giá hiện tại cho từng loại CAPTCHA.
CrewAI sử dụng các công cụ tùy chỉnh được định nghĩa bằng ghi chú @tool. Bao bọc executor của CapSolver vào một công cụ tương thích với CrewAI:
import asyncio
from crewai import Agent, Task, Crew
from crewai.tools import tool
from capsolver_agent.schema import create_executor
# Tạo executor của CapSolver
executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")
@tool("Giải CAPTCHA")
def solve_captcha(captcha_type: str, website_url: str, website_key: str) -> str:
"""Giải thách thức CAPTCHA và trả về token.
Sử dụng công cụ này khi bạn gặp CAPTCHA trên trang web.
Args:
captcha_type: Loại CAPTCHA - 'reCaptchaV2', 'reCaptchaV3' hoặc 'cloudflare'
website_url: URL đầy đủ của trang có CAPTCHA
website_key: Mã trang (giá trị thuộc tính data-sitekey)
Returns:
Token CAPTCHA đã giải để gửi cùng biểu mẫu
"""
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": captcha_type,
"website_url": website_url,
"website_key": website_key
}))
if result["success"]:
return f"CAPTCHA đã được giải thành công. Token: {result['solution']['token']}"
else:
return f"Giải CAPTCHA thất bại: {result['error']}"
Công cụ này tuân theo mẫu tiêu chuẩn của CrewAI — ghi chú @tool đăng ký nó với tên và mô tả mà LLM của trợ lý sử dụng để quyết định khi nào gọi nó.
Các trợ lý CrewAI chọn công cụ dựa trên mô tả của chúng. Một công cụ giải CAPTCHA được mô tả rõ ràng cho phép trợ lý tự động nhận ra khi cần giải và gọi công cụ với các tham số chính xác. Định dạng đầu ra có cấu trúc cung cấp phản hồi rõ ràng cho trợ lý về thành công hoặc thất bại.
asyncio.run() bên trong hàm công cụ.Tạo một trợ lý CrewAI có khả năng giải CAPTCHA như một trong những công cụ có sẵn:
from crewai import Agent
# Trợ lý nghiên cứu với khả năng giải CAPTCHA
researcher = Agent(
role="Chuyên gia Nghiên cứu Web",
goal="Thu thập dữ liệu từ các trang web, xử lý mọi thách thức CAPTCHA gặp phải",
backstory="""Bạn là chuyên gia nghiên cứu web thu thập dữ liệu từ nhiều nguồn trực tuyến.
Khi bạn gặp thách thức CAPTCHA trên một trang web, bạn sử dụng công cụ solve_captcha để vượt qua nó
và tiếp tục nghiên cứu của mình. Bạn biết cách nhận diện các loại CAPTCHA: reCaptchaV2 (hộp kiểm hoặc ẩn), reCaptchaV3
(dựa trên điểm số), và cloudflare (widget Turnstile).""",
tools=[solve_captcha],
verbose=True
)
Đối với các nhóm cần nhiều trợ lý có quyền truy cập web, cung cấp công cụ CAPTCHA cho mỗi trợ lý có thể gặp xác minh:
# Trợ lý thu thập dữ liệu
data_collector = Agent(
role="Chuyên gia Thu thập Dữ liệu",
goal="Trích xuất dữ liệu có cấu trúc từ các trang web mục tiêu",
backstory="Bạn thu thập dữ liệu từ các nguồn web và xử lý các thách thức CAPTCHA bằng công cụ solve_captcha.",
tools=[solve_captcha],
verbose=True
)
# Trợ lý xác minh
verifier = Agent(
role="Chuyên gia Xác minh Dữ liệu",
goal="Xác minh dữ liệu thu thập được với các nguồn chính thống",
backstory="Bạn xác minh độ chính xác của dữ liệu bằng cách kiểm tra các nguồn chính thức, giải CAPTCHA khi cần thiết.",
tools=[solve_captcha],
verbose=True
)
Định nghĩa các nhiệm vụ có thể yêu cầu giải CAPTCHA và gom chúng thành một nhóm:
from crewai import Task, Crew, Process
# Nhiệm vụ có thể gặp CAPTCHA
research_task = Task(
description="""Nghiên cứu trang web mục tiêu tại {url}.
Nếu bạn gặp thách thức CAPTCHA, xác định loại và mã trang,
sau đó sử dụng công cụ solve_captcha để lấy token.
Trang này sử dụng reCAPTCHA v2 với mã trang: {site_key}.
Thu thập dữ liệu cần thiết sau khi giải CAPTCHA.""",
expected_output="Dữ liệu đã thu thập từ trang web mục tiêu với token CAPTCHA nếu cần",
agent=researcher
)
# Nhiệm vụ phân tích (phụ thuộc vào kết quả nghiên cứu)
analysis_task = Task(
description="Phân tích dữ liệu thu thập bởi nhà nghiên cứu và sản xuất báo cáo tóm tắt.",
expected_output="Báo cáo phân tích có cấu trúc về dữ liệu đã thu thập",
agent=data_collector
)
# Tạo nhóm
crew = Crew(
agents=[researcher, data_collector],
tasks=[research_task, analysis_task],
process=Process.sequential,
verbose=True
)
# Chạy nhóm
result = crew.kickoff(inputs={
"url": "https://example.com/data",
"site_key": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
})
print(result)
Quy trình tuần tự đảm bảo nhà nghiên cứu hoàn thành (bao gồm giải CAPTCHA) trước khi nhà phân tích bắt đầu. Đối với thực thi song song, mỗi trợ lý xử lý CAPTCHA độc lập trên các trang được giao.
Sức mạnh của CrewAI là hợp tác đa trợ lý. Bằng cách cung cấp khả năng giải CAPTCHA cho các trợ lý cần thiết, nhóm hoạt động tự động từ đầu đến cuối. Không cần can thiệp của con người khi xuất hiện các thách thức xác minh — trợ lý nhận ra tình huống, gọi công cụ và tiếp tục.
Các trang web khác nhau sử dụng các hệ thống CAPTCHA khác nhau. Tạo các công cụ chuyên dụng cho các tình huống phổ biến:
@tool("Giải reCAPTCHA v3")
def solve_recaptcha_v3(website_url: str, website_key: str, page_action: str = "verify") -> str:
"""Giải thách thức reCAPTCHA v3 với token điểm số cao.
Sử dụng khi trang sử dụng reCAPTCHA v3 ẩn (dựa trên điểm số, không có hộp kiểm hiển thị).
Args:
website_url: URL đầy đủ của trang
website_key: Mã trang reCAPTCHA
page_action: Tên hành động cho điểm số v3 (mặc định: 'verify')
"""
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": "reCaptchaV3",
"website_url": website_url,
"website_key": website_key,
"page_action": page_action,
"min_score": 0.7
}))
if result["success"]:
return f"reCAPTCHA v3 đã được giải. Token: {result['solution']['token']}"
return f"Thất bại: {result['error']}"
@tool("Giải Cloudflare Turnstile")
def solve_turnstile(website_url: str, website_key: str) -> str:
"""Giải thách thức Cloudflare Turnstile.
Sử dụng khi trang được bảo vệ bởi Cloudflare và hiển thị widget Turnstile.
Args:
website_url: URL đầy đủ của trang
website_key: Mã trang Turnstile (bắt đầu bằng 0x)
"""
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": "cloudflare",
"website_url": website_url,
"website_key": website_key
}))
if result["success"]:
return f"Turnstile đã được giải. Token: {result['solution']['token']}"
return f"Thất bại: {result['error']}"
| Loại CAPTCHA | Công cụ để sử dụng | Thời gian giải trung bình | Thường gặp ở |
|---|---|---|---|
| reCAPTCHA v2 | solve_captcha | 5-12 giây | Trang đăng nhập, biểu mẫu |
| reCAPTCHA v3 | solve_recaptcha_v3 | 3-8 giây | APIs, bảo vệ ẩn |
| Cloudflare Turnstile | solve_turnstile | 2-5 giây | SaaS hiện đại, Shopify |
Chỉ dẫn reCAPTCHA của CapSolver và chỉ dẫn Cloudflare Turnstile cung cấp thêm thông tin về các tham số và hành vi của từng loại CAPTCHA.
Mã khuyến mãi của bạn: Sử dụng mã WEBS tại Bảng điều khiển CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp tiền. Lý tưởng cho các nhóm chạy các quy trình đa trợ lý CrewAI quy mô lớn.
Đối với triển khai CrewAI sản xuất, thêm xử lý lỗi và logic thử lại:
@tool("Giải CAPTCHA với Thử lại")
def solve_captcha_robust(captcha_type: str, website_url: str, website_key: str) -> str:
"""Giải CAPTCHA với thử lại tự động khi thất bại.
Thử giải tối đa 3 lần trước khi báo cáo thất bại.
"""
for attempt in range(3):
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": captcha_type,
"website_url": website_url,
"website_key": website_key
}))
if result["success"]:
return f"Giải thành công ở lần thử {attempt + 1}. Token: {result['solution']['token']}"
if attempt < 2:
import time
time.sleep(3)
return f"Thất bại sau 3 lần thử: {result.get('error', 'Lỗi không xác định')}"
Đối với các nhóm xử lý nhiều trang, triển khai kiểm tra số dư trước khi bắt đầu:
@tool("Kiểm tra Số dư Giải CAPTCHA")
def check_balance() -> str:
"""Kiểm tra số dư còn lại cho tín dụng giải CAPTCHA."""
result = asyncio.run(executor.execute("get_balance", {}))
if result["success"]:
return f"Số dư: ${result['balance']:.2f}"
return "Không thể kiểm tra số dư"
Tài liệu web scraping của CapSolver đề cập đến các mẫu bổ sung cho thu thập dữ liệu quy mô lớn áp dụng cho các trợ lý nghiên cứu CrewAI. Đối với các trợ lý sử dụng tự động hóa trình duyệt, phần mở rộng CapSolver giúp xác định các tham số CAPTCHA trong quá trình phát triển.
Việc tích hợp giải CAPTCHA vào các quy trình đa trợ lý CrewAI yêu cầu bao bọc executor của CapSolver trong các hàm @tool tương thích với CrewAI, gán các công cụ này cho các trợ lý thực hiện nhiệm vụ web, và gom các nhóm có thể hoạt động tự động qua các thách thức xác minh. CapSolver cung cấp cơ sở hạ tầng giải CAPTCHA dựa trên AI giúp các luồng đa trợ lý của bạn chạy mà không cần can thiệp của con người.
Bắt đầu bằng cách tạo một công cụ giải CAPTCHA đơn, kiểm tra với một trợ lý, sau đó mở rộng sang các nhóm đầy đủ với nhiều trợ lý tương tác web. Cách tiếp cận dựa trên công cụ nghĩa là các trợ lý quyết định khi giải dựa trên bối cảnh — không cần logic phát hiện CAPTCHA được mã hóa cứng.
Có. Mỗi trợ lý có công cụ giải CAPTCHA có thể gọi nó độc lập. API của CapSolver hỗ trợ gửi nhiệm vụ song song mà không bị giới hạn tốc độ, vì vậy thực thi nhóm song song hoạt động mà không có xung đột. Mỗi lần giải được theo dõi với ID yêu cầu duy nhất để gỡ lỗi.
Trợ lý LLM suy luận tình huống dựa trên mô tả công cụ và bối cảnh nhiệm vụ. Khi nhiệm vụ liên quan đến tài nguyên được bảo vệ bằng CAPTCHA, trợ lý nhận ra nhu cầu và gọi công cụ giải với tham số phù hợp. Bạn cũng có thể bao gồm chi tiết CAPTCHA trong mô tả nhiệm vụ để hướng dẫn rõ ràng.
Công cụ trả về thông báo thất bại cho trợ lý. Trợ lý sau đó có thể thử lại, thử tham số khác hoặc báo cáo thất bại trong đầu ra nhiệm vụ của nó. Xử lý lỗi của CrewAI cho phép nhóm tiếp tục với các nhiệm vụ còn lại ngay cả khi một nhiệm vụ gặp CAPTCHA không thể giải.
Có. Trong chế độ xử lý phân cấp, trợ lý quản lý phân công nhiệm vụ cho các thành viên nhóm. Nếu nhiệm vụ được phân công yêu cầu giải CAPTCHA, trợ lý được gán sẽ sử dụng công cụ của nó độc lập. Trợ lý quản lý nhận kết quả hoàn thành mà không cần hiểu chi tiết giải CAPTCHA.
Chi phí phụ thuộc vào số lượng CAPTCHA gặp phải và loại của chúng. reCAPTCHA v2 chi phí khoảng 2-3 USD trên 1.000 lần giải, reCAPTCHA v3 chi phí 1-2 USD trên 1.000 và Cloudflare Turnstile chi phí 1-2 USD trên 1.000. Một nhóm nghiên cứu CrewAI thông thường gặp 3-5 CAPTCHA mỗi lần chạy chi phí khoảng 0,005-0,015 USD mỗi lần thực thi.
Hướng dẫn từng bước tích hợp giải quyết reCAPTCHA vào OpenAI Agents SDK bằng cách sử dụng function_tool của CapSolver, với các ví dụ mã nguồn bất đồng bộ cho phiên bản v2 và v3.

Xây dựng một luồng công việc giải pháp Cloudflare Turnstile cho LangGraph với CapSolver, xử lý phiên Playwright, các cổng chính sách, thử lại, xác minh và xem xét.
