11P by neo with xguru 3달전 | favorite | 댓글 1개
  • 2019년에는 대부분의 소프트웨어 엔지니어가 머신러닝이 자신들의 업무에 어떤 도움이 될지 상상하기 어려웠음
  • 그러나 2024년에는 AI가 코드 작성을 돕는 방식에 대해 널리 열광하고 있음
    • 많은 엔지니어들이 회사 내부 도구나 상용 제품에서 ML 기반 자동완성을 사용해봤음
  • 이 글에서는 구글의 내부 소프트웨어 개발 도구의 지속적인 변화 속에서 최신 AI 기반 개선 사항을 소개함
    • 향후 5년 동안 예상되는 추가 변화에 대해서도 논의함
  • 전문적인 소프트웨어 개발에 가치를 전달하는 AI 제품을 구축하는 방법론도 제시함
    • 이 팀은 IDE, 코드 리뷰, 코드 검색 등 구글 엔지니어들이 대부분의 시간을 보내는 소프트웨어 개발 환경을 담당함
    • 이러한 개선이 개발자 생산성과 만족도에 직접적인 영향을 미칠 수 있음을 보여줌

도전과제

  • AI 기술이 빠르게 진화하고 있어 어떤 아이디어를 먼저 탐색할지 예측하기 어려운 것이 이 영역에서의 지속적인 도전 과제임
  • 기술적으로 실현 가능한 데모와 성공적인 제품화 사이에는 종종 상당한 격차가 존재함
  • 아이디어를 제품에 배포하는 접근 방식에는 세 가지 지침이 있음:
    1. 기술적 실현 가능성과 영향력에 따라 우선순위를 정함: 기술적 실현 가능성이 이미 입증되었고 엔지니어의 워크플로우에 높은 (측정 가능한) 영향을 미칠 것으로 예상되는 아이디어에 대해 작업함
    2. 신속하게 학습하여 UX와 모델 품질을 개선함: 개발자의 생산성과 행복을 지키면서 신속하게 반복하고 얻은 교훈을 추출하는 데 중점을 둠. 사용자 경험은 모델 품질만큼 중요함
    3. 효과 측정: 목표는 생산성과 만족도 지표를 높이는 것이므로 이러한 지표를 광범위하게 모니터링해야 함

LLM을 소프트웨어 개발에 적용하기

  • 트랜스포머 아키텍처의 출현과 함께 LLM을 소프트웨어 개발에 적용하는 방법을 모색하기 시작함
  • LLM 기반 인라인 코드 완성은 소프트웨어 개발에 적용되는 AI의 가장 인기 있는 응용 프로그램임
    • 코드 자체를 훈련 데이터로 사용하는 것은 LLM 기술의 자연스러운 응용임
    • UX는 개발자에게 자연스럽게 느껴짐. 단어 수준 자동완성은 오랜 기간 IDE의 핵심 기능이었기 때문임
    • AI로 작성된 새 문자의 비율과 같은 영향력에 대한 대략적인 측정이 가능함
    • 이러한 이유로 LLM의 이 응용 프로그램이 가장 먼저 배포되는 것이 이치에 맞음
  • 이전 블로그에서는 코드 완성으로 사용자 경험을 개선하는 방법과 영향을 측정하는 방법을 설명함
    • 그 이후로 다른 기업 환경과 유사한 지속적인 빠른 성장을 보였음
    • 소프트웨어 엔지니어의 수용률은 37%이며, 코드 문자의 50%를 완성하는 데 도움을 줌
  • 주요 개선 사항은 모델과 UX 모두에서 나왔음
    • 이 주기는 합성 공식이 아닌 실제 행동에서 배우는 데 필수적임
  • 다양한 도구에서 얻은 기록 데이터와 사용자 선호도 및 요구 사항을 캡처한 사용 데이터를 활용하여 코딩 도구(예: IDE)의 AI 기반 기능을 개선함
  • AI 지원을 통해 생성된 코드 비율이 지속적으로 증가함
    • 이는 AI 기반 제안에서 수락된 문자 수를 수동으로 입력한 문자 수와 AI 기반 제안에서 수락된 문자 수의 합으로 나눈 값으로 정의됨
    • 주목할 점은 복사-붙여넣기에서 가져온 문자는 분모에 포함되지 않는다는 것임
  • 여러 도구에서 오랜 기간 동안 큐레이션해온 내부 소프트웨어 엔지니어링 활동에 대한 방대하고 고품질의 로그를 사용함
    • 이 데이터를 통해 세분화된 코드 편집, 빌드 결과, 빌드 문제 해결을 위한 편집, 코드 복사-붙여넣기 작업, 붙여넣은 코드 수정, 코드 검토, 검토자 문제 해결을 위한 편집, 저장소에 변경 사항 제출 등을 표현할 수 있음
  • 훈련 데이터는 입력과 출력 모두에서 작업별 주석이 달린 정렬된 코드 말뭉치임
  • 다음으로 중요한 배포는 코드 리뷰 의견 해결(현재 8% 이상이 AI 기반 지원으로 처리됨)과 붙여넣은 코드를 주변 컨텍스트에 자동으로 적응시키는 것(현재 IDE에서 코드의 약 2%를 차지함)이었음
  • 추가 배포에는 자연어로 IDE에 코드 편집을 지시하고 빌드 실패에 대한 수정 사항을 예측하는 것이 포함됨
    • 유사한 패턴을 따르는 코드 가독성을 위한 팁 예측과 같은 다른 응용 프로그램도 가능함
  • 함께 이러한 배포된 응용 프로그램은 Google에서 성공적이고 많이 사용되는 응용 프로그램이었으며, 실제 산업 환경에서 생산성에 측정 가능한 영향을 미쳤음

배운 것들

  • 현재까지의 작업을 통해 몇 가지 사실을 배웠음:
    1. 사용자의 워크플로우에 자연스럽게 녹아드는 UX로 가장 높은 영향력을 달성함. 위의 모든 예에서 사용자에게 제안이 제시되어 한 번의 탭이나 클릭으로 워크플로우의 다음 단계로 이동함. 사용자가 기능을 트리거해야 한다는 것을 기억하도록 요구하는 실험은 확장하지 못했음
    2. AI 기반 제안을 통해 코드 작성자가 점점 더 리뷰어가 되고 있음을 관찰함. 리뷰 비용과 부가 가치 사이의 균형을 찾는 것이 중요함. 일반적으로 수용률 목표로 절충안을 해결함
    3. 오프라인 메트릭은 종종 사용자 가치의 대략적인 대리자에 불과하므로 온라인 A/B 실험을 통한 신속한 반복이 핵심임. AI 기반 기능을 내부 도구에 노출함으로써 쉽게 출시 및 반복하고, 사용 데이터를 측정하며, UX 리서치를 통해 사용자에게 직접 경험을 물어볼 수 있다는 점에서 큰 이점이 있음
    4. 우리 기능과의 상호 작용을 포함하여 소프트웨어 도구 전반에 걸친 Google 엔지니어의 활동에서 얻은 고품질 데이터는 모델 품질에 필수적임
  • UX와 모델 개선을 활용하여 중간 단계의 병목 현상을 제거하면서, 기회(대부분 사용자 활동, 아래 깔때기 상단에 표시됨)에서 영향(적용된 AI 지원, 깔때기 하단)까지의 전환을 최적화하는 것이 중요함

What's Next

  • 지금까지의 성공에 고무되어 최신 기반 모델(Gemini 시리즈)을 개발자 데이터(위에서 언급한 DIDACT의 일부)와 결합하여 Google의 소프트웨어 엔지니어링에 ML을 적용하는 기존 및 새로운 애플리케이션에 힘을 실어주는 데 주력하고 있음
  • 업계 전반에 걸쳐 ML 기반 코드 완성은 소프트웨어 개발자에게 큰 도움을 제공했음
    • 코드 생성을 개선할 기회는 여전히 있지만, 다음 단계의 혜택은 테스트, 코드 이해 및 코드 유지 관리와 같은 더 광범위한 소프트웨어 엔지니어링 활동에서 ML 지원으로부터 나올 것으로 기대됨
    • 후자는 엔터프라이즈 환경에서 특히 관심이 높음
    • 이러한 기회는 우리 자신의 진행 중인 작업에 정보를 제공함
  • 업계에서 볼 수 있는 두 가지 트렌드를 강조함:
    1. 인간-컴퓨터 상호 작용은 일반적인 양식으로 자연어 쪽으로 이동했으며, 소프트웨어 엔지니어링 작업에 대한 인터페이스로 언어를 사용하고 IDE에 통합된 소프트웨어 개발자의 정보 요구에 대한 게이트웨이로 사용하는 방향으로 전환되고 있음
    2. 문제 진단부터 수정 사항 적용까지 대규모 작업의 ML 기반 자동화는 초기 실현 가능성에 대한 증거를 보여주기 시작했음
      • 이러한 가능성은 에이전트와 도구 사용의 혁신에 의해 주도되며, 이는 더 큰 작업을 수행하기 위해 하나 이상의 LLM을 구성 요소로 사용하는 시스템을 구축할 수 있게 해줌
  • 이러한 차세대 기능을 향한 위의 성공을 확장하기 위해, 이 주제에 대해 연구하는 실무자와 연구자 커뮤니티는 실용적인 엔지니어링 작업을 향해 분야를 이동하는 데 도움이 되는 공통 벤치마크의 혜택을 받을 수 있음
    • 지금까지 벤치마크는 주로 코드 생성(예: HumanEval) 중심이었음
    • 그러나 엔터프라이즈 환경에서는 코드 마이그레이션 및 프로덕션 디버깅과 같은 더 광범위한 작업에 대한 벤치마크가 특히 가치 있을 수 있음
    • 버그 해결(예: SWEBench)을 위한 벤치마크와 그러한 벤치마크를 대상으로 하는 프로토타입(예: Cognition AI)이 발표되었음
  • 더 광범위한 소프트웨어 엔지니어링 작업을 포괄하기 위해 더 많은 벤치마크를 제안하기 위해 커뮤니티가 함께 모이기를 권장함

GN⁺의 의견

  • AI의 빠른 진화: AI 기술이 빠르게 발전하고 있어, 최신 기술을 지속적으로 학습하고 적용하는 것이 중요함.
  • UX와 모델 품질: 사용자 경험과 모델 품질이 AI 도구의 성공에 중요한 요소임.
  • 데이터의 중요성: 고품질 데이터가 AI 모델의 성능을 크게 좌우함.
  • 미래의 가능성: AI가 소프트웨어 엔지니어링의 다양한 측면에서 더 큰 역할을 할 가능성이 있음.
  • 산업 트렌드: 자연어 인터페이스와 대규모 작업 자동화가 소프트웨어 개발의 미래를 이끌 것임.
Hacker News 의견
  • AI가 제대로 사용될 때, 두 가지 역할을 함: 1) 논란 없는 수정으로 개발자의 시간을 절약하고 인지 부하를 줄임. 2) 제안을 통해 사용자를 더 똑똑하고 지식 있게 만듦. 예를 들어, 코드 완성 기능이 잘 작동할 때가 있음.

  • AI 도구가 사용자가 기능을 트리거해야 할 때 "확장에 실패"한다는 흥미로운 주장 있음. IDE 내에서 AI가 유용하게 디자인 수준과 개념적 아이디어를 제안하는 방법에 대해 고민 중.

  • AI 기반 제안으로 인해 코드 작성자가 점점 리뷰어가 되는 현상 관찰됨. 리뷰 비용과 추가 가치 사이의 균형을 찾는 것이 중요함.

  • GPT-4를 사용하여 React UI와 Python UI를 몇 분 만에 생성하고 코드를 리뷰하여 작동 방식을 이해하는 것이 유용하다고 느꼈음.

  • 인간의 제한된 RAM 때문에 아이디어를 외부 매체에 넣어야 함. AI의 제안이 초기 단계를 더 빠르게 진행하는 데 도움을 줌.

  • LLMs(대규모 언어 모델)가 프로그래밍에 유용하다는 것은 부인할 수 없음. 더 매끄럽게 만들기 위한 올바른 UX가 핵심 도전 과제임. 자동 완성 기능을 사용해 보았으나, 대부분의 제안이 좋지 않아 비활성화함.

  • ChatGPT 데스크탑 앱을 사용하여 코드 질문을 하는 것이 더 유용하다고 느꼈음. 그러나 매번 세부 사항을 설명해야 하는 것이 번거로움.

  • AI 지원 코드 작성 비율이 50%까지 증가하는 추세가 흥미로움.

  • AI가 요청한 작업을 수행하는 방법을 알려주지만, 그것이 나쁜 아이디어라는 것을 알려주지 않음. ML 생성 코드의 품질은 훈련 데이터에 달려 있음.

  • AI가 Google의 소프트웨어 엔지니어를 완전히 대체하는 데 얼마나 걸릴지 궁금함.

  • AI의 궁극적인 목표는 시스템을 운영하고, 앱을 디버그하며, 데이터 스토어를 관리하고, 사용자 피드백과 요구 사항 설명에 따라 앱 코드를 작성하는 것임.

  • AI 도구를 실험하는 것은 좋지만, 다른 사람들이 맹목적으로 복사하는 것은 부정적인 영향을 미칠 수 있음. LLM을 사용한 코드 작성의 주요 판매 포인트를 찾기 어려움.