Prompt Engineering Github Copliot
-깃허브와 깃허브 코파일럿으로 하는 프롬프트 엔지니어링-
Reference by Ms learn의 AI Prompt Engineering
-깃허브와 깃허브 코파일럿으로 하는 프롬프트 엔지니어링-
Reference by Ms learn의 AI Prompt Engineering
🍀 프롬프트 엔지니어링이란?
프롬프트 엔지니어링은 GitHub Copilot과 같은 AI 시스템이 프로젝트의 특정 요구 사항에 맞는 상황에 맞는 코드를 생성하도록 안내하는 명확한 지침을 작성하는 프로세스입니다. 이를 통해 코드가 구문적(syntacically), 기능적(functionally), 상황적(contextually)으로 올바른지 확인합니다. 운전자(driver)에게 정확한 방향을 알려주는 것과 같다고 생각하면 됩니다. 프롬프트 엔지니어링 없이는 출력 및 생산이 비효율적일 수 있습니다. 그러나 명확한 안내가 있으면 경로가 직접적이고 효율적이 되어 시간과 에너지가 절약됩니다. 그 명확한 안내를 '프롬프트 엔지니어링'이라고 합니다. 비유적으로 표현하자면 이 시나리오에서 엔지니어(개발자)는 방향을 제공하는 사람이고 GitHub Copilot은 올바른 지침을 통해 코딩 여정을 원활하게 진행할 준비가 된 숙련된 운전자입니다.
🍀 신속한 엔지니어링의 원리는?
구체적인 전략을 살펴보기 전에 먼저 아래 4S's 로 요약된 프롬프트 엔지니어링의 기본 원칙을 이해해 보겠습니다 . 이러한 핵심 규칙은 효과적인 프롬프트를 만드는 기초입니다.
단일(Single) : 항상 잘 정의된 단일 작업이나 질문에 프롬프트의 초점을 맞추세요. 이러한 명확성은 Copilot으로부터 정확하고 유용한 응답을 이끌어내는 데 매우 중요합니다.
구체적 (Specific): 지침이 명확하고 상세해야 합니다. 특이성은 보다 적용 가능하고 정확한 코드 제안으로 이어집니다.
짧게 (Short): 구체적이면서도 간결하고 요점을 명확하게 전달하세요. 이 균형은 Copilot에 과부하를 주거나 상호 작용을 복잡하게 하지 않으면서 명확성을 보장합니다.
서라운드(Surround) : 설명적인 파일 이름을 활용하고 관련 파일을 열어 둡니다. 이는 Copilot에 풍부한 컨텍스트를 제공하여 더욱 맞춤화된 코드 제안을 제공합니다.
이러한 핵심 원칙은 효율적이고 효과적인 프롬프트를 만들기 위한 기반을 마련합니다. 4S를 염두에 두고 GitHub Copilot과의 각 상호 작용이 최적화되도록 보장하는 고급 모범 사례에 대해 더 자세히 살펴보겠습니다.
🍀 프롬프트 엔지니어링의 모범 사례는?
'단일' 및 '특정' 원칙을 바탕으로 프롬프트에서 항상 명확성을 목표로 해아합니다. 예를 들어, "주어진 목록에서 짝수를 필터링하고 반환하는 Python 함수 작성"과 같은 프롬프트는 단일 초점을 맞추고 구체적입니다. 아래 영어를 번역하여 한글로 프롬프트를 작성해 보세요.
'서라운드(Surround)' 원리에 따라 맥락을 통해 Copilot의 이해를 풍부하게 합니다. 더 많은 상황별 정보가 제공될수록 생성된 코드 제안이 더 적합해집니다. 예를 들어 코드 상단에 몇 가지 주석을 추가하여 원하는 내용에 대한 자세한 내용을 제공하면 Copilot에 더 많은 컨텍스트를 제공하여 프롬프트를 이해하고 더 나은 코드 제안을 제공할 수 있습니다.
예제를 사용하면 요구사항과 기대치를 명확하게 하여 추상적인 개념을 설명하고 Copilot에 대한 프롬프트를 더욱 구체적으로 만들 수 있습니다.
GitHub Copilot의 잠재력을 최대한 활용하는 열쇠 중 하나는 반복 연습입니다. 첫 번째 프롬프트에서 항상 완벽한 코드가 나오지 않을 수도 있지만 그래도 괜찮습니다. 첫 번째 출력이 원하는 결과가 아닌 경우 이를 대화의 한 단계로 처리하셔야 합니다. 제안된 코드를 지우고 추가된 세부 정보와 예제로 초기 주석을 강화한 다음 Copilot을 다시 프롬프트하시면 됩니다.
프롬프트 기술을 향상시키기 위한 모범 사례를 배웠으므로 이제 Copilot에서 배울 수 있는 예제를 제공할 수 있는 방법을 자세히 살펴보겠습니다.
🍀 Copilot이 프롬프트를 통해 학습하는 방법
여기에서 GitHub Copilot은 기초 교육에만 의존하여 구체적인 예 없이 코드를 생성합니다. 예를 들어, 섭씨와 화씨 사이의 온도를 변환하는 함수를 생성한다고 가정해 보겠습니다. 원하는 것을 설명하는 설명만 작성하면 시작할 수 있으며, Copilot은 다른 예제 없이 이전 교육을 기반으로 코드를 생성할 수 있습니다.
🍃 원샷 학습
이 접근 방식을 사용하면 모델이 상황을 보다 잘 인식하는 응답을 생성하는 데 도움이 되는 단일 예가 제공됩니다. 이전의 제로 샷 예를 바탕으로 온도 변환 기능의 예를 제공한 다음 Copilot에 또 다른 유사한 기능을 생성하도록 요청할 수 있습니다. 그 모습은 다음과 같습니다.
이 방법에서 Copilot은 제로샷 예측 불가능성과 미세 조정의 정확성 사이의 균형을 유지하는 몇 가지 예를 제시합니다. 하루 중 시간에 따라 인사말을 보내는 코드를 생성한다고 가정해 보겠습니다. 다음은 해당 프롬프트의 몇 가지 버전입니다.
위 내용을 이해하시면 GPT 프롬프트 엔지니어링과 Github Copiot프롬프트 엔지니어링의 차이를 이해할 수 있을 것입니다. 기본은 GPT 프롬프트 엔지니어링입니다. 이를 이해하고 Copilot으로 코드를 설계하면 더 쉬운 이해가 됩니다.
🍀 Copilot의 프롬프트 프로세스
깃허브 코파일럿에게 프롬프트를 제시 했을 때 어떤 과정을 거쳐서 사용자(개발자)에게 출력되는지 그 순서를 확인해 봅시다.
아래 순서를 이해하면, 설계한 알고리즘의 흐름을 이해한 후 어떻게 '코드 생성' 명령을 내려야 하는지 통찰력이 생기게 됩니다.
안전한 프롬프트 전송 및 상황 수집
사용자 프롬프트는 HTTPS를 통해 안전하게 전송됩니다.
Copilot은 사용자 프롬프트와 함께 코드 컨텍스트, 파일 유형, 인접 열린 탭 등의 상황 정보를 수집합니다.
컨텐츠 필터링
Copilot은 개인 데이터, 증오심 표현 및 부적절한 콘텐츠를 필터링하여 생성된 코드에 이러한 요소가 포함되지 않도록 합니다.
컨텍스트 분석
Copilot은 수집된 컨텍스트 정보를 사용하여 사용자 프롬프트를 분석하고 의도를 추출합니다.
추출된 의도를 특정 코딩 작업이나 기능에 매핑합니다.
코드 생성
Copilot은 사용자의 코드 기본 설정에 맞는 코드 제안을 생성합니다.
적절한 함수 및 변수 이름을 제안하고, 구문과 컨텍스트 정확성을 보장하는 코드 블록을 작성합니다.
사용자 상호작용
생성된 코드를 사용자에게 제공하고, 사용자는 코드를 수락, 수정 또는 거부할 수 있습니다.
피드백 루프 시작
Copilot은 사용자의 피드백(수락, 수정, 거부)을 바탕으로 학습하여 향후 제안을 개선합니다.
다음 프롬프트에 대한 반복
사용자가 더 많은 프롬프트를 제공하면 Copilot은 반복적으로 사용자 요청을 처리하고 의도를 이해하여 코드 생성 기능을 지속적으로 개선합니다.
🍀 Copilot의 원리: LLM과 Fine-Tuning
LLMs(Large Language Models)은 인간의 언어를 이해, 생성, 조작이 가능하도록 훈력된 대형 언어 모델입니다. 엄청난 양의 텍스트 데이터(우리가 상상할 수 없는 정도의 데이터)이기 때문에 우리는 이를 사용할 때 '조정'하여 사용해야 합니다.
LLMs 를 이해하기 위해()서는 다음 4가지 요소를 고려해야 합니다.
훈련 데이터의 양(Volume of training data)
대형 언어 모델(LLM)은 다양한 출처에서 방대한 양의 텍스트에 노출됩니다. 이러한 노출은 언어, 문맥 및 다양한 형태의 의사소통에 관련된 복잡성을 폭넓게 이해할 수 있게 합니다.
맥락적(상황)인 이해력(Contextual understanding)
LLM은 문맥적으로 관련 있고 일관된 텍스트를 생성하는 데 뛰어납니다. 문맥을 이해하는 능력 덕분에 문장, 단락 또는 전체 문서를 문맥에 맞게 완성하거나 생성할 수 있습니다.
기계학습 그리고 AI 통합(Machine learning and Ai intergration)
LLM은 기계 학습과 인공지능 원리에 기초합니다. 수백만, 때로는 수십억 개의 매개변수를 가진 신경망으로, 훈련 과정에서 텍스트를 효과적으로 이해하고 예측하도록 미세 조정됩니다.
다재다능함(Versatility)
이 모델들은 특정 유형의 텍스트나 언어에 국한되지 않습니다. 다양한 작업을 수행할 수 있도록 맞춤화하고 미세 조정할 수 있어, 여러 도메인과 언어에 걸쳐 매우 유용하고 적용 가능합니다.
그래서 Fine-Tuning(이하, 미세 조정)이 필요하고, 미세조정을 하여 내가 원하는 생성 혹은 출력 형태를 받을 수 있게 됩니다. 미세 조정은 사전 훈련된 대형 언어 모델(LLM)을 특정 작업이나 도메인에 맞추기 위해 중요한 과정입니다. 이는 소스 모델이라고 불리는 대규모 사전 훈련 데이터셋에서 얻은 지식과 매개변수를 활용하면서, 타겟 데이터셋으로 알려진 더 작은 작업별 데이터셋에서 모델을 훈련하는 과정을 포함합니다. 이를 프롬프트를 사용하여 지속적으로 조정할 수 있습니다. 따라서 깃허브 코파일럿에서 '코드 설계를 넘어서 알고리즘 설계'를 할 때는 미세조정을 이해하고 이를 위하여 엔지니어링을 하는 것이 중요합니다.
학습은 계속됩니다(작성 중)
2024.06.02.