
Emma Foster
Machine Learning Engineer

LlamaIndex agent mengatur alur kerja pengambilan data, indeks, dan pertanyaan di berbagai sumber. Ketika agen ini mengakses sumber data berbasis web yang dilindungi tantangan CAPTCHA, mereka memerlukan mekanisme penyelesaian untuk melanjutkan pengumpulan data. Paket capsolver-agent dari CapSolver menyediakan skema alat yang kompatibel dengan sistem FunctionTool LlamaIndex, memungkinkan agen Anda menyelesaikan reCAPTCHA, Cloudflare Turnstile, dan tantangan verifikasi lainnya sebagai bagian dari alur kerja data Anda.
FunctionTool LlamaIndex dengan penyelesaian asinkroncapsolver-agent menangani penyelesaian dan mengembalikan hasil terstruktur untuk loop pemikiran agencreate_executor() dan FunctionTool.from_defaults()LlamaIndex unggul dalam membangun agen yang mengambil, mengindeks, dan menanyakan data dari berbagai sumber. Ketika sumber ini mencakup halaman web, API, atau database yang dilindungi sistem CAPTCHA, pipeline pengumpulan data agen terhambat. Agent RAG yang perlu mengindeks dokumentasi dari situs yang dilindungi CAPTCHA, atau agent penelitian yang menanyakan beberapa sumber web, tidak dapat melanjutkan tanpa penyelesaian verifikasi.
Masalah ini terutama parah untuk ekosistem koneksi data LlamaIndex. Koneksi berbasis web yang mengambil halaman untuk pengindeksan menghadapi CAPTCHA setelah akses berulang. Tanpa alat penyelesaian, agen akan melewatkan sumber (data tidak lengkap) atau gagal sepenuhnya (pipeline rusak).
Integrasi alat CapSolver mengikuti pola standar LlamaIndex: definisikan fungsi, bungkus sebagai FunctionTool, dan tambahkan ke daftar alat agen. Mesin pemikiran agen menentukan kapan memanggil penyelesaian berdasarkan konteks tugas.
# Paket 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(tipe_captcha: str, url_website: str, kunci_website: str) -> str:
"""Selesaikan tantangan CAPTCHA dan kembalikan token verifikasi.
Gunakan saat mengakses sumber web yang dilindungi verifikasi CAPTCHA.
Args:
tipe_captcha: 'reCaptchaV2', 'reCaptchaV3', atau 'cloudflare'
url_website: URL lengkap halaman yang dilindungi CAPTCHA
kunci_website: Kunci situs (nilai atribut data-sitekey)
Returns:
String token yang selesai atau pesan kesalahan
"""
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": tipe_captcha,
"website_url": url_website,
"website_key": kunci_website
}))
if result["success"]:
return f"CAPTCHA selesai. Token: {result['solution']['token']}"
return f"Gagal: {result['error']}"
# Bungkus sebagai FunctionTool LlamaIndex
captcha_tool = FunctionTool.from_defaults(
fn=solve_captcha,
name="solve_captcha",
description="Selesaikan tantangan CAPTCHA (reCAPTCHA v2/v3, Cloudflare Turnstile) di halaman web yang dilindungi"
)
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
# Buat LLM
llm = OpenAI(model="gpt-4o", temperature=0)
# Buat agen dengan alat penyelesaian CAPTCHA
agent = ReActAgent.from_tools(
tools=[captcha_tool],
llm=llm,
verbose=True
)
# Jalankan agen
response = agent.chat(
"Saya perlu mengakses https://example.com/data yang memiliki reCAPTCHA v2. "
"Kunci situsnya adalah 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI. "
"Selesaikan dan beri saya tokennya."
)
print(response)
Untuk agen yang mengumpulkan data web, gabungkan penyelesaian CAPTCHA dengan pemuatan data:
from llama_index.core import VectorStoreIndex, Document
def fetch_protected_page(url: str, kunci_website: str) -> str:
"""Ambil halaman yang dilindungi CAPTCHA dengan menyelesaikan terlebih dahulu."""
# Selesaikan CAPTCHA
token = solve_captcha("reCaptchaV2", url, kunci_website)
if "Gagal" in token:
return ""
# Gunakan token untuk mengakses halaman
import requests
response = requests.post(url, data={"g-recaptcha-response": token.split("Token: ")[1]})
return response.text
# Buat alat khusus untuk pengumpulan data yang dilindungi
protected_fetch_tool = FunctionTool.from_defaults(
fn=fetch_protected_page,
name="fetch_protected_page",
description="Ambil konten dari halaman web yang dilindungi CAPTCHA dengan menyelesaikan verifikasi terlebih dahulu"
)
# Agen dengan kemampuan penyelesaian dan pengambilan
data_agent = ReActAgent.from_tools(
tools=[captcha_tool, protected_fetch_tool],
llm=llm,
verbose=True
)
def solve_captcha_with_retry(tipe_captcha: str, url_website: str, kunci_website: str, max_retries: int = 3) -> str:
"""Penyelesaian CAPTCHA dengan logika retry untuk produksi."""
for attempt in range(max_retries):
result = asyncio.run(executor.execute("solve_captcha", {
"captcha_type": tipe_captcha,
"website_url": url_website,
"website_key": kunci_website
}))
if result["success"]:
return f"Selesai (percobaan {attempt+1}). Token: {result['solution']['token']}"
if attempt < max_retries - 1:
import time
time.sleep(3)
return f"Gagal setelah {max_retries} percobaan: {result.get('error')}"
# Alat produksi dengan retry
production_captcha_tool = FunctionTool.from_defaults(
fn=solve_captcha_with_retry,
name="solve_captcha",
description="Selesaikan CAPTCHA dengan retry otomatis saat gagal"
)
| Jenis CAPTCHA | Parameter | Waktu Penyelesaian | Biaya per 1K |
|---|---|---|---|
| reCAPTCHA v2 | reCaptchaV2 |
5-12 detik | $2-3 |
| reCAPTCHA v3 | reCaptchaV3 |
3-8 detik | $1-2 |
| Cloudflare Turnstile | cloudflare |
2-5 detik | $1-2 |
Dapatkan Kode Bonus Anda: Gunakan kode WEBS di Dashboard CapSolver untuk mendapatkan bonus tambahan 5% pada setiap pengisian ulang.
Dokumentasi API CapSolver menjelaskan parameter tambahan. Untuk mengidentifikasi jenis CAPTCHA, gunakan ekstensi CapSolver. Panduan pencarian web CapSolver menjelaskan pola pengumpulan data yang berlaku untuk koneksi data LlamaIndex.
Mengintegrasikan penyelesaian CAPTCHA ke dalam agent LlamaIndex memerlukan pembungkus executor CapSolver dalam FunctionTool dan menambahkannya ke daftar alat agen ReAct. Loop pemikiran agen menentukan kapan memanggil penyelesaian berdasarkan konteks tugas. CapSolver menyediakan infrastruktur penyelesaian yang menangani reCAPTCHA dan Cloudflare Turnstile melalui API yang terpadu, menjaga alur kerja data LlamaIndex tetap berjalan tanpa gangguan.
Ya. Executor capsolver-agent sepenuhnya asinkron. Untuk agen async LlamaIndex, gunakan await executor.execute() secara langsung alih-alih membungkus dengan asyncio.run().
Ya. Gabungkan alat penyelesaian CAPTCHA dengan pembaca web khusus yang menangani verifikasi sebelum mengambil konten halaman. Agen dapat menyelesaikan CAPTCHA terlebih dahulu, lalu meneruskan token ke pembaca web untuk akses terotentikasi.
Alat get_supported_captchas mengembalikan daftar jenis yang didukung. Jika agen menghadapi jenis yang tidak didukung, ia menerima pesan kesalahan yang jelas dan dapat melaporkannya ke pengguna alih-alih gagal diam-diam.
capsolver-mcp digunakan untuk klien MCP (Claude Desktop, Cursor). Untuk agen LlamaIndex yang berjalan dalam kode, gunakan capsolver-agent dengan FunctionTool — ini memberi Anda kontrol programatik langsung dalam kerangka LlamaIndex.
Atur layanan CapSolver MCP untuk penyelesaian CAPTCHA tanpa kode di Claude Desktop, Cursor, dan setiap klien MCP.

Hasilkan token reCAPTCHA v3 dengan skor tinggi di OpenAI Agents SDK menggunakan function_tool CapSolver.
