~/VibeHandbook
PDF ฟรี

บริการ AI

microsoft.github.io

LSP

มันคืออะไร

ลองนึกภาพเครื่องตรวจคำสะกดและไวยากรณ์ที่ไม่มีวันเหนื่อย คอยขีดเส้นใต้ข้อผิดพลาดขณะที่คุณพิมพ์อยู่ นั่นแหละคือสิ่งที่ หรือ Language Server Protocol (โปรโตคอลเซิร์ฟเวอร์ภาษา) มอบให้: วิธีมาตรฐานที่ให้เอดิเตอร์และเครื่องมือต่าง ๆ ได้รับข้อมูลอัจฉริยะเกี่ยวกับโค้ดของโปรเจกต์แบบเรียลไทม์ "language server" (เซิร์ฟเวอร์ภาษา) จะอ่านโค้ดของคุณขณะที่คุณทำงาน แล้วรายงานข้อผิดพลาด ข้อมูลชนิดข้อมูล (type) คำแนะนำการเติมข้อความอัตโนมัติ และลิงก์ "ไปยังนิยาม" (go to definition) การที่มันเป็นโปรโตคอลหมายความว่า language server ตัวเดียวสามารถขับเคลื่อนเอดิเตอร์ได้หลายตัว — เส้นหยักสีแดงแบบเดียวกับที่คุณเห็นใน VS Code ก็สามารถขับเคลื่อนเครื่องมือบรรทัดคำสั่ง (command-line tool) หรือ AI coding ได้เช่นกัน

จุดแข็ง

  • ให้ฟีดแบ็กที่เข้าใจภาษาโค้ดจริง ๆ: ข้อผิดพลาดของชนิดข้อมูล (type errors) และการอ้างอิงที่ไม่ได้นิยามไว้จริง ไม่ใช่แค่การเดา
  • เป็นมาตรฐาน จึงมีเซิร์ฟเวอร์ตัวเดียวที่ใช้งานได้กับเอดิเตอร์และเครื่องมือหลายตัว
  • อัปเดตขณะที่คุณพิมพ์ ทำให้ปัญหาปรากฏขึ้นทันทีแทนที่จะรู้ตอนคอมไพล์ (build time)
  • ขับเคลื่อนฟีเจอร์ที่นักพัฒนาใช้ทุกวัน: การเติมข้อความอัตโนมัติ (completion), เอกสารเมื่อชี้เมาส์ (hover docs), การเปลี่ยนชื่อ (rename), การกระโดดไปยังนิยาม (jump-to-definition)

ข้อแลกเปลี่ยน

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

เมื่อไรควรใช้

ทุกครั้งที่คุณต้องการฟีดแบ็กที่เชื่อถือได้และเรียลไทม์เกี่ยวกับโค้ดขณะที่มันถูกเขียนขึ้น — ซึ่งโดยพื้นฐานแล้วคือตลอดเวลา สำหรับ vibe coding มันสำคัญที่สุดในฐานะแหล่งสัญญาณ (signal source): diagnostics (ผลการวินิจฉัย) ที่ language server สร้างขึ้นคือสิ่งที่คุณต้องการให้ไหลกลับเข้าไปในลูปการทำงานพอดี

ความเข้ากันได้กับ vibe coding

LSP คือสิ่งที่ทำให้ AI เห็นปัญหาแบบเดียวกับที่คุณเห็น harness (โครงสร้างเสริมการทำงาน) ที่ดีจะส่ง diagnostics จาก language server กลับไปให้ agent หลังจากการแก้ไขแต่ละครั้ง เพื่อให้ AI จับข้อผิดพลาดของชนิดข้อมูลและ lint (การตรวจสอบสไตล์โค้ด) ของตัวเองได้ และแก้ไขก่อนที่คุณจะรันโค้ดด้วยซ้ำ แทนที่จะได้แค่ "ดูน่าจะใช้ได้" คุณจะได้ "คอมไพเลอร์ยืนยันแล้ว" บอกให้ agent ของคุณอ่าน diagnostics ด้วย ไม่ใช่แค่อ่านไฟล์

// a diagnostic an LSP server returns — feed this back to the agent
{
  "severity": "error",
  "range": { "start": { "line": 12, "character": 6 } },
  "message": "Type 'string' is not assignable to type 'number'."
}