9P by neo 11일전 | ★ favorite | 댓글 1개
  • 많은 개발자들이 LLM을 코드 작성에 사용하려다 환각(Hallucination)을 경험하고 신뢰를 잃음
    • LLM이 존재하지 않는 메서드나 라이브러리를 창작하는 것은 흔한 일
    • 하지만 코드에서의 환각은 가장 덜 위험한 유형의 환각
  • 가장 위험한 것은 LLM이 오류를 만들어내지만 컴파일러나 인터프리터에서 즉시 감지되지 않는 경우
    • 환각된 메서드는 실행 즉시 오류를 발생시키므로 쉽게 발견할 수 있음
    • 오류 메시지를 LLM에 다시 입력하면 자동으로 수정할 수도 있음
  • 일반적인 텍스트 환각과 달리, 코드는 실행을 통해 사실 확인이 가능
  • 자동 오류 수정 기능이 있는 LLM
    • ChatGPT Code Interpreter, Claude Code 등의 도구는 LLM이 작성한 코드를 실행하고 오류를 감지하여 스스로 수정함
    • LLM이 작성한 코드를 실행도 안 하고 평가하는 것은 비효율적임
  • 일부 개발자들은 LLM이 환각된 메서드를 생성했다는 이유로 기술 자체를 배척하려 함
    • 하지만 효과적으로 사용하려면 학습과 실험이 필수적임
    • 필자는 2년 넘게 AI 기반 코드 작성에 대해 연구하고 있으며, 여전히 새로운 기술을 배우고 있음
  • 코드의 수동 테스트는 필수임
    • 코드가 정상적으로 실행된다고 해서 기대한 대로 동작한다는 보장은 없음
    • 코드 리뷰나 자동화된 테스트만으로 코드의 정확성을 완전히 검증할 수 없음
    • 직접 실행하고 검증하는 과정이 필수적임
    • LLM이 생성한 코드는 가독성이 뛰어나기 때문에 방심할 가능성이 있음
    • 사람의 코드도 마찬가지로, 직접 실행해보기 전까지는 신뢰해서는 안 됨
  • 환각을 줄이는 방법
    • 다른 모델 사용: 특정 플랫폼에 대한 학습 데이터가 더 풍부한 모델을 선택
      • 예: Claude 3.7 Sonnet (thinking mode 활성화), OpenAI o3-mini-high, GPT-4o (Python Code Interpreter 포함)
    • 맥락(context) 활용: 특정 라이브러리를 LLM이 모르더라도 예제 코드를 제공하면 패턴을 학습 가능
    • 안정적인 기술 선택: 오래된 라이브러리를 선택하면 LLM이 더 잘 다룰 가능성이 높음
  • 코드 리뷰의 중요성
    • "LLM이 작성한 코드를 전부 리뷰해야 한다면 직접 작성하는 게 빠르다"는 주장에 반박함
    • 이는 코드 리뷰 능력 부족을 드러내는 발언일 수도 있음
    • LLM이 생성한 코드 리뷰는 실력을 향상시킬 좋은 기회가 될 수 있음
  • 보너스: Claude 3.7 Sonnet의 피드백
    • 필자는 블로그 초안을 Claude 3.7 Sonnet의 "extended thinking mode"에 검토 요청함
    • "이 글의 논리가 설득력 있는지, 개선할 점이 있는지, 빠진 내용이 있는지 검토해 달라"고 요청함
    • Claude는 초안의 어조를 부드럽게 만드는 데 도움을 줌
    • Claude 피드백 대화 링크
Hacker News 의견
  • 작성자가 이전 글에서는 동의했지만 이번 글에는 동의하지 않음

    • "LLM이 작성한 모든 코드를 검토해야 한다면, 내가 직접 작성하는 것이 더 빠르다"는 의견에 반대함
    • 다른 사람의 코드를 읽고 이해하며 검토하는 능력에 대한 투자가 부족하다는 주장에 동의하지 않음
    • 검토는 작성자의 전문성과 신뢰도에 따라 다르며, 익명의 기여를 검토하는 것은 다름
    • 코드의 의도와 접근 방식을 추론하고 비교하는 것이 중요하며, LLM의 경우 그 범위가 제한적임
    • 동기 부여는 중요하며, 모든 개발자가 코드 검토를 좋아하는 것은 아님
    • LLM의 코드는 사회적 측면이 없으며, 다른 사람이 변경 사항을 검토해야 함
  • LLM이 생성한 코드가 잘 작동하더라도, 작성자가 아니면 버그나 논리적 결함을 찾기 어려움

    • 코딩을 잘 설계된 계획을 구현하는 것이 아니라 조각을 맞추는 것으로 본다면, 알고리즘이 추측으로 조각을 맞추는 것에 대한 우려가 있음
    • LLM은 인간이 감수할 수 있는 위험을 감수하지 않으며, 특정 맥락에서의 코드 블록의 의미를 이해하지 못할 수 있음
  • LLM 생성 코드는 깔끔하지만, QA와 정리 작업에 더 많은 시간을 소비하게 됨

    • 코드가 잘 작동하고 오류가 없다고 해서 올바른 일을 하고 있다는 것을 의미하지 않음
    • 코드를 실행하고 테스트하는 것만으로는 코드의 정확성을 증명할 수 없으며, 논리적으로 추론해야 함
  • The Primeagen과 Casey Muratori가 최신 LLM 코드 생성기의 출력을 검토함

    • LLM의 훈련 데이터에 잘 대표된 작업을 제공하여 개발이 쉬워야 함
    • 실제로는 반복적인 개발이 쓸모없는 코드로 수렴하며, LLM이 점점 더 진전을 이루지 못함
  • Simon이 간과한 또 다른 오류 범주는 모델이 기능을 잊어버리는 환각임

    • 코드가 컴파일되는 긍정적인 측면보다 핵심 기능을 잊어버리는 부정적인 측면이 더 어려움
    • 코드가 대화/컨텍스트 창 외부에 있을 것으로 예상되는 코드에 따라 기능이 약간 변할 수 있음
  • 환각된 메서드는 작은 장애물이며, 사람들이 이를 불평할 때 시스템을 효과적으로 사용하는 방법을 배우는 데 최소한의 시간을 보냈다고 가정함

    • 이는 매우 잘못된 가정이며, 사람들이 환각을 보고 "가장 쉬운 것도 일관되게 맞추지 못한다면 더 어려운 것을 신뢰할 수 없다"고 생각함
  • 환각 자체가 LLM이 제기하는 가장 큰 위험은 아님

    • 더 큰 위험은 챗봇이 인간을 해치도록 설득할 수 있다는 것임
    • 이는 이미 발생한 사례가 있으며, 더 위험한 것이 무엇인지에 대한 아이디어는 공유하고 싶지 않음
  • 컴파일 오류의 제한된 맥락 내에서만 덜 위험함

    • 프로그래머가 실제 솔루션을 찾는 노력을 피하기 위해 전체 라이브러리를 발명했다면 더 화가 날 것임
    • 환각을 단순한 속도 저하로 간주한다면 LLM이 실제로 해야 할 일을 과소평가하는 것임
  • LLM에서 좋은 결과를 얻기 위해 많은 노력이 필요함

    • 이는 과대 광고를 꿰뚫는 것임
    • LLM이 무엇에 유용한지, 신뢰할 수 없는 결과를 얻기 위해 수년간 학습해야 한다면 무엇을 기대할 수 있는지에 대한 의문이 있음
  • 의료 센터에서 환자의 '주요' 클리닉을 찾는 코드 작성 경험

    • 임상 예약만을 고려하여 가장 최근의 예약을 찾아야 했음
    • 임상 예약이 없으면 모든 종류의 가장 최근 예약을 찾아야 했음
    • 데이터를 정렬하여 코드를 작성했으나, ChatGPT가 문서화하는 과정에서 정렬을 반대로 이해함
    • 이는 "코드가 실행되지 않음"보다 훨씬 나쁜 실수임