คำตอบสั้น
LLMWebSearch API ส่งคืนข้อผิดพลาดอะไรได้บ้าง และคิดเงินไหม?
LLMWebSearch มี HTTP error หกแบบ: 400 invalid_parameter, 401 invalid_api_key, 402 insufficient_credits, 429 rate_limited, 502 search_failed และ 504 search_timeout ไม่มีแบบใดถูกคิดเงิน หน้าเว็บที่อ่านไม่ได้จะแสดง content_status ภายใน 200 แทน การค้นหาที่สำเร็จมีค่าใช้จ่าย 1 เครดิต จาก US$1.20/1K การค้นหา ณ เดือนตุลาคม 2026 ไม่ต้อง KYC จ่ายด้วยคริปโต
มี HTTP error อะไรบ้าง?
body เป็น {"error": {"code": "…", "message": "…"}} เสมอ ไม่มี error ใดใช้เครดิต
| HTTP | code | สาเหตุ | ลองใหม่? |
|---|---|---|---|
| 400 | invalid_parameter | พารามิเตอร์ที่จำเป็นหายไป หรือค่าอยู่นอกช่วง | ไม่: แก้ไข request |
| 401 | invalid_api_key | API key หายไป ผิด หรือถูกเพิกถอน | ไม่: ตรวจสอบ API key |
| 402 | insufficient_credits | ยอดคงเหลือไม่พอจ่ายสำหรับการเรียกนี้ | ไม่: ซื้อแพ็ก |
| 429 | rate_limited | จำนวนการเรียกต่อนาทีเกินที่บัญชีอนุญาต | ใช่ หลังจากหยุดรอ |
| 502 | search_failed | การค้นหาไม่สามารถเสร็จสมบูรณ์ได้ | ใช่ ด้วย backoff |
| 504 | search_timeout | ไม่มีผลการค้นหาภายใน 30 วินาที | ใช่ ด้วย backoff |
สถานะของหน้าเว็บต่างจาก error อย่างไร
สถานะของหน้าอธิบายผลลัพธ์หนึ่งรายการ ไม่ใช่ตัวการเรียก การค้นหาได้ทำงานแล้ว ผลลัพธ์อยู่ครบ และ credits_used ถูกตั้งค่าไว้ตามปกติ มีเพียงเนื้อหาของหน้านั้นหน้าเดียวที่ขาดหาย และ content_status บอกสาเหตุว่าเป็นเพราะ blocked_by_robots, blocked_by_site_policy, target_refused, fetch_failed, fetch_timeout หรือ unsupported_content
อย่าถือว่าสิ่งเหล่านี้เป็นความล้มเหลวที่ต้องลองค้นหาใหม่ทั้งหมด ให้ใช้ผลลัพธ์อื่นๆ ใช้ snippet ของหน้าที่ขาดหาย หรือใช้แหล่งอื่น หน้า response format อธิบายแต่ละสถานะไว้ในตาราง
ทำไมคุณถึงไม่ลองใหม่เมื่อเจอการปฏิเสธ
เพราะการปฏิเสธคือคำตอบของเว็บไซต์ และเราเคารพคำตอบนั้น ตัวอ่านของเราเคารพ robots.txt: แนะนำตัวว่าเป็น LLMWebSearch ทำตามกฎที่เว็บไซต์เขียนไว้สำหรับมันหรือสำหรับ robots ทั้งหมด และละเว้นเนื้อหาของหน้าใดก็ตามที่มันไม่ได้รับอนุญาตให้อ่าน เว็บไซต์ที่ตั้งค่า Content-Signal: ai-input=no ใน robots.txt จะกันหน้าเว็บของตนออกจากเนื้อหาในผลลัพธ์ของคุณ เมื่อเว็บไซต์ปฏิเสธ reader ของเราด้วย 403, 429 หรือหน้า challenge เราจะรายงานเป็น target_refused พร้อมสถานะของเว็บไซต์ใน target_status
เมื่อเว็บไซต์ปิดกั้นตัวอ่านของเรา ผลลัพธ์จะกลับมาโดยไม่มีเนื้อหาและมีสถานะของเว็บไซต์: เราไม่แก้ CAPTCHA ไม่ลงชื่อเข้าใช้บัญชี และไม่หลบเลี่ยงการบล็อกหรือ paywall เราไม่ลองใหม่ด้วยตัวตนอื่นหรือเบราว์เซอร์ที่ปลอมตัวเช่นกัน agent ของคุณไม่ควรวนซ้ำบนหน้าแบบนั้น เพราะผลลัพธ์จะไม่เปลี่ยน และเว็บไซต์ได้บอกปฏิเสธแล้ว
โค้ดของฉันควรลองใหม่เมื่อไหร่
เฉพาะเมื่อเจอ 429, 502 และ 504 เท่านั้น ให้รอแล้วลองอีกครั้ง โดยเพิ่มเวลารอเป็นสองเท่าในแต่ละครั้งและใส่ความสุ่มเล็กน้อย เพื่อให้ worker ที่ทำงานขนานกันไม่ลองใหม่พร้อมกัน ลองสามถึงห้าครั้งก็เพียงพอ หลังจากนั้นให้รายงานความล้มเหลว
ห้ามลองใหม่กับ 400, 401 หรือ 402 เด็ดขาด เพราะคำขอเดิมจะให้คำตอบเดิมจนกว่าคุณจะเปลี่ยนอะไรบางอย่าง สำหรับหน้าเว็บ fetch_failed และ fetch_timeout อาจทำงานได้ในภายหลัง ผ่านการค้นหาใหม่หรือการเรียก /extract ส่วน target_refused, blocked_by_robots และ blocked_by_site_policy เป็นการสิ้นสุด
import os
import random
import time
import requests
API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
RETRY_ON = {429, 502, 504}
def search(body, attempts=5):
delay = 1.0
for attempt in range(1, attempts + 1):
resp = requests.post(API, headers=HEADERS, json=body, timeout=60)
if resp.status_code == 200:
return resp.json()
err = resp.json().get("error", {})
if resp.status_code not in RETRY_ON or attempt == attempts:
raise RuntimeError(f"{resp.status_code} {err.get('code')}: {err.get('message')}")
time.sleep(delay + random.uniform(0, delay / 2))
delay = min(delay * 2, 30)
data = search({"q": "how to rotate api keys without downtime"})
unread = [r["url"] for r in data["results"] if r["content_status"] not in ("ok", "not_requested")]
print("credits:", data["credits_used"], "| pages not read:", unread)
เมื่อเจอ 402 insufficient_credits ควรทำอย่างไร
หยุดและเติมเครดิต การเรียกไม่ได้ทำงานและไม่มีค่าใช้จ่าย เพื่อหลีกเลี่ยงการหยุดกลางงานยาว ให้ตรวจสอบยอดคงเหลือก่อนด้วย GET https://llmwebsearch.com/api/v1/credits ซึ่งฟรี และเทียบกับจำนวนการค้นหาที่คุณวางแผนไว้ อย่าลืมว่าการค้นหาที่มี read มากกว่า 3 ต้องใช้ 2 เครดิต
เครดิตมาจาก pack ที่ซื้อด้วยยอดคงเหลือคริปโตของคุณ เครดิตการค้นหาไม่มีวันหมดอายุ: สิ่งที่คุณไม่ได้ใช้ในเดือนนี้ยังอยู่ให้ใช้ในปีหน้า
ทำอย่างไรให้อยู่ภายใต้ rate limit
จำกัดจำนวนการเรียกที่ทำงานพร้อมกันในโค้ดของคุณเอง ทุกบัญชีมีขีดจำกัดการเรียกต่อนาที แสดงในแดชบอร์ด; แจ้งฝ่ายสนับสนุนและสามารถเพิ่มได้ pool ของ worker ขนานกันขนาดเล็ก สี่ถึงแปดตัวสำหรับ agent ส่วนใหญ่ ช่วยให้ก้าวหน้าได้อย่างสม่ำเสมอโดยไม่เกิด burst หน้า Python และ Node.js ต่างแสดง pool แบบนี้
เมื่อคุณเจอ 429 ให้หยุดพักก่อนจะลองครั้งถัดไป แทนที่จะยิงทันที การลองใหม่ทันทีเพียงเพิ่มจำนวนการเรียกที่ถูกปฏิเสธ
Errors: คำถามที่พบบ่อย
การค้นหาที่ทุกหน้าถูกปฏิเสธยังคิดเครดิตหรือไม่
ใช่ ถ้าตัวการค้นหาทำงานได้ คุณยังได้ผลลัพธ์ที่จัดอันดับแล้วและ snippet ราคาของการค้นหาไม่ได้ขึ้นอยู่กับว่าอ่านหน้าเว็บได้กี่หน้า
401 เกิดจาก API key ที่ถูกเพิกถอนหรือไม่
อาจเป็นได้ API key ที่ถูกเพิกถอน การพิมพ์ผิด การขาด prefix Bearer หรือ header ที่ไปไม่ถึงเรา ล้วนให้ 401 invalid_api_key ทั้งสิ้น สร้าง API key หนึ่งอันต่อเอเจนต์ แอป หรือเพื่อนร่วมทีม และเพิกถอนอันใดก็ได้จากแดชบอร์ดโดยไม่กระทบอันอื่น
ทำไมหน้าเว็บถึงคืนค่า fetch_timeout
หน้าเว็บถูกอ่านแบบขนาน และหน้าที่ใช้เวลานานกว่า 15 วินาทีจะถูกส่งคืนโดยไม่มีเนื้อหา เพื่อไม่ให้ฉุดคำตอบทั้งหมดไว้ เว็บไซต์ที่ช้าบางครั้งจะตอบกลับในการลองครั้งถัดไป
ฉันดูการเรียกที่ล้มเหลวของตัวเองได้ไหม
ได้ ประวัติใน dashboard แสดงรายการการเรียกของคุณเป็นเวลา 30 วัน รวมถึงรายการที่ล้มเหลว พร้อมสถานะและเครดิต การเรียกที่ล้มเหลวแสดง 0 เครดิต