7 คะแนน โดย GN⁺ 2024-01-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Emacs Copilot สร้าง Code Completion ภายในบัฟเฟอร์ของ Emacs โดยใช้ LLM (Large Language Model) ที่รันอยู่บนเครื่อง локัล
  • LLM จะทำงานเป็นซับคอมมานด์ที่จดจำประวัติการแก้ไขแบบโลคัลแยกตามไฟล์ และสามารถหยุด LLM ได้ทุกเมื่อด้วย C-g
  • เมื่อมีการลบโค้ด ประวัตินั้นอาจถูกลบออกจากคอนเท็กซ์ของ LLM ด้วย และไม่ยึดติดกับภาษา โดยจะระบุภาษาโปรแกรมจากนามสกุลไฟล์

โมเดล WizardCoder 34b

  • WizardCoder 34b เป็น LLM ที่ยอดเยี่ยมซึ่งได้คะแนน HumanEval เท่ากับ GPT-4
  • การใช้งานโมเดลนี้ต้องใช้คอมพิวเตอร์ที่ทรงพลัง เช่น Mac Studio M2 Ultra ส่วนผู้ใช้ Macbook Pro อาจพิจารณาเวอร์ชัน Q3 และผู้ใช้พีซีทั่วไปอาจพิจารณาโมเดล WizardCoder-Python-13b
  • ผู้ใช้ที่มีพลังประมวลผลต่ำกว่า เช่น Raspberry Pi สามารถใช้โมเดล Phi-2 ได้

วิธีเริ่มต้น

  • หลังจากเขียนบรรทัดแรกของฟังก์ชันแล้ว ให้กด C-c C-k เพื่อส่งการควบคุมให้ LLM จากนั้นระบบจะสร้างส่วนที่เหลือของฟังก์ชันให้
  • มีการปรับให้ LLM หยุดเมื่อฟังก์ชันเสร็จสมบูรณ์ และหลีกเลี่ยงคำอธิบายหรือคอมเมนต์แบบ ELI5 (อธิบายให้ง่ายมาก)

อิมพลีเมนเทชันอ้างอิง

  • หลังจากดาวน์โหลด LLM แล้ว ให้คัดลอกโค้ดด้านล่างลงในบัฟเฟอร์ Emacs และรัน M-x eval-buffer
  • สามารถปรับแต่งโค้ดให้เหมาะกับความชอบส่วนตัวได้

ลิงก์ดาวน์โหลด Emacs

  • หากยังไม่ได้ติดตั้ง Emacs หรือใช้แพลตฟอร์มที่ติดตั้งได้ยาก เช่น Windows มีลิงก์ Emacs แบบไฟล์เดียวที่รันได้ทันทีโดยไม่ต้องติดตั้ง

ลิงก์ดาวน์โหลด LLM

  • มีลิงก์สำหรับดาวน์โหลด LLM ฟรีหลายตัวที่ทราบกันว่าทำงานร่วมกับ Emacs Copilot ได้ดี
  • สามารถเลือกขนาดของโมเดลให้เหมาะกับฮาร์ดแวร์ได้

ไฟล์แคช

  • หากตัดสินใจเปลี่ยนโมเดล ต้องลบไฟล์ FILE.cache ทั้งหมดที่ถูกสร้างไว้ในระบบไฟล์โลคัล

ข้อควรระวัง

  • หากใช้ Apple Silicon บน macOS จำเป็นต้องติดตั้ง Xcode
  • หากใช้ zsh อาจต้องรันด้วย sh -c ./llamafile
  • ในบางระบบ Linux อาจเกิดข้อผิดพลาดที่เกี่ยวข้องกับการลงทะเบียน binfmt_misc

OS และ CPU ที่รองรับ

  • llamafile รองรับระบบปฏิบัติการหลายชนิดโดยมีข้อกำหนดการติดตั้งขั้นต่ำ
  • llamafile รองรับ CPU บางประเภท โดยต้องใช้ไมโครโปรเซสเซอร์ AMD64 ที่มีชุดคำสั่ง SSSE3 ขึ้นไป หรือไมโครโปรเซสเซอร์ ARM64 ที่มี ARMv8a+

หมายเหตุเกี่ยวกับโมเดล

  • ตัวอย่าง llamafile ที่ให้ไว้ข้างต้นไม่ควรถูกตีความว่าเป็นการสนับสนุนหรือการแนะนำจาก Mozilla ต่อโมเดล, ไลเซนส์ หรือชุดข้อมูลใดโดยเฉพาะ

ความเห็นของ GN⁺

  • ประสบการณ์การแก้ไขที่ล้ำสมัย: Emacs Copilot มอบผู้ช่วยการเขียนโค้ดในอีกระดับหนึ่งให้แก่นักพัฒนา และมีศักยภาพในการเพิ่มประสิทธิภาพและผลิตภาพได้อย่างมาก
  • การเข้าถึงและการปรับแต่งได้: ผู้ใช้สามารถเลือก LLM และปรับสภาพแวดล้อม Emacs ให้ตรงกับความต้องการและความชอบของตนเอง จึงสามารถสร้างสภาพแวดล้อมการพัฒนาที่เป็นส่วนตัวได้
  • ความเข้ากันได้ทางเทคนิค: การรองรับระบบปฏิบัติการและ CPU ที่หลากหลายทำให้ผู้ใช้ในวงกว้างสามารถใช้งาน Emacs Copilot ได้ และช่วยส่งเสริมความครอบคลุมและการเข้าถึงภายในชุมชนนักพัฒนา

1 ความคิดเห็น

 
GN⁺ 2024-01-01
ความคิดเห็นจาก Hacker News
  • ตั้งคำถามถึงประโยชน์ของการผสาน LLM/IDE

    ยังไม่แน่ใจว่าการผสาน LLM/IDE จะช่วยเพิ่มผลิตภาพอย่างมากในการเขียนโค้ดทั่วไปได้จริงหรือไม่ โดยเฉลี่ยแล้วโปรแกรมเมอร์ผลิตโค้ดได้ราว 100 LOC ต่อวัน แต่ตอนทำต้นแบบสามารถเขียนได้เกิน 1000 LOC ต่อวันอย่างง่ายดาย ความต่างของผลิตภาพระหว่างโค้ดระดับ production กับการแฮ็ก/ทำต้นแบบมาจากเรื่องคุณภาพ และโปรแกรมเมอร์ที่มีความสามารถส่วนใหญ่มักเขียนโค้ดเองได้คุณภาพดีกว่าโค้ดที่ได้จาก LLM หรือคัดลอกจากแหล่งอื่น เวลาที่ต้องใช้วิเคราะห์โค้ดและตรวจสอบว่าไม่มีช่องโหว่ รวมถึงการออกแบบเหมาะสมต่อการบำรุงรักษาในอนาคตหรือไม่ ดูเหมือนจะหักล้างเวลาที่ประหยัดได้จากการไม่ต้องเขียนเอง การใช้ LLM เพื่อการเรียนรู้หรือเขียนโค้ดใช้ครั้งเดียวที่คุณภาพไม่สำคัญอาจมีประโยชน์ แต่สำหรับโค้ด production ยังอีกไกลกว่าที่ผลลัพธ์จาก LLM จะถึงระดับนักพัฒนาและไม่ต้องตรวจทาน/แก้ไขอย่างละเอียด

  • ขอบคุณสำหรับการพัฒนาเครื่องมือ LLM แบบโฮสต์เอง

    ขอแสดงความขอบคุณต่อ Justine ที่พัฒนาเครื่องมือ LLM แบบโฮสต์เอง Llamafiles ควรกลายเป็นมาตรฐาน อยากรู้ว่ามีวิธีเชื่อมต่อกับ LLM ระยะไกลที่โฮสต์อยู่ใน LAN เดียวกันหรือไม่ ไม่ได้ใช้อุปกรณ์ Apple แต่มีเครื่องแรง ๆ อยู่ในเครือข่ายและอยากใช้มัน ไม่แน่ใจว่า Llamafile จะเปิด API ได้หรือไม่ ซึ่งคงเข้าไปอยู่ในขอบเขตของ LSP และน่าจะเป็นเรื่องดีหากใช้ประโยชน์จาก Llamafiles

  • แชร์ประสบการณ์การผสาน LLM เข้ากับ Emacs

    ใช้ Emacs สำหรับงานเขียนโค้ดและงานเอกสารเทคนิคเกือบทั้งหมด กำลังรัน phind-v2-codellama, openhermes, ollama, gptel และ Copilot ของ GitHub อยู่ ชอบความสามารถในการส่งส่วนที่เลือกแบบใดก็ได้ไปให้ LLM แล้วสั่งงาน UX ยังอยู่ในช่วงเริ่มต้น แต่ลองนึกภาพว่าถ้า foundation model รับคอนเท็กซ์ทั้งหมดได้ เช่น ไฟล์ orgmode และบัฟเฟอร์ไฟล์ที่เปิดอยู่ และสามารถใช้เครื่องมือแบบ LSP ได้

  • ประสบการณ์รัน LLM บน MacBook Pro M1 Max

    ใช้ MacBook Pro M1 Max พร้อม RAM 64GB และดาวน์โหลดโมเดล 34B Q55 (โมเดลใหญ่) มาทดสอบ พบว่าทำงานได้ดี แม้จะช้าแต่ก็ใช้งานได้ กำลังรันอยู่บนพาร์ทิชัน Asahi Fedora Linux และไม่แน่ใจว่าใช้ GPU อย่างไร ตั้งค่าสภาพแวดล้อมด้วย ZSH 5.9 และเมื่อเรียก LLM โดยตรงผ่าน SUDO จะโหลดเป็นเว็บเซิร์ฟเวอร์ได้อย่างรวดเร็วและโต้ตอบผ่านเว็บเบราว์เซอร์ที่ localhost:8080 ได้ แต่เมื่อพยายามรัน LLM จาก Emacs กลับเจอข้อผิดพลาด "Doing vfork: Exec format error." ทำตามเดโมใน Readme โดยพิมพ์ส่วนต้นของฟังก์ชัน isPrime แล้วกด C-c C-k ก็เกิดข้อผิดพลาดนี้ อยากทราบว่ามีไอเดียไหมว่าอะไรผิดพลาด

  • วิจารณ์ฟังก์ชัน is_prime ในวิดีโอสาธิต

    ฟังก์ชัน is_prime ที่แสดงในวิดีโอสาธิตแย่มาก แม้อินพุตจะไม่หารด้วย 2 ลงตัว ก็ยังตรวจ modulo กับ 4, 6, 8 ต่อไป ซึ่งไม่มีความหมายเลย เพียงเพิ่มโค้ดอีกบรรทัดเดียว (ตรวจเลขคี่) ก็ทำให้ลูปวนเฉพาะเลขคี่และเร็วขึ้นได้ 2 เท่า หวังว่าคนที่ใช้ LLM แบบนี้จะตรวจโค้ดก่อน push ขึ้น prod

  • ถามเรื่องการ build llamafile ที่รันบน NixOS ไม่ได้

    ถามว่าสามารถ build llamafile ของตัวเองได้หรือไม่โดยไม่ต้องใช้ cosmopolitan/ไฟล์ปฏิบัติการที่พกพาได้จริง เพราะมันรันบน NixOS ไม่ได้

  • ต้องการการผสาน LLM ที่ทั่วไปกว่านี้

    แม้จะพอใจกับสิ่งที่มีอยู่ตอนนี้ แต่ต้องการการผสาน LLM ที่ทั่วไปกว่านี้และทำทุกอย่างที่สิ่งนี้กับ LLM สามารถทำได้ เช่น กดปุ่มครั้งหนึ่งเพื่อ "เติมโค้ดนี้ให้สมบูรณ์" แต่กดอีกปุ่มหนึ่งอาจส่งบัฟเฟอร์ปัจจุบันไปให้ LLM ตรง ๆ หรือส่งส่วนที่เลือกไป หรือส่งส่วนที่เลือกไปแล้วแทนที่ด้วยผลลัพธ์ อาจมีฟังก์ชันเชิงตั้งฉากหลายอย่างสำหรับนำอินพุตเข้า LLM ในหลายรูปแบบ (ส่วนที่เลือก, บัฟเฟอร์, ไฟล์, inline prompt) และส่งออกผลลัพธ์ได้หลายแบบ (แทรกที่ตำแหน่งเคอร์เซอร์, เขียนทับส่วนที่เลือก, ใส่ในบัฟเฟอร์ใหม่ ฯลฯ) แล้วค่อยสร้าง system prompt อัตโนมัติหลากหลายแบบ เช่น การเติมโค้ดหรือการเขียนร้อยแก้ว ไว้ด้านบนอีกชั้น

  • ผู้ใช้ Vim แชร์คำสั่งคัสตอมสำหรับผสาน LLM

    ใช้คำสั่งคัสตอมที่นำโค้ดที่เลือกอยู่ในปัจจุบันไปเปิดหน้าต่างเบราว์เซอร์ แล้วขอให้ AI engine หลายตัวช่วยปรับปรุง และได้แชร์คำสั่งที่ใช้ใน vimrc

  • ถามเรื่องเส้นทางอัปเกรดของ Llamafile

    ถามถึงเส้นทางอัปเกรดของ Llamafile โดยเข้าใจว่ามันคือการรวม llama.cpp (ไฟล์เล็กที่อัปเดตบ่อย) กับน้ำหนักโมเดล (ไฟล์ใหญ่ที่ไม่ค่อยอัปเดต) เข้าเป็นไฟล์เดียว จึงสงสัยว่าทุกครั้งที่ llama.cpp ต้องแก้ไข จะต้องดาวน์โหลดโมเดลหลายกิกะไบต์ที่ไม่เปลี่ยนแปลงใหม่ทั้งหมดหรือไม่

  • แสดงความสนใจและความตั้งใจจะลองใช้การผสาน LLM

    น่าสนใจมากและจะลองใช้อย่างแน่นอน แต่เพราะมันแตกต่างจากวิธีทำงานของ GitHub CoPilot มาก ชื่อนี้อาจตั้งมาไม่ค่อยเหมาะนัก เมื่อพิจารณาจากสถาปัตยกรรมของ Emacs และเรื่องอื่น ๆ ก็แปลกใจที่ยังไม่มีการพัฒนาการผสานกับ LLM มากกว่านี้ แต่โปรเจกต์ส่วนใหญ่ก็ไม่ได้มีการทำงานต่อมาหลายเดือนแล้ว อย่างไรก็ดี อาจเป็นไปได้ว่าคนส่วนใหญ่ที่ใช้ Emacs ไม่เห็นด้วยกับการนำ LLM มาใช้