ผมได้ทดสอบโมเดลแบบ local กับสัญญา Solidity ขนาดเล็ก 10 ฉบับ โดยจงใจใส่บั๊กไว้ เช่น:

  • Reentrancy ในฟังก์ชัน withdraw
  • การขาด access modifiers
  • ข้อผิดพลาดจากการปัดเศษใน ERC4626
  • การตรวจสอบ signature ที่ผิดพลาด
  • บั๊กทางตรรกะที่ซับซ้อน (subtle logic bugs)

ผมได้รัน Qwen2.5-Coder เปรียบเทียบกับ DeepSeek-Coder โดยใช้โมเดลขนาด 7B (หรือเล็กกว่า) ผ่าน Ollama บน WSL2 หากคุณใช้โมเดลขนาด 33B ให้ข้ามส่วนนี้ไปได้เลย

สำหรับสัญญาแต่ละฉบับ ผมได้ใช้ 3 prompt ดังนี้:

  • การตรวจสอบความปลอดภัยทั่วไป
  • การตรวจสอบเฉพาะเจาะจงสำหรับ reentrancy และการควบคุมการเข้าถึง (access control)
  • รายงานที่มีโครงสร้างพร้อมแท็กระดับความรุนแรง (severity tags)

การปฏิบัติตามคำสั่ง (Instruction Following)

Qwen 7B ชนะในจุดนี้ เพราะทำตามกฎการจัดรูปแบบที่เข้มงวดได้เกือบทุกครั้ง ในขณะที่ DeepSeek มักจะเพิ่มข้อความส่วนเกินหรือเพิกเฉยต่อข้อจำกัด เมื่อคุณนำผลลัพธ์จากโมเดลไปใช้ใน automated pipeline ความสม่ำเสมอของ Qwen จึงสำคัญมาก เพราะหากการ parse ข้อมูลล้มเหลว ผลลัพธ์นั้นก็ไร้ประโยชน์

การตรวจสอบเฉพาะเจาะจง (Targeted Checks)

Qwen จะไม่หลุดประเด็น ถ้าคุณถามเรื่อง reentrancy มันก็จะตอบเรื่อง reentrancy แต่ DeepSeek มักจะออกนอกเรื่องไปพูดถึงการปรับแต่ง gas หรือเรื่องสไตล์การเขียนโค้ด ซึ่งเป็นการเพิ่ม noise เข้ามา

คุณภาพของการอธิบาย (Explanation Quality)

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

ความช่างสงสัยและการหลอน (Skepticism and Hallucination)

DeepSeek จะตรวจพบปัญหาได้มากกว่า โดยทำหน้าที่เหมือนเป็น “เครื่องสร้างความสงสัย” (suspicion generator) แต่มันก็มักจะสร้างปัญหาขึ้นมาเองในโค้ดที่เขียนมาอย่างถูกต้องแล้วด้วย

ในทางตรงกันข้าม Qwen จะเงียบไปเมื่อโค้ดมีบั๊ก ส่วน DeepSeek กลับอ้างว่ามีบั๊กทั้งที่ไม่มีอยู่จริง

การแจ้งเตือนผิดพลาด (false alarm) เสียเวลาเพียงไม่กี่นาที แต่การพลาดบั๊กอาจหมายถึงการสูญเสียทุกอย่าง ผมจึงใช้ DeepSeek เพื่อช่วยหาประเด็นที่น่าสงสัยมาตรวจสอบ แต่ผมจะใช้ Qwen สำหรับงานอัตโนมัติ (automation)

บทสรุปของผม (My Final Verdict)

ขนาดของโมเดลสำคัญกว่าชื่อแบรนด์ โมเดลขนาด 1.5B ไม่สามารถใช้เหตุผลเพื่อวิเคราะห์บั๊กที่มีหลายขั้นตอนหรือรักษาการจัดรูปแบบได้

ที่ขนาด 7B ทั้งคู่สามารถจัดการกับข้อผิดพลาดพื้นฐานได้ แต่ก็ยังไม่มีตัวไหนที่สามารถแทนที่ผู้ตรวจสอบ (auditor) ที่เป็นมนุษย์ในการตรวจสอบตรรกะทางธุรกิจที่ซับซ้อนได้ ให้มองว่าพวกมันเป็นเพียงผู้ช่วยคัดกรองเบื้องต้น (triage assistants) ไม่ใช่ผู้ตรวจสอบ

การตั้งค่าของผม:

  • Qwen 7B: ค่าเริ่มต้นสำหรับการตรวจสอบที่มีโครงสร้างและงาน pipeline
  • DeepSeek: ความเห็นที่สองเพื่อช่วยจับสิ่งที่ Qwen พลาดไป
  • Qwen 1.5B: ใช้สำหรับการคัดกรองอย่างรวดเร็วในงานที่มีความเสี่ยงต่ำเท่านั้น

ซื้อโมเดลที่ใหญ่ที่สุดเท่าที่ฮาร์ดแวร์ของคุณจะรันไหว แล้วค่อยกังวลเรื่องแบรนด์

คุณชอบโมเดลที่ขี้สงสัย หรือโมเดลที่มีความแม่นยำมากกว่ากัน?

Source: https://dev.to/pavelespitia/qwen25-coder-vs-deepseek-coder-for-solidity-review-what-i-actually-see-locally-4jh8

Optional learning community: https://t.me/GyaanSetuAi