7P by neo 5달전 | favorite | 댓글 1개
  • Emacs Copilot은 로컬에서 실행되는 LLM(Large Language Model)을 사용하여 Emacs 버퍼 내에서 Code Completion을 생성함
  • LLM은 파일별로 로컬 편집 기록을 기억하는 서브 커맨드로 실행되며, C-g를 사용하여 언제든지 LLM을 중단할 수 있음
  • 코드를 삭제할 때 LLM의 컨텍스트에서 해당 기록도 삭제될 수 있으며, 언어에 구애받지 않고 파일 확장자에 의해 프로그래밍 언어가 결정됨

WizardCoder 34b 모델

  • WizardCoder 34b는 GPT-4와 동일한 HumanEval 점수를 받은 우수한 LLM임.
  • 이 모델을 사용하기 위해서는 Mac Studio M2 Ultra와 같은 강력한 컴퓨터가 필요하며, Macbook Pro 사용자는 Q3 버전을, 일반 PC 사용자는 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 다운로드 링크

  • Emacs Copilot과 잘 작동하는 것으로 알려진 몇 가지 LLM을 무료로 다운로드할 수 있는 링크 제공.
  • 모델의 크기는 하드웨어에 적합하게 선택할 수 있음.

캐시 파일

  • 모델을 변경하기로 결정한 경우, 로컬 파일 시스템에 생성된 모든 FILE.cache 파일을 삭제해야 함.

주의사항

  • macOS에서 Apple Silicon을 사용하는 경우 Xcode가 설치되어 있어야 함.
  • zsh 사용 시 sh -c ./llamafile을 사용하여 실행해야 할 수 있음.
  • 일부 Linux 시스템에서는 binfmt_misc 등록과 관련된 오류가 발생할 수 있음.

지원되는 OS와 CPU

  • llamafile은 최소 설치 요구 사항을 가진 여러 운영 체제를 지원함.
  • llamafile은 특정 CPU를 지원하며, SSSE3 이상의 명령어 세트를 가진 AMD64 마이크로프로세서 또는 ARMv8a+를 가진 ARM64 마이크로프로세서가 필요함.

모델에 대한 참고사항

  • 위에 제공된 llamafile 예시는 특정 모델, 라이선스, 데이터 세트에 대한 Mozilla의 지지나 추천으로 해석되어서는 안 됨.

GN⁺의 의견

  • 혁신적인 편집 경험: Emacs Copilot은 개발자들에게 새로운 차원의 코딩 보조를 제공하여, 효율성과 생산성을 크게 향상시킬 수 있는 잠재력을 가짐.
  • 접근성과 사용자 정의: 사용자는 자신의 필요와 취향에 맞게 LLM을 선택하고 Emacs 환경을 조정할 수 있어, 개인화된 개발 환경 구축이 가능함.
  • 기술적 호환성: 다양한 운영 체제와 CPU를 지원함으로써, 광범위한 사용자가 Emacs Copilot을 사용할 수 있으며, 이는 개발자 커뮤니티 내에서의 포용성과 접근성을 증진시킴.
Hacker News 의견
  • LLM/IDE 통합의 유용성에 대한 의문

    LLM/IDE 통합이 일반 코딩 작업에서 큰 생산성 향상을 가져다주는지 확신할 수 없음. 프로그래머의 평균 생산성은 하루에 100 LOC 정도이지만, 프로토타입을 만들 때는 하루에 1000 LOC 이상을 쉽게 작성할 수 있음. 생산 품질 코드와 해킹/프로토타이핑의 생산성 차이는 품질 측면 때문이며, 대부분의 유능한 프로그래머는 스스로 코딩하는 것이 LLM이나 다른 소스에서 복사한 것보다 더 나은 품질의 코드를 만들 수 있음. 코드를 분석하고 취약점이 없는지, 미래 유지보수를 위한 디자인이 적절한지 확인하는 데 걸리는 시간이 코드를 직접 작성하지 않고 얻는 시간 이득을 상쇄할 것으로 보임. LLM을 사용하여 학습하거나 품질이 중요하지 않은 일회성 코드를 작성할 때는 유용할 수 있지만, 생산 코드에 대해서는 LLM의 출력이 개발자 수준이 되고 꼼꼼히 검토/수정할 필요가 없는 지점까지는 아직 갈 길이 멀다고 생각함.

  • 자체 호스팅된 LLM 도구 개발에 대한 감사

    자체 호스팅된 LLM 도구 개발을 진행해준 Justine에게 감사함을 표함. Llamafiles는 표준이 되어야 함. 같은 LAN에 호스팅된 원격 LLM에 연결할 수 있는 방법이 있는지, Apple 기기를 사용하지 않지만 네트워크상의 강력한 기계를 가지고 있어서 이를 사용하고 싶음. Llamafile이 API를 제공할 수 있을지, 이는 LSP 영역으로 들어가는 것이며, Llamafiles를 활용하는 것이 좋을 것임.

  • Emacs를 사용한 LLM 통합 경험 공유

    코딩과 기술 문서 작업에 대부분 Emacs를 사용함. phind-v2-codellama, openhermes, ollama, gptel, 그리고 GitHub의 Copilot을 실행하고 있음. 임의의 영역을 LLM에 보내서 요청할 수 있는 기능이 마음에 듦. UX는 초기 단계이지만, 기초 모델이 모든 컨텍스트(예: orgmode 파일과 열린 파일 버퍼)를 받아들이고 LSP와 같은 도구를 사용할 수 있다면 상상해보라고 함.

  • MacBook Pro M1 Max에서의 LLM 실행 경험

    MacBook Pro M1 Max, 64GB RAM을 사용하고 있으며, 34B Q55 모델(큰 모델)을 다운로드하여 잘 작동함을 확인함. 속도는 느리지만 사용 가능함. Asahi Fedora Linux 파티션에서 실행 중이며, GPU를 어떻게 활용하는지는 모름. ZSH 5.9로 환경을 구성했으며, SUDO를 통해 LLM을 직접 호출하면 웹 서버로 빠르게 로드되어 localhost:8080을 통해 웹 브라우저로 상호 작용할 수 있음. 하지만 Emacs에서 LLM을 실행하려고 할 때 "Doing vfork: Exec format error."라는 오류가 발생함. Readme의 데모를 따라 isPrime 함수의 시작 부분을 입력한 후 C-c C-k를 타이핑하면 이 오류가 발생함. 무엇이 잘못되었는지에 대한 아이디어를 물음.

  • 비디오 데몬스트레이션의 is_prime 함수에 대한 비판

    비디오 데몬스트레이션에서 보여준 is_prime 함수가 매우 나쁨. 입력이 2로 나누어지지 않더라도 4, 6, 8 등으로 모듈로 검사를 계속하는데, 이는 완전히 무의미함. 코드 한 줄만 추가하면(홀수 체크) 루프를 홀수로만 만들어 속도를 2배 빠르게 할 수 있음. 이러한 LLM을 사용하는 사람들이 prod로 푸시하기 전에 코드를 검토하기를 바람.

  • NixOS에서 실행할 수 없는 llamafile 빌드에 대한 질문

    cosmopolitan/실제로 이식 가능한 실행 파일 없이 자신만의 llamafile을 빌드할 수 있는지 질문함. NixOS에서 실행할 수 없음.

  • 더 일반적인 LLM 통합에 대한 요구

    현재 제공되는 것에 대해 만족하지만, 이것과 LLM이 할 수 있는 모든 것을 할 수 있는 더 일반적인 LLM 통합을 원함. 예를 들어, 한 키 입력으로 "이 코드를 완성하라"는 것이 될 수 있지만, 다른 키 입력은 현재 버퍼를 LLM에 그대로 보내거나, 영역을 LLM에 보내거나, 영역을 LLM에 보내고 결과로 대체하는 것일 수 있음. 입력을 LLM에 다양한 방식으로 가져오는 몇 가지 직교 기능(영역, 버퍼, 파일, 인라인 프롬프트)과 결과를 다양한 방식으로 출력하는 기능(포인트에서 추가, 영역 덮어쓰기, 새 버퍼에 넣기 등)이 있으며, 그 위에 코드 완성, 산문 등과 같은 다양한 자동 시스템 프롬프트를 구축할 수 있음.

  • Vim 사용자의 LLM 통합 커스텀 명령 공유

    현재 선택된 코드를 가져와서 브라우저 창을 열어 다양한 AI 엔진에게 개선을 요청할 수 있는 사용자 정의 명령을 사용함. vimrc에서 사용하는 명령 공유.

  • Llamafile 업그레이드 경로에 대한 질문

    Llamafile의 업그레이드 경로에 대해 질문함. llama.cpp(자주 업데이트되는 작은 파일)와 모델 가중치(자주 업데이트되지 않는 큰 파일)를 하나로 합친 것으로 이해함. llama.cpp에 수정이 필요할 때마다 변경되지 않은 모델의 여러 기가바이트를 다시 다운로드해야 하는지 궁금함.

  • LLM 통합에 대한 흥미와 시도 의사 표현

    매우 흥미롭고 확실히 시도해볼 것임. 하지만 GitHub CoPilot의 작동 방식과는 매우 다르므로 이름이 잘 선택되지 않았을 수 있음. Emacs의 아키텍처 등을 고려할 때 LLM과의 통합에 더 많은 개발이 이루어지지 않는 것이 놀랍지만, 대부분의 프로젝트는 몇 달 동안 작업되지 않았음. 하지만 Emacs를 사용하는 사람들 대부분이 LLM을 활용하는 것에 반대하는 사람들일 수도 있음.