Coding Agent ของคุณแก้ไขค่าน้ำหนักโมเดลได้แล้ว: วิธีทำการทดลองใน Weight Space อย่างปลอดภัย

ให้ coding agent แก้ไขน้ำหนักโมเดลได้อย่างปลอดภัย Astra ของ MIT ยกระดับ Qwen3.5-0.8B บน MATH-500 จาก 7.9% เป็น 48.1% และลองรันแบบทดสอบเดียวกันในรูปแบบงานบนบอร์ด 5 งาน

Mia Parker

Mia Parker

4 พฤศจิกายน 2026

Coding Agent ของคุณแก้ไขค่าน้ำหนักโมเดลได้แล้ว: วิธีทำการทดลองใน Weight Space อย่างปลอดภัย

สรุปสั้น: ทีมงานที่ MIT CSAIL ให้โมเดลระดับแนวหน้าอ่านและแก้ไขค่าน้ำหนักของ Qwen3.5-0.8B ภายในแซนด์บ็อกซ์ Python โดยมีงบประมาณการทำ forward pass แบบตายตัว และบันทึกทุกขั้นตอนไว้อย่างครบถ้วน ผู้เขียนรายงานว่า MATH-500 เพิ่มขึ้นจาก 7.9% เป็น 48.1% คุณก็ปล่อยให้ coding agent แก้ไขค่าน้ำหนักโมเดลในแบบเดียวกันได้: ห่างานบนบอร์ด กำหนดงบประมาณไว้ในแต่ละงาน ให้ agent อีกตัวดูแลการประเมิน และให้คนเป็นผู้อนุมัติไฟล์ที่แก้ไขแล้ว

เมื่อวันที่ 2 พฤศจิกายน 2026 Rikiya Takehi, Jayden Teoh, Alex Zhang และ Omar Khattab ได้เผยแพร่ Sparks of Weight-Space Programming โมเดลที่ใช้ในการศึกษาของพวกเขาอย่าง GPT-6 Astra ได้เปิดเทนเซอร์ค่าน้ำหนัก เขียนโค้ด numpy และ PyTorch จัดการกับมัน ตั้งสมมติฐาน และแก้ไขตัวเลข 131,072 ตัวในโมเดลขนาด 0.8B พารามิเตอร์

พออ่านรายละเอียดการทดลองแล้วจะรู้สึกคุ้นเคย: แซนด์บ็อกซ์ งบประมาณการใช้เครื่องมือ บันทึกทุกพรอมป์และทุกเซลล์ที่รัน นั่นก็คือ coding agent ที่มี harness ครอบอยู่ และ harness นี่แหละคือส่วนที่ทีมของคุณลอกมาใช้ได้ตั้งแต่วันนี้

สิ่งที่ทีม MIT ทำ ในมุมของตัวเลข

การเขียนโปรแกรมในปริภูมิค่าน้ำหนัก (weight-space programming) หมายถึงการที่ LLM อ่านพารามิเตอร์ของเครือข่ายเป็นข้อมูล แล้วแก้ไขโดยตรง ไม่ต้องใช้ gradient descent และไม่ต้องรันเทรน บทความของ MIT รายงานผลนี้กับโมเดลขนาดเล็ก ภายใต้ข้อจำกัดเครื่องมือที่เข้มงวด และบันทึกทุกเทิร์น

ผลลัพธ์เด่นคือการแก้ไข Qwen3.5-0.8B:

ตัวชี้วัด (ตัวเลขจากผู้เขียน) โมเดลฐาน โมเดลที่แก้ไขแล้ว
MATH-500 7.9% 48.1%
GSM8K 13.8% 67.1%
IFEval 21.0% 62.3%
รอบที่ชนเพดาน 32,768 โทเคน 93.0% 33.1%

Astra สืบสาวนิสัยของโมเดลที่วนซ้ำจนโทเคนหมด ไปจนพบว่ามาจากทิศทางหนึ่ง (direction) ที่เขียนขึ้นโดย MLP ในเลเยอร์ที่ 15 และ 19 จากนั้นจึงลบทิศทางนั้นออกจากคอลัมน์เอาต์พุต 64 คอลัมน์ในแต่ละเลเยอร์ รวม 131,072 ค่าน้ำหนัก หรือคิดเป็น 0.016% ของโมเดล เช็กพอยต์ที่เผยแพร่อยู่ภายใต้สัญญาอนุญาต Apache-2.0 และการ์ดของมันระบุว่ามีเพียงสองเทนเซอร์ที่ต่างจากโมเดลฐาน คือเมทริกซ์ down_proj.weight ในสองเลเยอร์นั้น

ทำไม harness ถึงเป็นตัวตัดสินผลลัพธ์

มีสองข้อค้นพบในบทความที่สำคัญต่อทีมมากกว่าผลลัพธ์พาดหัวข่าว

งบประมาณเปลี่ยนผลลัพธ์ forward pass แต่ละครั้งเฉลี่ยจากแบตช์ 64 ซีเควนซ์ ด้วย 10 พาส MATH-500 ไปถึง 12.3% ด้วย 25 พาส ไปถึง 14.1% ด้วย 50 พาส ไปถึง 48.1% โมเดลเดิม งานเดิม แต่เพดานจำนวนครั้งที่ agent ทดลองไอเดียได้นั้นต่างกัน

เครื่องมือเปลี่ยนผลลัพธ์ เมื่อให้แค่ค่าน้ำหนักของ Gemma 3 270M สองเวอร์ชัน Astra ไม่สามารถบอกได้ว่าตัวไหนเป็นพวกประจบ (sycophantic) ในการลองทั้งสี่ครั้ง แต่เมื่อให้เครื่องมือที่คืนค่า attention weight จากข้อความไม่เกิน 16 ข้อความที่มันเขียนเอง มันชี้ตัวที่ประจบได้ถูกทั้งสามคู่

สรุปคือมีคันโยกสองตัว: agent ใช้จ่ายอะไรได้บ้าง และมันดูอะไรได้บ้าง ทั้งสองอย่างควรถูกเขียนไว้ก่อนเริ่มรัน

ข้อจำกัดก็ชัดเจนพอ ๆ กัน Astra ปรับปรุง Gemma 3 270M บน MATH-500 ไม่ได้: จากฐาน 6.8% การแก้ไขที่ดีที่สุดทำได้ 7.7% ผู้เขียนตีความว่านี่เป็นการแก้ไขที่ขจัดอุปสรรคออกไป ไม่ใช่การเพิ่มความสามารถที่โมเดลไม่มี พวกเขาเรียกข้อค้นพบเหล่านี้ว่ายังอยู่ในช่วงเริ่มต้น และหลายข้อมาจากการรันเพียงครั้งเดียว วางแผนการทดลองของคุณให้เป็นการทดสอบ ไม่ใช่การแก้ไขให้จบ

ทำอย่างไรให้ coding agent แก้ไขค่าน้ำหนักโมเดลได้อย่างปลอดภัย

การทดลองในปริภูมิค่าน้ำหนักที่ปลอดภัยมีคุณสมบัติห้าข้อ:

  1. ค่าน้ำหนักต้นฉบับเป็นแบบอ่านอย่างเดียวสำหรับ agent ทุกตัว
  2. งบประมาณ forward pass เป็นตัวเลขที่ระบุในงาน และถูกบังคับใช้โดยแซนด์บ็อกซ์
  3. ชุดประเมินที่ agent ฝ่ายแก้ไขเห็น แยกจากชุดรีเกรสชันที่ agent ฝ่ายตรวจสอบรัน
  4. log ของทุกรันผูกอยู่กับขั้นตอนที่มันสังกัด
  5. ต้องมีคนอนุมัติไฟล์ที่แก้ไขก่อนที่อะไรจะโหลดมันนอกแซนด์บ็อกซ์

Sharkly ไม่ได้นับ forward pass หรือตรวจสอบเทนเซอร์ สคริปต์แซนด์บ็อกซ์ของคุณต่างหากที่ทำหน้าที่นั้น และ runtime ที่คุณใช้ (Claude Code, Codex หรือ agent อื่นที่คุณรันอยู่แล้ว) เป็นตัวอ่านและแก้ไข Sharkly ทำหน้าที่ถืองานเอาไว้: ใครเป็นเจ้าของแต่ละขั้นตอน ใช้อะไรได้บ้าง ผลลัพธ์ที่ได้กลับมาคืออะไร และใครเป็นคนอนุมัติ ที่เก็บ log ของทีม MIT เองก็มีโฟลเดอร์ harness/ ที่บรรจุคอนฟิกูเรชันของ Codex และสคริปต์แซนด์บ็อกซ์ ซึ่งเป็นตัวอย่างอ้างอิงที่มีประโยชน์สำหรับฝั่งแซนด์บ็อกซ์

แผนภาพการทดลองในปริภูมิค่าน้ำหนักห้าขั้นตอน: การประเมินฐาน, การตั้งสมมติฐานภายใต้งบประมาณ forward pass, การแก้ไขในแซนด์บ็อกซ์, การประเมินซ้ำอย่างอิสระ และด่านมนุษย์ก่อนนำไฟล์ที่แก้ไขไปใช้

ขั้นที่ 1: ประเมินฐานของโมเดลที่ยังไม่ถูกแตะต้อง

งานแรกคือรันการประเมินของคุณบนเช็กพอยต์ต้นฉบับ และบันทึกคะแนนพร้อมจุดที่โมเดลล้มเหลว สำหรับ Qwen3.5-0.8B นั้น 93.0% ของการรันชนเพดานโทเคน งานตั้งสมมติฐานจำเป็นต้องใช้คำอธิบายความล้มเหลวนี้

ขั้นที่ 2: อ่านค่าน้ำหนักและเขียนสมมติฐาน

นี่คืองานที่มีงบประมาณกำกับ ใส่ตัวเลขลงในเนื้อความของงาน ในรูปแบบที่ agent อ่านผิดไม่ได้:

## Stage 2: Hypothesis from weights

Model: ./models/qwen3.5-0.8b-base (READ-ONLY, mounted ro)
Budget: 50 forward passes, batch 64. The sandbox stops at 50.
Tools: numpy, torch (CPU), forward() wrapper. No attention tool.
Inputs: Stage 1 failure notes (task COIN-xxx), GSM8K/MATH practice split only.
Output: one-page hypothesis naming layers, tensors and the direction to change,
plus the passes used. Do not write any weights in this stage.

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

ขั้นที่ 3: แก้ไขในสำเนาบนแซนด์บ็อกซ์

agent ฝ่ายแก้ไขจะแก้สำเนาของเช็กพอยต์และรายงาน diff มันไม่เคยได้สิทธิ์เขียนไฟล์ต้นฉบับ บน Sharkly การรันงานแต่ละครั้งจะได้ไดเรกทอรีแยกของตัวเอง และงานที่เกี่ยวกับรีโพซิทอรีสามารถใช้ worktree แยกต่อการรันหนึ่งครั้ง ได้ ดังนั้นขั้นที่ 3 จึงแตะต้องสิ่งที่ขั้นที่ 1 วัดไว้ไม่ได้

ขั้นที่ 4: ประเมินซ้ำอย่างอิสระโดย agent ฝ่ายตรวจสอบ

มอบหมายขั้นนี้ให้ agent ตัวอื่นที่ไม่ใช่ตัวที่ทำการแก้ไข มันจะรันการประเมินของขั้นที่ 1 ซ้ำ และเพิ่มชุดรีเกรสชันที่ฝ่ายแก้ไขไม่เคยเห็น หากคุณใช้ Crew หัวหน้าทีมสามารถส่งงานแก้ไขให้สมาชิกคนหนึ่ง และส่งงานประเมินซ้ำให้อีกคน รูปแบบนี้สอดคล้องกับ Crew แบบผสมโมเดลที่มีผู้ตรวจสอบแยกออกไป: agent ที่เขียนการเปลี่ยนแปลงไม่ใช่ agent ที่ให้คะแนนมัน

ฝ่ายแก้ไขปรับจูนกับสิ่งที่มันมองเห็นได้เท่านั้น ดังนั้นการเพิ่มขึ้นที่ปรากฏเฉพาะบนโจทย์เหล่านั้นจึงพิสูจน์อะไรได้น้อย

ขั้นที่ 5: ด่านมนุษย์ตรวจ diff

งานสุดท้ายจะส่งถึงมือคนพร้อมไฟล์แนบสามอย่าง: รายการเทนเซอร์ที่เปลี่ยนแปลง ตารางก่อนและหลัง และผลรีเกรสชันจากฝ่ายตรวจสอบ จะไม่มีอะไรโหลดเช็กพอยต์ที่แก้ไขนอกแซนด์บ็อกซ์จนกว่างานนี้จะถูกเลื่อน

สคริปต์สั้น ๆ นี้สร้างไฟล์แนบชิ้นแรก มันเปรียบเทียบเช็กพอยต์ safetensors สองไฟล์ และแสดงรายการเทนเซอร์ทุกตัวที่เปลี่ยนแปลง:

from safetensors import safe_open
import torch

BASE = "models/qwen3.5-0.8b-base/model.safetensors"
EDIT = "sandbox/qwen3.5-0.8b-edit/model.safetensors"

changed, total = [], 0
with safe_open(BASE, "pt") as a, safe_open(EDIT, "pt") as b:
    assert set(a.keys()) == set(b.keys()), "tensor names differ"
    for name in a.keys():
        x, y = a.get_tensor(name), b.get_tensor(name)
        total += x.numel()
        n = (x != y).sum().item()
        if n:
            changed.append((name, n, (x - y).abs().max().item()))

for name, n, dmax in changed:
    print(f"{name}: {n:,} weights changed, max |delta| {dmax:.4g}")
print(f"{sum(c[1] for c in changed):,} of {total:,} weights changed")

บนเช็กพอยต์ที่เผยแพร่ การ์ดโมเดลระบุว่าคุณควรเห็นเทนเซอร์ down_proj.weight แค่สองตัวเท่านั้น หากการแก้ไขของคุณไปแตะเทนเซอร์ที่สมมติฐานไม่ได้ระบุไว้ นั่นคือเหตุผลที่ควรทิ้งมัน

การรันบอร์ดบน Sharkly

นี่คือบอร์ดสำหรับการทดลองหนึ่งครั้ง แต่ละแถวคือหนึ่งงานที่มีผู้รับผิดชอบ สถานะ และประวัติการรันของตัวเอง

งาน ผู้รับผิดชอบ งบประมาณหรือด่าน เสร็จเมื่อ
1. ประเมินฐาน agent ฝ่ายประเมิน ใช้เฉพาะชุดประเมิน โพสต์คะแนนและบันทึกความล้มเหลวแล้ว
2. ตั้งสมมติฐานจากค่าน้ำหนัก agent ฝ่ายแก้ไข 50 forward pass โพสต์สมมติฐานแล้ว และบันทึกจำนวนพาสที่ใช้แล้ว
3. แก้ไขในแซนด์บ็อกซ์ agent ฝ่ายแก้ไข แก้เฉพาะสำเนา ต้นฉบับอ่านอย่างเดียว มี diff และไฟล์ที่แก้ไขอยู่ในแซนด์บ็อกซ์
4. ประเมินซ้ำและรีเกรสชัน agent ฝ่ายตรวจสอบ ชุดรีเกรสชันที่กันไว้ โพสต์ตารางก่อน/หลังแล้ว
5. อนุมัติหรือทิ้ง คน ด่านมนุษย์ บันทึกการตัดสินใจไว้บนงานแล้ว

เชื่อมแต่ละขั้นตอนด้วยความสัมพันธ์แบบ blocks เพื่อให้บอร์ดแสดงลูกโซ่ของงาน ความสัมพันธ์ของงานใน Sharkly นั้นตรงไปตรงมาเรื่องขอบเขต: ความสัมพันธ์แสดงการพึ่งพาและความคืบหน้าบนการ์ด แต่ไม่ได้เลื่อนงานหรือเริ่มการรันด้วยตัวเอง เก็บแต่ละขั้นตอนไว้ใน Backlog จนกว่าขั้นก่อนหน้าจะเสร็จ งานที่มอบหมายให้ agent จะไม่เริ่มรันขณะที่ยังอยู่ใน Backlog ดังนั้นการย้ายมันออกจาก Backlog คือตัวกระตุ้น

ตัวเลือกสถานะงานของ Sharkly ที่แสดง Triage, Backlog, Todo, In Progress, Ready for Release, Done, Canceled และ Duplicate

เมื่อขั้นที่ 4 เสร็จ agent สามารถปล่อยให้งานรอการตรวจสอบจากมนุษย์ และคนจะเห็นมันใน Inbox execution log บันทึกเวลาเริ่ม เวลาจบ การเรียกใช้เครื่องมือ และตัวกระตุ้นของแต่ละรัน: นี่คือร่องรอยการตรวจสอบ (audit trail) ของคุณ ที่เก็บไว้กับขั้นตอนที่มันสังกัด สำหรับเรื่องจุดที่ควรหยุด agent ดูเพิ่มเติมได้ที่ ด่านอนุมัติสำหรับ coding agent

ข้อจำกัดในทางปฏิบัติก่อนเริ่ม

  • เริ่มจากเล็ก ๆ การศึกษาใช้โมเดลขนาด 0.8B และ 270M ที่เข้าถึงเทนเซอร์ผ่าน CPU เลือกโมเดลที่คุณประเมินได้ภายในไม่กี่นาที
  • อย่าคาดหวังว่าจะได้ทักษะที่โมเดลไม่มี ผลกับ Gemma บอกว่าการแก้ไขสามารถปลดล็อกโมเดลได้ แต่ไม่ได้สอนมัน
  • มองการรันครั้งเดียวเป็นแค่เกร็ดเรื่องเล่า ทำการทดลองซ้ำด้วย agent ตัวใหม่ก่อนที่คุณจะเชื่อใจการแก้ไขนั้น

บทสรุป

บทเรียนที่นำกลับมาใช้ซ้ำได้จากบทความ MIT คือ harness: งบประมาณที่เขียนไว้เป็นลายลักษณ์อักษร เครื่องมือที่จำกัด log ที่ครบถ้วน และผลลัพธ์ที่คนอื่นสามารถตรวจสอบได้ นั่นคือมาตรการควบคุมที่คุณอยากมีล้อมรอบ coding agent ที่แก้ไขโค้ดอยู่แล้ว

ถ้าอยากลอง สร้างงานทั้งห้าใน Sharkly Space มอบหมายขั้นที่ 1 ถึง 4 ให้ agent บน Computer ที่คุณเชื่อมต่อไว้ และเก็บขั้นที่ 5 ไว้ทำเอง Sharkly เริ่มใช้ฟรีได้ที่ sharkly.ai

คำถามที่พบบ่อย

coding agent แก้ไขค่าน้ำหนักโมเดลได้ไหม

ในการศึกษาของ MIT CSAIL นั้นได้ GPT-6 Astra อ่านเทนเซอร์ของ Qwen3.5-0.8B ในแซนด์บ็อกซ์ Python และแก้ไขค่าน้ำหนัก 131,072 ตัว ผู้เขียนรายงานว่า MATH-500 เพิ่มขึ้นจาก 7.9% เป็น 48.1% งานนี้ยังอยู่ในช่วงเริ่มต้น ทำกับโมเดลขนาดเล็ก และหลายผลลัพธ์มาจากการรันเพียงครั้งเดียว

weight-space programming คืออะไร

คือการที่ LLM อ่านพารามิเตอร์ของเครือข่ายเป็นข้อมูล แล้วแก้ไขโดยตรงโดยไม่ต้องเทรน มันวิเคราะห์เทนเซอร์ด้วยโค้ด ตั้งสมมติฐาน เปลี่ยนค่าน้ำหนัก และวัดผลด้วยจำนวน forward pass ที่จำกัด

ทำไมงบประมาณ forward pass จึงสำคัญ

ในการทดลอง ablation กับ Qwen ของผู้เขียน 10 พาสทำได้ 12.3% บน MATH-500, 25 พาสทำได้ 14.1% และ 50 พาสทำได้ 48.1% งบประมาณกำหนดว่า agent ทดลองไอเดียได้กี่แบบ เขียนมันลงในงานและบังคับใช้ในแซนด์บ็อกซ์

การแก้ไขค่าน้ำหนักเพิ่มความสามารถใหม่ให้โมเดลได้ไหม

การศึกษาบ่งชี้ว่าไม่ได้ การแก้ไขที่ดีที่สุดของ Astra ขยับ Gemma 3 270M จาก 6.8% เป็น 7.7% บน MATH-500 ผู้เขียนสรุปว่าการแก้ไขขจัดอุปสรรคใน Qwen มากกว่าเพิ่มความสามารถ

ทำอย่างไรไม่ให้ค่าน้ำหนักที่แก้ไขแล้วหลุดไปถึงโปรดักชัน

เมานต์ต้นฉบับเป็นแบบอ่านอย่างเดียว แก้ไขบนสำเนา รันการประเมินซ้ำอย่างอิสระ และกำหนดให้คนอนุมัติ diff ของเทนเซอร์ก่อนที่อะไรจะโหลดไฟล์นั้นนอกแซนด์บ็อกซ์

สำรวจเพิ่มเติม

Gemini Omni 1.2 Flash API: เปลี่ยนการสร้างวิดีโอให้เป็นงานที่ AI Agent ของคุณรันได้

Gemini Omni 1.2 Flash API: เปลี่ยนการสร้างวิดีโอให้เป็นงานที่ AI Agent ของคุณรันได้

รัน Gemini Omni 1.2 Flash API ในรูปแบบงาน Agent ที่มีการติดตามสถานะ: ทั้งโครงสร้างการเรียกใช้งาน, บรีฟงาน, แอสเซทอ้างอิง, การแก้ไขแบบ multi-turn และการตรวจสอบโดยมนุษย์ก่อนปล่อยคลิป

6 พฤศจิกายน 2026

วิธีสร้างภาพเคลื่อนไหวให้มาสคอตของแบรนด์ด้วย ChatGPT Images 2.6

วิธีสร้างภาพเคลื่อนไหวให้มาสคอตของแบรนด์ด้วย ChatGPT Images 2.6

สร้างแอนิเมชันให้มาสคอตประจำแบรนด์ของคุณด้วย ChatGPT Images 2.6: พรอมต์สร้าง Sprite Sheet ที่ผ่านการทดสอบแล้ว เทคนิคจัดตำแหน่งเฟรมเพื่อให้ภาพวนลูปได้อย่างแนบเนียน และเวิร์กโฟลว์สำหรับการรีวิวงานร่วมกันในทีม

6 พฤศจิกายน 2026

เมื่อโมเดลราคาถูกกลับแพงกว่า: คิดต้นทุนการรัน Agent ต่อการเปลี่ยนแปลงที่นำไปใช้ได้จริง

เมื่อโมเดลราคาถูกกลับแพงกว่า: คิดต้นทุนการรัน Agent ต่อการเปลี่ยนแปลงที่นำไปใช้ได้จริง

GPT-6 Luna ที่ราคา 0.10 ดอลลาร์ต่อหนึ่งล้านโทเคน ช่วยลดต้นทุนในการทดลองแต่ละครั้ง พร้อมเพิ่มทั้งจำนวนการทดลอง ปริมาณผลลัพธ์ และการตัดสินใจต่องานแต่ละชิ้นที่ปล่อยใช้งานจริง ควรคิดราคาการทำงานของเอเจนต์ตามการเปลี่ยนแปลงที่ได้รับการยอมรับ ไม่ใช่คิดตามจำนวนโทเคน

6 พฤศจิกายน 2026