• แซนด์บ็อกซ์น้ำหนักเบาสำหรับการรันโค้ดของเอเจนต์ AI ให้ความเร็วในการเริ่มต้น เร็วกว่า 100 เท่า เมื่อเทียบกับคอนเทนเนอร์ และมีประสิทธิภาพการใช้หน่วยความจำดีกว่า 10–100 เท่า
  • สร้างบน เทคโนโลยี isolate ของเอนจิน V8 JavaScript เริ่มทำงานได้ภายในไม่กี่มิลลิวินาทีและใช้หน่วยความจำเพียงไม่กี่เมกะไบต์ จึงสามารถสร้างและทิ้งแซนด์บ็อกซ์ใหม่ได้ในทุกคำขอ
  • ใช้แนวทาง Code Mode ที่เอเจนต์ เขียนและรันโค้ด TypeScript ได้โดยตรง แทนการเรียกใช้เครื่องมือ ช่วยลดการใช้โทเค็นได้สูงสุด 81%
  • มีไลบรารีด้านความปลอดภัยและยูทิลิตี เช่น การกรอง HTTP, credential injection, ระบบไฟล์เสมือน เป็นต้น เพื่อสร้าง ecosystem สำหรับการพัฒนาเอเจนต์
  • เป็นการเปลี่ยนผ่านโครงสร้างพื้นฐานที่ก้าวข้ามข้อจำกัดด้านต้นทุน ความหน่วง และการขยายตัวของแซนด์บ็อกซ์แบบคอนเทนเนอร์ ทำให้ บริการเอเจนต์ระดับผู้บริโภคจำนวนมาก เป็นไปได้

เบื้องหลัง: ปัญหาความปลอดภัยของการรันโค้ดเอเจนต์

  • หากเอเจนต์ (หรือเซิร์ฟเวอร์ MCP) ต้องรันโค้ดที่ AI สร้างขึ้นสด ๆ โค้ดนั้นต้องทำงานอยู่ในสภาพแวดล้อมที่ปลอดภัย
  • หากรันตรงในแอปด้วย eval() ผู้ใช้ไม่หวังดีอาจแทรกช่องโหว่ผ่าน prompt injection ได้
  • จึงจำเป็นต้องมี แซนด์บ็อกซ์ที่แยกออกจากกัน จากทั้งตัวแอปพลิเคชันและโลกภายนอก และอนุญาตเฉพาะความสามารถบางอย่างที่โค้ดต้องเข้าถึงเท่านั้น

ข้อจำกัดของแนวทางคอนเทนเนอร์แบบเดิม

  • ปัจจุบันอุตสาหกรรมส่วนใหญ่ใช้ คอนเทนเนอร์ บน Linux เป็นแซนด์บ็อกซ์
  • คอนเทนเนอร์ใช้เวลาบูตหลายร้อยมิลลิวินาที และต้องใช้หน่วยความจำ หลายร้อยเมกะไบต์ ในการทำงาน
  • เพื่อหลีกเลี่ยงความหน่วง จึงต้องคงสถานะวอร์ม (warm) ไว้ และหากนำคอนเทนเนอร์เดิมกลับมาใช้กับหลายงาน ความปลอดภัยก็จะลดลง
  • ในระดับ ผู้บริโภคจำนวนมาก ที่ผู้ใช้ปลายทางทุกคนมีเอเจนต์ของตัวเอง และแต่ละเอเจนต์เขียนโค้ดได้ คอนเทนเนอร์เพียงอย่างเดียวไม่เพียงพอ

Dynamic Worker Loader: แซนด์บ็อกซ์น้ำหนักเบา

  • API ที่ทำให้ Cloudflare Worker สามารถ ระบุโค้ดขณะรันไทม์เพื่อสร้าง Worker ใหม่ขึ้นมาแบบทันทีภายในแซนด์บ็อกซ์ของตัวเอง
  • ถูกเปิดตัวเป็นฟีเจอร์ทดลองในโพสต์ Code Mode เมื่อเดือนกันยายนที่ผ่านมา และตอนนี้ เปิดเบตาให้ผู้ใช้ Workers แบบชำระเงินทุกคน
  • ตอนสร้าง Worker สามารถกำหนดโค้ดผ่าน compatibilityDate, mainModule, modules, ส่ง RPC stub ผ่าน env และใช้ globalOutbound เพื่อบล็อกหรือดักจับการเข้าถึงอินเทอร์เน็ตได้

เร็วกว่า 100 เท่า

  • Dynamic Workers ใช้ V8 isolate ซึ่งเป็นกลไก sandboxing เดียวกับที่ Cloudflare Workers ใช้งานมาตลอด 8 ปี
  • isolate คืออินสแตนซ์ของ เอนจินรัน JavaScript V8 เดียวกับที่ Google Chrome ใช้
  • เริ่มต้นได้ใน ไม่กี่มิลลิวินาที และใช้หน่วยความจำเพียง ไม่กี่เมกะไบต์ จึงเร็วกว่าและประหยัดหน่วยความจำกว่าคอนเทนเนอร์อย่างมาก ประมาณ 100 เท่า และ 10–100 เท่าตามลำดับ
  • จึงสามารถสร้าง isolate ใหม่สำหรับทุกคำขอของผู้ใช้ รันโค้ดหนึ่งชิ้น แล้วทิ้งได้ทันที

การขยายตัวแบบไร้ขีดจำกัด

  • ผู้ให้บริการแซนด์บ็อกซ์แบบคอนเทนเนอร์จำนวนมากมักกำหนดข้อจำกัดเรื่อง จำนวนแซนด์บ็อกซ์ที่รันพร้อมกันทั่วโลก และความเร็วในการสร้าง
  • Dynamic Worker Loader เป็น API ของเทคโนโลยีเดียวกับที่ใช้ขับเคลื่อนแพลตฟอร์มอยู่แล้ว จึงไม่มีข้อจำกัดแบบนั้น
  • รองรับการประมวลผล หนึ่งล้านคำขอต่อวินาที พร้อมกับโหลดแซนด์บ็อกซ์ Dynamic Worker แยกต่อคำขอเพื่อรันพร้อมกันได้

หน่วงแทบเป็นศูนย์

  • Dynamic Workers แบบใช้ครั้งเดียวมักรันอยู่บน เครื่องเดียวกันและเธรดเดียวกัน กับ Worker ที่สร้างมัน
  • ไม่จำเป็นต้องสื่อสารข้ามโลกเพื่อหาแซนด์บ็อกซ์ที่วอร์มไว้ล่วงหน้า แต่รันได้ทันที ณ จุดที่คำขอมาถึง
  • รองรับใน หลายร้อยโลเกชันทั่วโลก ของ Cloudflare

สภาพแวดล้อมรันเฉพาะ JavaScript

  • ข้อจำกัดเดียวเมื่อเทียบกับคอนเทนเนอร์คือ เอเจนต์ต้อง เขียน JavaScript
  • แม้ Workers จะรองรับ Python และ WebAssembly ในทางเทคนิคด้วย แต่สำหรับโค้ดชิ้นเล็ก ๆ ที่เอเจนต์สร้างสด JavaScript โหลดและรันได้เร็วกว่าอย่างมาก
  • LLM เชี่ยวชาญภาษาหลักทั้งหมดอยู่แล้ว และมี ข้อมูลฝึกของ JavaScript จำนวนมหาศาล
  • ด้วยธรรมชาติของเว็บ JavaScript จึงเป็น ภาษาที่ถูกออกแบบมาเพื่อการทำ sandboxing

API เครื่องมือที่นิยามด้วย TypeScript

  • MCP นิยามเพียงสคีมาการเรียกเครื่องมือแบบแบน ส่วน OpenAPI ใช้แทน REST API แต่ทั้งตัวสคีมาและโค้ดเรียกใช้งานล้วนยืดยาว
  • สำหรับ API ที่เปิดให้ JavaScript ใช้งานได้ TypeScript คือคำตอบที่เหมาะที่สุดเพียงหนึ่งเดียว
  • อินเทอร์เฟซ TypeScript สามารถอธิบาย API ได้อย่างแม่นยำโดยใช้ โทเค็นน้อยกว่ามาก เมื่อเทียบกับสเปก OpenAPI เดียวกัน
  • Workers Runtime จะตั้งค่า Cap'n Web RPC bridge ระหว่างแซนด์บ็อกซ์กับโค้ดโฮสต์ให้อัตโนมัติ ทำให้เอเจนต์เรียก API ได้เหมือนเป็นไลบรารีภายในเครื่อง

การกรอง HTTP และ credential injection

  • ใช้ตัวเลือก globalOutbound เพื่อ ลงทะเบียน callback สำหรับคำขอ HTTP ทั้งหมด ทำการตรวจสอบ เขียนใหม่ ใส่คีย์ยืนยันตัวตน หรือบล็อกคำขอได้
  • credential injection (token injection): เมื่อเอเจนต์ส่งคำขอ HTTP ไปยังบริการที่ต้องยืนยันตัวตน ระบบจะเติม credential ลงในคำขอขาออกโดยที่ตัวเอเจนต์เองไม่รู้ความลับนั้น
  • มีประโยชน์เมื่อ API ที่รู้จักกันดีอยู่ในข้อมูลฝึกของเอเจนต์ หรือเมื่อรันไลบรารีที่อิง REST API ภายในแซนด์บ็อกซ์
  • แต่หากไม่มีข้อกำหนดเรื่องความเข้ากันได้ อินเทอร์เฟซ TypeScript RPC เหนือกว่า HTTP: ใช้โทเค็นน้อยกว่า โค้ดเรียกกระชับกว่า และจำกัดพื้นผิวของ API ได้แม่นยำกว่า

สถาปัตยกรรมความปลอดภัยที่ผ่านการพิสูจน์แล้ว

  • แซนด์บ็อกซ์แบบ isolate มี พื้นผิวการโจมตีที่ซับซ้อนกว่า ฮาร์ดแวร์เวอร์ชวลแมชชีน และบั๊กด้านความปลอดภัยของ V8 ก็เกิดบ่อยกว่าของไฮเปอร์ไวเซอร์ทั่วไป
  • Cloudflare มีประสบการณ์ในการดูแลความปลอดภัยของแพลตฟอร์มแบบ isolate มาราว 10 ปี
  • สามารถนำแพตช์ความปลอดภัยของ V8 ขึ้นโปรดักชันได้ภายในไม่กี่ชั่วโมง เร็วกว่า Chrome
  • ใช้ แซนด์บ็อกซ์ชั้นที่สอง แบบปรับแต่งเอง และระบบกั้น tenant แบบไดนามิกตามการประเมินความเสี่ยง
  • ขยายการป้องกันของ V8 sandbox ด้วยฟีเจอร์ฮาร์ดแวร์อย่าง MPK
  • ร่วมมือกับ TU Graz พัฒนาเทคนิคป้องกันใหม่ ๆ เช่น การป้องกัน Spectre
  • มีระบบสแกนและบล็อกแพตเทิร์นอันตรายโดยอัตโนมัติ รวมถึงเพิ่มระดับการ sandboxing ตามความเหมาะสม

ไลบรารีช่วยเหลือ

Code Mode (@cloudflare/codemode)

  • ไลบรารีที่ทำให้การนำโค้ดที่โมเดลสร้างมารันกับเครื่องมือ AI ผ่าน Dynamic Workers เป็นเรื่องง่าย
  • แกนหลักคือ DynamicWorkerExecutor() ซึ่งจัดการปัญหาการฟอร์แมตทั่วไปผ่านการปรับโค้ดให้เป็นมาตรฐาน และเข้าถึง fetcher ของ globalOutbound ได้โดยตรง
  • codeMcpServer({ server, executor }) ห่อ MCP Server เดิมแล้วแทนพื้นผิวของเครื่องมือด้วยเครื่องมือเดียวชื่อ code()
  • openApiMcpServer({ spec, executor, request }) รับสเปก OpenAPI และ executor แล้ว สร้าง MCP Server แบบสมบูรณ์อัตโนมัติ ที่มีเครื่องมือ search() และ execute()

การบันเดิล (@cloudflare/worker-bundler)

  • สร้าง โมดูลที่บันเดิลล่วงหน้า ตามที่ Dynamic Workers ต้องการ
  • หากให้ไฟล์ซอร์สและ package.json ระบบจะ resolve dependency จาก npm, บันเดิลด้วย esbuild และคืนค่า module map ที่ Worker Loader คาดหวัง
  • รองรับ แอปแบบฟูลสแตก ผ่าน createApp ที่บันเดิลทั้งเซิร์ฟเวอร์ Worker, JavaScript ฝั่งไคลเอนต์ และ static asset ไปพร้อมกัน
  • มีการเสิร์ฟ asset ในตัวที่จัดการ content type, ETag และการทำ SPA routing

การจัดการไฟล์ (@cloudflare/shell)

  • มอบ ระบบไฟล์เสมือน ให้เอเจนต์ภายใน Dynamic Worker
  • ใช้เมธอดแบบมีชนิดข้อมูลของอ็อบเจ็กต์ state เพื่ออ่าน เขียน ค้นหา แทนที่ diff, glob, query/update JSON, archive และอื่น ๆ
  • พื้นที่จัดเก็บสำรองไว้ใน Workspace แบบคงทน (SQLite + R2) ทำให้ไฟล์คงอยู่ข้ามการรันได้
  • งานขนาดใหญ่ เช่น searchFiles, replaceInFiles, planEdits ช่วย ลด RPC round-trip ให้ต่ำสุด — เรียกครั้งเดียวแทนการวนทีละไฟล์
  • การเขียนแบบแบตช์เป็น ทรานแซกชัน โดยปริยาย: หากมีรายการใดล้มเหลว การเขียนก่อนหน้าจะถูก rollback อัตโนมัติ
  • มี TypeScript type declaration ที่พรีบิลต์ไว้แล้วและเทมเพลต system prompt ให้พร้อม

กรณีการใช้งาน

การใช้งาน Code Mode

  • แทนที่จะเรียกเครื่องมือแบบลำดับขั้น เอเจนต์สามารถ เขียนฟังก์ชัน TypeScript เพียงตัวเดียว เพื่อเชื่อมการเรียกหลาย API แล้วรันใน Dynamic Worker ก่อนส่งกลับเฉพาะผลลัพธ์สุดท้าย
  • เนื่องจากมีเพียงผลลัพธ์ ไม่ใช่ขั้นตอนกลาง ที่เข้าสู่ context window จึง ลดทั้งความหน่วงและการใช้โทเค็น
  • Cloudflare MCP server ถูกสร้างด้วยแนวทางนี้ โดยเปิดให้เข้าถึง Cloudflare API ทั้งหมดด้วย เพียง 2 เครื่องมือ (search, execute) และใช้ไม่ถึง 1,000 โทเค็น

สร้างระบบอัตโนมัติแบบกำหนดเอง

  • Zite กำลังสร้างแพลตฟอร์มแอปที่ผู้ใช้โต้ตอบผ่านอินเทอร์เฟซแชต
  • LLM เขียน TypeScript อยู่เบื้องหลังเพื่อ สร้างแอป CRUD, เชื่อมต่อ Stripe, Airtable, Google Calendar และรันตรรกะฝั่งแบ็กเอนด์
  • แต่ละระบบอัตโนมัติจะรันใน Dynamic Worker ของตัวเอง และเข้าถึงได้เฉพาะ บริการและไลบรารีที่จำเป็นต่อ endpoint นั้นเท่านั้น
  • Antony Toron, CTO ของ Zite กล่าวว่าเป็น "ชั้นการรันที่ทันที แยกขาด และปลอดภัย" ซึ่งให้ประสิทธิภาพด้านความเร็วและการรองรับไลบรารีดีที่สุดในทุกแพลตฟอร์มที่พวกเขา benchmark และปัจจุบันรองรับคำขอรันงานหลายล้านครั้งต่อวัน

การรันแอปพลิเคชันที่ AI สร้าง

  • นำไปใช้สร้างแพลตฟอร์มที่ให้ AI สร้างแอปพลิเคชันเต็มรูปแบบ
  • แต่ละแอปจะถูก สร้างแบบ on-demand และเก็บไว้ใน cold storage จนกว่าจะถูกเรียกอีกครั้ง
  • เวลาเริ่มต้นที่รวดเร็วช่วยให้ พรีวิวการเปลี่ยนแปลง ระหว่างการพัฒนาอย่างต่อเนื่องทำได้ง่าย
  • สามารถบล็อกหรือดักจับคำขอเครือข่ายจากโค้ดที่สร้างขึ้น เพื่อรับประกัน การรันแอปที่ AI สร้างอย่างปลอดภัย

ราคา

  • Workers ที่โหลดแบบไดนามิกคิดค่าบริการ $0.002 ตามจำนวน Worker ที่โหลดไม่ซ้ำต่อวัน (ยังไม่รวมค่า CPU time และค่าคำขอของ Workers ปกติ)
  • สำหรับกรณีใช้งาน AI-generated "Code Mode" ซึ่ง Worker ทั้งหมดเป็น แบบใช้ครั้งเดียว จึงคิด $0.002 ต่อการโหลด และโดยทั่วไปถือว่าเล็กน้อยเมื่อเทียบกับต้นทุน inference สำหรับการสร้างโค้ด
  • ยกเว้นค่าบริการ $0.002 ในช่วงเบตา

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น