Tool: read_image — Progressive Direct Vision: ให้ main VLM เห็นภาพต้นฉบับก่อน แล้วค่อยเรียก sensor assist

ภาพประกอบ: Tool: read_image — Progressive Direct Vision: ให้ main VLM เห็นภาพต้นฉบับก่อน แล้วค่อยเรียก sensor assist

read_image ของ ENDEAVOR LOCAL AGENT TH เป็น capability-aware image tool: ค่า default ปัจจุบันคือ Qwen3-14B แบบ text-only ซึ่งใช้ full OCR fallback อัตโนมัติ ส่วน Qwen3.5-9B-4bit เป็น compact VLM สำหรับ Mac RAM 16GB และ Qwen3.6-35B เป็นตัวเลือกคุณภาพสูง; เมื่อ active model รองรับภาพ การเรียกครั้งแรกจะใช้ progressive direct vision โดยส่ง original image ทั้งภาพให้ main VLM มองก่อน แล้วค่อยเรียก sensor assist เมื่อจำเป็น

หลักคิดคือ overview first, sensor later และเมื่อมีหลายภาพให้เตรียมข้อมูลแบบขนานโดยยังรักษาลำดับภาพเดิม

Flow ปัจจุบัน

read_image(source)
      ↓
ส่ง original image ทั้งภาพให้ main VLM
      ↓
Agent มอง pixels และเข้าใจภาพรวม
      ↓
ถ้าต้องการรายละเอียดเพิ่ม
      ├─ detail="text"  → OCR / table / QR assist
      ├─ detail="chart" / "slide"
      ├─ find="..."
      └─ region + zoom

tool ไม่ได้มี LLM อีกตัวอยู่ข้างใน และไม่สร้าง semantic prompt เช่น “อธิบายแมว” หรือ “วิเคราะห์กราฟนี้” เอง หน้าที่ของ tool คือ publish ภาพ/sensor data เข้า context ส่วนความหมายของภาพให้ main agent ตัดสินจากคำถามของผู้ใช้

อ่านหลายภาพพร้อมกันได้สูงสุด 10 ภาพ

source รับ list ของภาพได้ 1–10 ภาพต่อ batch ทั้ง local path, URL และ screen ตาม contract ของ tool โดย runtime เตรียม/resolve/encode ภาพหลายใบพร้อมกันด้วย worker pool แล้วประกอบผลกลับตามลำดับ input เดิม

read_image(
  source=["page-1.png", "page-2.png", "page-3.png"],
  ocr=[1, 3]
)

ocr ใน batch เลือกได้สามแบบ:

  • false — ไม่ขอ OCR เพิ่ม
  • true — ขอ OCR ทุกภาพ
  • [1, 3, ...] — ขอ OCR เฉพาะหมายเลขภาพที่ต้องการ (1-based)

สำหรับ vision-capable model ถ้าภาพนั้นยังไม่เคยผ่าน overview ใน turn ปัจจุบัน ระบบจะ ส่ง original image ก่อน และ defer OCR ที่ร้องขอไว้จน model ได้เห็น pixels แล้ว จากนั้นเรียก batch เดิมซ้ำด้วย selector เดิมเพื่อรับ OCR assist ส่วน text-only model เช่น Qwen3-14B จะทำ full OCR fallback ของแต่ละภาพแบบขนานโดยไม่ publish image block ให้โมเดลที่มองภาพไม่ได้

batch mode จงใจจำกัดไว้ที่ overview + OCR selection; งาน find, region + zoom, detail="chart", detail="slide" หรือ detail="text" เชิงลึกยังใช้ single-image call เพื่อรักษา progressive state ของแต่ละภาพให้ชัดเจน

ทำไมต้องเห็น original ก่อน

ถ้าเริ่มด้วย crop/zoom หรือ OCR ทันที Agent อาจเสียบริบทของภาพทั้งภาพ เช่น:

  • เห็นตัวเลขบนกราฟ แต่ไม่รู้ว่าเป็น series ไหน
  • zoom ปุ่มเล็กก่อนรู้ layout ของหน้าจอ
  • OCR อ่าน label ได้ แต่ไม่เห็นเส้น/สี/ตำแหน่ง
  • ตีความ slide จากข้อความอย่างเดียวแล้วพลาด visual hierarchy

ดังนั้น runtime มี progressive guard: ก่อนใช้ find หรือ region + zoom ต้องผ่าน overview ของ source นั้นก่อน

Qwen3.5-9B และ Qwen3.6-35B: direct vision จริง

ทั้ง compact VLM mlx-community/Qwen3.5-9B-4bit และ optional high-quality model unsloth/Qwen3.6-35B-A3B-UD-MLX-4bit รับ image input โดยตรง ภาพจึงถูกส่งเข้า main model แทนการแปลงเป็น OCR ก่อนเสมอ

Agent จึงทำงานกับข้อมูลที่ OCR อย่างเดียวให้ไม่ได้ เช่น:

  • บรรยายภาพถ่าย
  • ดู layout
  • อ่านแนวโน้มของกราฟ
  • แยกองค์ประกอบใน diagram
  • มอง visual state ของ UI

OCR ยังมีประโยชน์ แต่เป็น assist ไม่ใช่สายตาหลัก

Qwen3-14B default สำหรับเครื่อง 24GB+ ใช้ OCR fallback

ก่อนใช้ vision runtime มี capability detection

ถ้า endpoint/model ปฏิเสธ image input read_image จะไม่ปล่อยให้ Agent เดาภาพ แต่เปลี่ยนเป็น:

[TEXT-ONLY IMAGE FALLBACK]
→ full OCR ของ original image
→ ใส่ข้อความกลับเข้า context ใน turn เดียว

ดังนั้น 14B ยังอ่านเอกสาร/สกรีนช็อตที่มีข้อความได้ แต่ไม่ควรอ้างว่ามอง pixel หรือเข้าใจ visual structure แบบ VLM

Sensor assist มีอะไรบ้าง

หลังจาก Agent เห็น original แล้ว สามารถเรียกเพิ่มตามงาน:

  • OCR — Apple Vision Framework รองรับข้อความไทย
  • table assist — ช่วยถอดข้อมูลตาราง
  • QR — อ่าน QR เมื่อมี
  • chart / slide detail — เพิ่มข้อมูลสำหรับภาพประเภทกราฟหรือสไลด์
  • find / region / zoom — เจาะตำแหน่งเฉพาะเมื่อภาพรวมไม่พอ

sensor output มีสถานะเป็นข้อมูลช่วย transcription/inspection ส่วน pixels ยังเป็น source หลักเมื่อ model รองรับ vision

รองรับ source หลายแบบ

read_image ใช้ได้กับ:

  • local image path
  • URL ภาพ
  • source="screen" สำหรับ screenshot หน้าจอปัจจุบัน

ภาพจาก URL ถูกดาวน์โหลดเป็นไฟล์ชั่วคราวตาม lifecycle ของ tool และ screenshot ใช้สิทธิ์ Screen Recording ของ macOS

ต่างจาก computer อย่างไร

ทั้งสอง tool ใช้ direct vision ได้ แต่เป็นคนละ state owner:

  • read_image — วิเคราะห์ image/document/chart/screenshot ที่ผู้ใช้ต้องการ “ดู”
  • computer — observe state ของ desktop เพื่อ ทำ action จริง แล้ว re-observe หลัง action

แยก state กันเพื่อไม่ให้ภาพเก่าจากการอ่านไฟล์ถูกนำไปใช้เป็น desktop state โดยไม่ตั้งใจ

ทำไมเรื่องนี้สำคัญ

design นี้ทำให้ Agent TH ใช้ความสามารถของ VLM โดยตรงโดยไม่ต้องซ่อนโมเดล vision อีกตัวไว้ใน tool และยังรักษา compatibility กับ model text-only:

  • vision model → original pixels first
  • batch → เตรียมภาพได้พร้อมกันสูงสุด 10 ภาพ แต่คืนผลตามลำดับเดิม
  • selective OCR → เลือกเฉพาะภาพที่ต้องอ่านข้อความได้
  • text-only model → full OCR fallback ต่อภาพแบบขนาน
  • detail sensors → เรียกเมื่อจำเป็น
  • semantic reasoning → อยู่ที่ main agent

นี่เป็นรูปแบบที่ทำให้ tool เล็กลง แต่ context ที่ Agent เห็นตรงกับสิ่งที่ผู้ใช้ให้มามากขึ้น

อ่านเพิ่มเติม

ความคิดเห็น

กำลังโหลดความคิดเห็น...