
Anh Tuan
Data Science Expert

Các agent LlamaIndex điều phối quy trình truy xuất dữ liệu, lập chỉ mục và truy vấn trên nhiều nguồn khác nhau. Khi các agent này truy cập các nguồn dữ liệu dựa trên web được bảo vệ bởi các thử thách CAPTCHA, chúng cần cơ chế giải quyết để tiếp tục quá trình nhập dữ liệu. Gói capsolver-agent của CapSolver cung cấp các lược đồ công cụ tương thích với hệ thống FunctionTool của LlamaIndex, cho phép agent của bạn vượt qua các thử thách reCAPTCHA, Cloudflare Turnstile và các loại xác minh khác trong quy trình dữ liệu của nó.
FunctionTool của LlamaIndex với giải quyết bất đồng bộcapsolver-agent xử lý giải quyết và trả về kết quả có cấu trúc cho vòng lập suy luận của agentcreate_executor() và FunctionTool.from_defaults()LlamaIndex xuất sắc trong việc xây dựng các agent truy xuất, lập chỉ mục và truy vấn dữ liệu từ nhiều nguồn. Khi các nguồn này bao gồm trang web, API hoặc cơ sở dữ liệu được bảo vệ bởi hệ thống CAPTCHA, quy trình nhập dữ liệu của agent sẽ bị gián đoạn. Một agent RAG cần lập chỉ mục tài liệu từ trang web bị CAPTCHA, hoặc một agent nghiên cứu truy vấn nhiều nguồn web, không thể tiếp tục mà không có xác minh được xóa bỏ.
Vấn đề đặc biệt nghiêm trọng đối với hệ sinh thái kết nối dữ liệu của LlamaIndex. Các kết nối dựa trên web lấy trang để lập chỉ mục gặp CAPTCHA sau nhiều lần truy cập. Không có công cụ giải quyết, agent sẽ bỏ qua nguồn (dữ liệu không đầy đủ) hoặc thất bại hoàn toàn (quy trình bị gián đoạn).
Tích hợp công cụ của CapSolver tuân theo mô hình tiêu chuẩn của LlamaIndex: định nghĩa một hàm, bao bọc nó thành FunctionTool, và thêm vào danh sách công cụ của agent. Động cơ suy luận của agent quyết định khi nào gọi giải quyết dựa trên bối cảnh nhiệm vụ.
# Gói CapSolver
pip install git+https://github.com/capsolver-ai/capsolver-core.git
pip install git+https://github.com/capsolver-ai/capsolver-agent.git
# LlamaIndex
pip install llama-index llama-index-llms-openai
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
import asyncio
from llama_index.core.tools import FunctionTool
from capsolver_agent.schema import create_executor
executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")
def solve_captcha(captcha_type: str, website_url: str, website_key: str) -> str:
"""Giải quyết thử thách CAPTCHA và trả về token xác minh.
Sử dụng khi truy cập tài nguyên web được bảo vệ bởi xác minh CAPTCHA.
Args:
captcha_type: 'reCaptchaV2', 'reCaptchaV3' hoặc 'cloudflare'
website_url: URL đầy đủ của trang bị CAPTCHA
website_key: khóa trang (giá trị thuộc tính data-sitekey)
Returns:
Chuỗi token đã giải hoặc thông báo lỗi
"""
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 đã giải. Token: {result['solution']['token']}"
return f"Thất bại: {result['error']}"
# Bao bọc thành FunctionTool của LlamaIndex
captcha_tool = FunctionTool.from_defaults(
fn=solve_captcha,
name="solve_captcha",
description="Giải quyết các thử thách CAPTCHA (reCAPTCHA v2/v3, Cloudflare Turnstile) trên các trang web được bảo vệ"
)
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
# Tạo LLM
llm = OpenAI(model="gpt-4o", temperature=0)
# Tạo agent với công cụ giải CAPTCHA
agent = ReActAgent.from_tools(
tools=[captcha_tool],
llm=llm,
verbose=True
)
# Chạy agent
response = agent.chat(
"Tôi cần truy cập https://example.com/data có reCAPTCHA v2. "
"Khóa trang là 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI. "
"Giải nó và cung cấp token."
)
print(response)
Đối với các agent nhập dữ liệu web, kết hợp giải CAPTCHA với việc tải dữ liệu:
from llama_index.core import VectorStoreIndex, Document
def fetch_protected_page(url: str, site_key: str) -> str:
"""Lấy trang bị CAPTCHA bằng cách giải trước."""
# Giải CAPTCHA
token = solve_captcha("reCaptchaV2", url, site_key)
if "Thất bại" in token:
return ""
# Sử dụng token để truy cập trang
import requests
response = requests.post(url, data={"g-recaptcha-response": token.split("Token: ")[1]})
return response.text
# Tạo công cụ tùy chỉnh cho việc nhập dữ liệu bị bảo vệ
protected_fetch_tool = FunctionTool.from_defaults(
fn=fetch_protected_page,
name="fetch_protected_page",
description="Lấy nội dung từ trang web bị bảo vệ bằng cách giải xác minh trước"
)
# Agent với khả năng giải và tải dữ liệu
data_agent = ReActAgent.from_tools(
tools=[captcha_tool, protected_fetch_tool],
llm=llm,
verbose=True
)
def solve_captcha_with_retry(captcha_type: str, website_url: str, website_key: str, max_retries: int = 3) -> str:
"""Giải CAPTCHA với logic thử lại cấp độ sản xuất."""
for attempt in range(max_retries):
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 (lần thử {attempt+1}). Token: {result['solution']['token']}"
if attempt < max_retries - 1:
import time
time.sleep(3)
return f"Thất bại sau {max_retries} lần thử: {result.get('error')}"
# Công cụ sản xuất với thử lại
production_captcha_tool = FunctionTool.from_defaults(
fn=solve_captcha_with_retry,
name="solve_captcha",
description="Giải CAPTCHA với thử lại tự động khi thất bại"
)
| Loại CAPTCHA | Tham số | Thời gian giải | Chi phí mỗi 1K |
|---|---|---|---|
| reCAPTCHA v2 | reCaptchaV2 |
5-12s | $2-3 |
| reCAPTCHA v3 | reCaptchaV3 |
3-8s | $1-2 |
| Cloudflare Turnstile | cloudflare |
2-5s | $1-2 |
Nhận mã thưởng của bạn: Sử dụng mã WEBS tại Bảng điều khiển CapSolver để nhận thêm 5% thưởng cho mỗi lần nạp tiền.
Tài liệu API CapSolver bao gồm các tham số bổ sung. Để xác định loại CAPTCHA, sử dụng phần mở rộng CapSolver. Hướng dẫn quét web CapSolver bao gồm các mẫu thu thập dữ liệu áp dụng cho các kết nối dữ liệu LlamaIndex.
Việc tích hợp giải CAPTCHA vào các agent LlamaIndex yêu cầu bao bọc executor của CapSolver trong FunctionTool và thêm vào danh sách công cụ của agent ReAct. Vòng lập suy luận của agent quyết định khi nào gọi giải quyết dựa trên bối cảnh nhiệm vụ. CapSolver cung cấp cơ sở hạ tầng giải quyết xử lý reCAPTCHA và Cloudflare Turnstile qua API thống nhất, giữ cho các quy trình dữ liệu LlamaIndex hoạt động liên tục.
Có. Bộ xử lý capsolver-agent hoàn toàn bất đồng bộ. Đối với agent bất đồng bộ của LlamaIndex, sử dụng await executor.execute() trực tiếp thay vì bao bọc bằng asyncio.run().
Có. Kết hợp công cụ giải CAPTCHA với các trình đọc web tùy chỉnh xử lý xác minh trước khi lấy nội dung trang. Agent có thể giải CAPTCHA trước, sau đó truyền token cho trình đọc web để truy cập có xác thực.
Công cụ get_supported_captchas trả về danh sách các loại được hỗ trợ. Nếu agent gặp loại không hỗ trợ, nó sẽ nhận được thông báo lỗi rõ ràng và có thể báo cáo cho người dùng thay vì thất bại im lặng.
capsolver-mcp dành cho khách hàng MCP (Claude Desktop, Cursor). Đối với agent LlamaIndex chạy trong mã, sử dụng capsolver-agent với FunctionTool — nó cung cấp kiểm soát chương trình trực tiếp trong khung LlamaIndex.
Cài đặt dịch vụ CapSolver MCP để giải CAPTCHA mà không cần lập trình trên Claude Desktop, Cursor và bất kỳ khách hàng MCP nào.

Tạo token reCAPTCHA v3 có điểm cao trong OpenAI Agents SDK bằng cách sử dụng công cụ hàm CapSolver.
