Tools

การดึงข้อมูลจากเว็บ

web_fetch ส่งคำขอ HTTP GET แบบธรรมดาและแยกเนื้อหาที่อ่านได้ (HTML เป็น markdown หรือข้อความ) โดย ไม่ เรียกใช้ JavaScript สำหรับเว็บไซต์ที่ใช้ JS มากหรือ หน้าที่ป้องกันด้วยการเข้าสู่ระบบ ให้ใช้ เว็บเบราว์เซอร์ แทน

เริ่มต้นอย่างรวดเร็ว

เปิดใช้งานโดยค่าเริ่มต้น ไม่ต้องกำหนดค่า:

javascript
await web_fetch({ url: "https://example.com/article" });

พารามิเตอร์ของเครื่องมือ

urlstringrequired

URL ที่จะดึงข้อมูล เฉพาะ http(s)

extractMode'markdown' | 'text'default: markdown

รูปแบบเอาต์พุตหลังจากแยกเนื้อหาหลัก

maxCharsnumber

ตัดเอาต์พุตให้เหลือจำนวนอักขระเท่านี้ โดยจำกัดไว้ที่ tools.web.fetch.maxCharsCap

ผลลัพธ์

web_fetch ส่งคืนผลลัพธ์แบบมีโครงสร้างปิดที่มีฟิลด์ต่อไปนี้:

  • ข้อมูลเมตาของคำขอ: url, finalUrl, status, extractMode และ extractor
  • ข้อมูลเมตาของการตอบกลับที่ไม่บังคับ: contentType, title และ warning (ละไว้เมื่อไม่มี)
  • ข้อมูลเมตาของเนื้อหาที่ครอบไว้: externalContent, truncated, length, rawLength, fetchedAt, tookMs และ text
  • cached: true ที่ไม่บังคับเมื่อพบข้อมูลในแคช
  • spill: { path, chars, truncated? } ที่ไม่บังคับเมื่อเขียนเนื้อหาที่ถูกตัด ลงในไฟล์ชั่วคราวส่วนตัว โดยมี truncated เฉพาะเมื่อไฟล์นั้นมี เนื้อหาต้นฉบับเพียงบางส่วน

length คือความยาวของ text ที่ครอบไว้ ส่วน rawLength คือความยาวของเนื้อหาที่แยกแล้ว ก่อนครอบเนื้อหาภายนอก

วิธีการทำงาน

  • ดึงข้อมูล

    ส่งคำขอ HTTP GET พร้อม User-Agent ที่คล้าย Chrome และส่วนหัว Accept-Language บล็อกชื่อโฮสต์ส่วนตัว/ภายในและตรวจสอบการเปลี่ยนเส้นทางซ้ำ

  • แยกเนื้อหา

    เรียกใช้ Readability (การแยกเนื้อหาหลัก) กับการตอบกลับ HTML

  • ทางเลือกสำรอง (ไม่บังคับ)

    หาก Readability ล้มเหลวและมีผู้ให้บริการดึงข้อมูล ให้ลองใหม่ผ่าน ผู้ให้บริการนั้น (เช่น โหมดหลบเลี่ยงบอตของ Firecrawl)

  • แคช

    ผลลัพธ์จะถูกเก็บในแคชเป็นเวลา 15 นาที (กำหนดค่าได้) เพื่อลดการ ดึงข้อมูล URL เดิมซ้ำ

  • การอัปเดตความคืบหน้า

    web_fetch แสดงบรรทัดความคืบหน้าแบบสาธารณะเฉพาะเมื่อการดึงข้อมูลยังคงรอดำเนินการ หลังจากผ่านไปห้าวินาที:

    text
    กำลังดึงเนื้อหาของหน้า...

    การพบข้อมูลในแคชอย่างรวดเร็วและการตอบกลับจากเครือข่ายที่รวดเร็วจะเสร็จก่อนตัวจับเวลาทำงาน จึง ไม่แสดงบรรทัดความคืบหน้า การยกเลิกการเรียกจะล้างตัวจับเวลา บรรทัด ความคืบหน้าเป็นเพียงสถานะ UI ของช่องทางและจะไม่มีเนื้อหาของหน้าที่ดึงมา

    การกำหนดค่า

    json5
    {  tools: {    web: {      fetch: {        enabled: true, // ค่าเริ่มต้น: true        provider: "firecrawl", // ไม่บังคับ; ละไว้เพื่อตรวจหาอัตโนมัติ        maxChars: 20000, // จำนวนอักขระเอาต์พุตเริ่มต้น; จำกัดด้วย maxCharsCap        maxCharsCap: 20000, // ขีดจำกัดสูงสุดตายตัวสำหรับพารามิเตอร์ maxChars        maxResponseBytes: 750000, // ขนาดดาวน์โหลดสูงสุดก่อนตัดทอน (32000-10000000)        timeoutSeconds: 30,        cacheTtlMinutes: 15,        maxRedirects: 3,        useTrustedEnvProxy: false, // ให้พร็อกซีสภาพแวดล้อม HTTP(S) ที่เชื่อถือได้แก้ไข DNS        readability: true, // ใช้การแยกเนื้อหาด้วย Readability        userAgent: "Mozilla/5.0 ...", // แทนที่ User-Agent        ssrfPolicy: {          allowRfc2544BenchmarkRange: true, // เลือกใช้สำหรับพร็อกซี IP ปลอมที่เชื่อถือได้ซึ่งใช้ 198.18.0.0/15          allowIpv6UniqueLocalRange: true, // เลือกใช้สำหรับพร็อกซี IP ปลอมที่เชื่อถือได้ซึ่งใช้ fc00::/7        },      },    },  },}

    ทางเลือกสำรอง Firecrawl

    หากการแยกเนื้อหาด้วย Readability ล้มเหลว web_fetch สามารถใช้ Firecrawl เป็นทางเลือกสำรองเพื่อหลบเลี่ยงบอตและแยกเนื้อหาได้ดีขึ้น:

    json5
    {  tools: {    web: {      fetch: {        provider: "firecrawl", // ไม่บังคับ; ละไว้เพื่อตรวจหาอัตโนมัติจากข้อมูลประจำตัวที่มี      },    },  },  plugins: {    entries: {      firecrawl: {        enabled: true,        config: {          webFetch: {            // apiKey: "fc-...", // ไม่บังคับ; ละไว้สำหรับสิทธิ์เริ่มต้นแบบไม่ใช้คีย์            baseUrl: "https://api.firecrawl.dev",            onlyMainContent: true,            maxAgeMs: 172800000, // ระยะเวลาแคช (2 วัน)            timeoutSeconds: 60,          },        },      },    },  },}

    plugins.entries.firecrawl.config.webFetch.apiKey ไม่บังคับและรองรับออบเจ็กต์ SecretRef การกำหนดค่า tools.web.fetch.firecrawl.* แบบเดิมจะย้ายไปยัง plugins.entries.firecrawl.config.webFetch โดยอัตโนมัติผ่าน openclaw doctor --fix

    พฤติกรรมรันไทม์ปัจจุบัน:

    • tools.web.fetch.provider เลือกผู้ให้บริการทางเลือกสำรองสำหรับการดึงข้อมูลอย่างชัดเจน
    • หากละ provider ไว้ OpenClaw จะตรวจหาผู้ให้บริการดึงข้อมูลเว็บรายแรกที่พร้อมใช้งาน จากข้อมูลประจำตัวที่กำหนดค่าโดยอัตโนมัติ web_fetch ที่ไม่ได้อยู่ในแซนด์บ็อกซ์สามารถใช้ Plugin ที่ติดตั้งซึ่งประกาศ contracts.webFetchProviders และลงทะเบียน ผู้ให้บริการที่ตรงกันขณะรันไทม์ ปัจจุบัน Plugin Firecrawl อย่างเป็นทางการมี ทางเลือกสำรองนี้
    • การเรียก web_fetch ในแซนด์บ็อกซ์อนุญาตผู้ให้บริการที่รวมมาให้ รวมถึงผู้ให้บริการที่ติดตั้ง ซึ่งผ่านการตรวจสอบแหล่งที่มาจาก npm อย่างเป็นทางการหรือ ClawHub ปัจจุบันอนุญาต Plugin Firecrawl อย่างเป็นทางการ ส่วน Plugin ดึงข้อมูลภายนอกจากบุคคลที่สามยังคงไม่รวมอยู่
    • หากปิดใช้งาน Readability web_fetch จะข้ามตรงไปยัง ทางเลือกสำรองของผู้ให้บริการที่เลือก หากไม่มีผู้ให้บริการ ระบบจะปฏิเสธการทำงาน

    พร็อกซีสภาพแวดล้อมที่เชื่อถือได้

    หากการติดตั้งใช้งานกำหนดให้ web_fetch ต้องผ่านพร็อกซี HTTP(S) ขาออกที่เชื่อถือได้ ให้ตั้งค่า tools.web.fetch.useTrustedEnvProxy: true

    ในโหมดนี้ OpenClaw ยังคงใช้การตรวจสอบ SSRF ตามชื่อโฮสต์ก่อนส่ง คำขอ แต่อนุญาตให้พร็อกซีแก้ไข DNS แทนการตรึง DNS ภายในเครื่อง เปิดใช้งานเฉพาะเมื่อพร็อกซีอยู่ภายใต้การควบคุมของผู้ปฏิบัติงานและบังคับใช้ นโยบายขาออกหลังจากแก้ไข DNS แล้ว

    ขีดจำกัดและความปลอดภัย

    • maxChars ถูกจำกัดไว้ที่ tools.web.fetch.maxCharsCap (ค่าเริ่มต้น 20000)
    • เนื้อหาการตอบกลับถูกจำกัดไว้ที่ maxResponseBytes (ค่าเริ่มต้น 750000 จำกัดอยู่ในช่วง 32000-10000000) ก่อนแยกวิเคราะห์ การตอบกลับที่มีขนาดเกินจะถูกตัดพร้อมคำเตือน
    • ชื่อโฮสต์ส่วนตัว/ภายในถูกบล็อก
    • tools.web.fetch.ssrfPolicy.allowRfc2544BenchmarkRange และ tools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange เป็นตัวเลือกแบบเจาะจง สำหรับสแต็กพร็อกซี IP ปลอมที่เชื่อถือได้ ให้เว้นค่าไว้ เว้นแต่พร็อกซีเป็นเจ้าของ ช่วงสังเคราะห์เหล่านั้นและบังคับใช้นโยบายปลายทางของตนเอง
    • การเปลี่ยนเส้นทางได้รับการตรวจสอบและจำกัดด้วย maxRedirects (ค่าเริ่มต้น 3)
    • useTrustedEnvProxy เป็นตัวเลือกที่ต้องเปิดใช้อย่างชัดเจน และควรเปิดเฉพาะสำหรับ พร็อกซีที่ควบคุมโดยผู้ปฏิบัติงานซึ่งยังคงบังคับใช้นโยบายขาออกหลังจากแก้ไข DNS
    • web_fetch ทำงานแบบพยายามให้ดีที่สุด -- บางเว็บไซต์ต้องใช้ เว็บเบราว์เซอร์

    โปรไฟล์เครื่องมือ

    หากใช้โปรไฟล์เครื่องมือหรือรายการอนุญาต ให้เพิ่ม web_fetch หรือ group:web:

    json5
    {  tools: {    allow: ["web_fetch"],    // หรือ: allow: ["group:web"]  (รวม web_fetch, web_search และ x_search)  },}

    เนื้อหาที่เกี่ยวข้อง

    • การค้นหาเว็บ -- ค้นหาเว็บด้วยผู้ให้บริการหลายราย
    • เว็บเบราว์เซอร์ -- ระบบอัตโนมัติของเบราว์เซอร์เต็มรูปแบบสำหรับเว็บไซต์ที่ใช้ JS มาก
    • Firecrawl -- เครื่องมือค้นหาและดึงข้อมูลของ Firecrawl
    Was this useful?
    On this page

    On this page