초보자를위한 github : LLM이 원하는 것을 수행하는 방법
Github의 시즌 2에 다시 오신 것을 환영합니다. 초보자를위한 시즌 2에 오신 것을 환영합니다. 지금까지 Github Copilot을 사용하는 방법과 그 필수 기능 중 일부를 탐색했습니다. 오늘날 우리는 대형 언어 모델 (LLM)과 신속한 엔지니어링의 기본 사항에 대해 모두 배우게 될 것입니다.
https://www.youtube.com/watch?v=laf-lacf2qy
LLM은 강력하고 프롬프트 문제를 통해 우리와 상호 작용하는 방식입니다. 예를 들어, LLM에게 질문을 한 적이 있지만 실제로 무엇을 묻고 있는지 알 수는 없습니까? 프롬프트의 힘 (및 그들과 함께 제공되는 한계)을 이해하면 더욱 생산성이 높아질 수 있습니다.
이 게시물에서는 다음을 탐색 할 것입니다.
- LLM의 작동 방식 및 프롬프트 처리 방법.
- 가장 효과적인 프롬프트를 엔지니어링하는 방법.
- 우리가 원하는 결과를 얻지 못할 때 프롬프트 문제 해결 방법.
시작합시다!
LLM이란 무엇입니까?
대형 언어 모델은 인간과 같은 언어를 이해하고 생성하기 위해 큰 (따라서 이름) 양의 텍스트 데이터에 대해 훈련 된 AI의 한 유형입니다.
LLM은 이전 단어의 맥락에 근거하여 문장에서 다음 단어를 예측함으로써 관련이 있고 일관된 방식으로 인간에게 반응합니다. 일종의 초소형 자동 완성과 같은!
LLM을 사용할 때는 이해해야 할 세 가지 중요한 사항이 있습니다.
- 문맥: 이것은 LLM이 당신이 말하는 것을 이해하는 데 도움이되는 주변 정보입니다. 친구와 대화를 나눌 때와 마찬가지로, 문맥이 더 많을수록 대화가 더 의미가있을 것입니다.
- 토큰 : LLM의 경우 텍스트가 토큰 단위로 나뉩니다. 이것은 단어, 단어의 일부 또는 단 하나의 글자 일 수도 있습니다. AI 모델은 토큰을 처리하여 응답을 생성하므로 LLM과 함께 사용하는 토큰 수는 응답에 영향을 줄 수 있습니다. 너무 적은 토큰은 맥락이 부족할 수 있지만, 너무 많은 사람들은 AI 모델을 압도하거나 내장 토큰 한도에 부딪 칠 수 있습니다.
- 제한 사항 : LLM은 강력하지만 강력한 것은 아닙니다. LLM은 인간과 같은 언어를 이해하는 대신 교육 데이터의 패턴과 확률에 의존합니다. 교육 데이터에 대한 더 깊은 다이빙은이 게시물의 범위를 벗어나지 만 일반적으로 이상적인 데이터 세트는 다양하고 광범위합니다. 모델은 결코 완벽하지 않습니다. 때로는 환각, 잘못된 답변을 제공하거나 무의미한 반응을 줄 수 있습니다.
프롬프트는 무엇입니까?
프롬프트는 LLM에 특정 작업 또는 조치를 수행하도록 요청하는 자연어 요청입니다. 프롬프트는 토큰을 통해 모델 컨텍스트를 제공하고 모델의 잠재적 한계를 중심으로 작동하여 모델이 응답을 제공 할 수 있습니다. 예를 들어, “숫자의 계승을 계산하기 위해 JavaScript 함수를 작성하는”LLM을 프롬프트하면 교육 데이터를 사용하여 해당 작업을 수행하는 기능을 제공합니다.
특정 모델의 교육 방법에 따라 프롬프트를 다르게 처리하고 다른 코드를 제시 할 수 있습니다. 같은 모델조차도 다른 출력을 생성 할 수 있습니다. 이 모델은 비 결정적이므로 세 번도 같은 방식으로 프롬프트하고 세 가지 다른 결과를 얻을 수 있습니다. 그렇기 때문에 Openai의 GPT, Anthropic ‘s Claude 및 Google의 Gemini와 같은 세계의 다양한 모델에서 다른 출력을받을 수 있습니다.
이제 우리는 프롬프트가 무엇인지 알았으므로 프롬프트를 사용하여 원하는 출력을 얻는 방법은 무엇입니까?
신속한 엔지니어링이란 무엇입니까?
친구가 작업을 완료하는 데 도움이된다고 상상해보십시오. 작업을 수행 해야하는 특정 방법이있는 경우 명확하고 간결한 지침을 제공하는 것이 중요합니다. LLM의 경우에도 마찬가지입니다. 잘 만들어진 프롬프트는 모델이 원하는 것을 정확하게 이해하고 전달하는 데 도움이 될 수 있습니다. 이러한 프롬프트를 제작하는 행위는 신속한 엔지니어링입니다.
그렇기 때문에 올바른 프롬프트를 제작하는 것이 매우 중요합니다.이 작업이 제대로 완료되면 프롬프트 엔지니어링은 LLM에서 얻은 출력의 품질과 관련성을 크게 향상시킬 수 있습니다.
다음은 효과적인 프롬프트의 몇 가지 주요 구성 요소입니다.
- 효과적인 프롬프트는입니다 명확하고 정확합니다모호성이 모델을 혼동 할 수 있기 때문입니다.
- 제공하는 것도 중요합니다 충분한 문맥그러나 이것은 LLM을 압도 할 수 있기 때문에 너무 세부적인 것은 아닙니다.
- 당신이 기대하는 답을 얻지 못하면 잊지 마십시오 반복하고 개선하십시오 당신의 프롬프트!
시도해 봅시다!
예 : 더 효과적이라는 프롬프트를 개선하는 방법
Github Copilot을 사용하고 있다고 상상해보십시오. Write a function that will square numbers in a list
사전 코드가없는 새 파일에서 Coplot 컨텍스트를 제공합니다. 처음에는 간단하고 효과적인 프롬프트처럼 보입니다. 그러나 명확하지 않은 많은 요소가 있습니다.
- 기능을 어떤 언어로 작성해야합니까?
- 음수를 포함 하시겠습니까?
- 입력에 숫자가 아닌 사람이 있습니까?
- 주어진 목록에 영향을 미치거나 새 목록을 반환해야합니까?
이 프롬프트가 어떻게 더 효과적이기 위해이 프롬프트를 개선 할 수 있습니까? 변경하겠습니다. Write a Python function that takes a list of integers and returns a new list where each number is squared, excluding any negative numbers.
이 새로운 프롬프트는 우리가 사용하려는 언어, 기능이 무엇을 해야하는지, 어떤 제약이 있는지, 예상 입력 유형에 대해 명확하고 구체적입니다. 우리가 Github Copilot을 더 많은 컨텍스트에 제공 할 때, 출력은 우리가 원하는 것과 더 잘 일치 할 것입니다!
코딩과 마찬가지로 신속한 엔지니어링은 효과적인 커뮤니케이션에 관한 것입니다. 프롬프트를 신중하게 제작함으로써 Github Copilot과 같은 도구를보다 효과적으로 사용하여 워크 플로를 더 매끄럽고 효율적으로 만들 수 있습니다. 즉, LLMS로 작업한다는 것은 여전히 약간의 문제 해결을 요구하는 몇 가지 사례가 있음을 의미합니다.
LLM을 유발할 때 결과를 개선하는 방법
GitHub Copilot 및 기타 LLM 도구를 계속 사용하면 원하는 출력을 얻지 못할 수도 있습니다. 종종, 초기 프롬프트가 충분히 구체적이지 않았기 때문입니다. 다음은 LLM을 프롬프 할 때 발생할 수있는 몇 가지 시나리오입니다.
즉각적인 혼란
프롬프트를 작성할 때 여러 요청을 혼합하거나 불분명하게 사용하는 모델을 혼동 할 수 있습니다. Visual Studio Code에서 무언가를 강조 표시하고 Copilot에 알려주십시오. fix the errors in this code and optimize it.
AI가 오류를 고치거나 먼저 최적화해야합니까? 그 문제에 대해 무엇을 최적화해야합니까? 속도, 기억 또는 가독성?
이를 해결하려면 프롬프트를 컨텍스트로 구체적인 단계로 나누어야합니다. 우리는 요청을 분리 하여이 프롬프트를 조정할 수 있습니다. First, fix the errors in the code snippet. Then, optimize the fixed code for better performance.
프롬프트를 반복적으로 구축하면 모델이 취해야하는 특정 단계가 더 명확하기 때문에 원하는 결과를 얻을 가능성이 높아집니다.
토큰 제한
토큰은 모델이 처리 할 수있는 단어 또는 부분 단어 단위입니다. 그러나 주어진 모델이 한 번에 처리 할 수있는 토큰 수에는 한계가 있습니다 (모델마다 다르며 Github Copilot과 함께 사용할 수있는 모델이 있습니다). 프롬프트가 너무 길거나 예상 출력이 매우 광범위한 경우, LLM은 환각, 부분 응답을 제공하거나 완전히 실패 할 수 있습니다.
그것은 당신이 당신의 프롬프트를 간결하게 유지하고 싶다는 것을 의미합니다. 다시 말하지만, 프롬프트의 작은 부분에서 반복하는 것이 중요하지만 필요한 상황 만 제공하는 것이 중요합니다. LLM은 실제로 원하는 출력을 반환하기 위해 전체 코드 파일이 필요합니까, 아니면 특정 함수에서 몇 줄의 코드만이 트릭을 수행합니까? 전체 응용 프로그램을 생성하도록 요청하는 대신 각 구성 요소를 단계별로 만들도록 요청할 수 있습니까?
가정 오류
LLM이 실제보다 더 많이 알고 있다고 가정하는 것은 쉽습니다. 당신이 말하면 add authentication to my app,
모델은 앱이 무엇을하는지 알고 있습니까? 인증에 사용하려는 기술을 알고 있습니까?
이와 같은 프롬프트를 제작할 때는 요구 사항을 명시 적으로 명시해야합니다. 이는 특정 요구 사항을 설명하고 모범 사례를 언급하고 다시 한 번 에지 케이스 및 제한과 반복하여 수행 할 수 있습니다. 요구 사항을 명시함으로써 LLM이 출력을 생성 할 때 요청의 중요한 측면을 간과하지 않도록 도와줍니다.
신속한 엔지니어링 모범 사례
프롬프트 엔지니어링은 까다로울 수 있지만 더 좋아질수록 더 좋아질 수 있습니다. 다음은 Github Copilot 또는 다른 LLM으로 작업 할 때 기억해야 할 모범 사례입니다.
- 한계를 고려하면서 모델에 충분한 맥락을 제공하십시오.
- 프롬프트는 최상의 결과를 얻기 위해 명확하고 간결하며 정확해야합니다.
- 여러 작업이 완료되면 프롬프트를 작은 청크로 나누고 거기에서 반복하십시오.
- 모델이 프롬프트를 둘러싼 제약을 정확하게 이해하도록 요구 사항과 요구 사항에 대해 구체적으로 설명하십시오.
다음 단계
우리는 프롬프트 엔지니어링과 관련하여 상당히 다루었습니다. 우리는 LLM이 무엇인지, 그리고 맥락이 중요한 이유, 신속한 엔지니어링 및 효과적인 프롬프트를 제작했으며, 큰 언어 모델로 작업 할 때 일반적인 함정을 피하는 방법을 배웠습니다.
- 이 데모를 실제로보고 싶다면 YouTube 튜토리얼 이 블로그와 함께 제공됩니다.
- 질문이 있으시면 Github 커뮤니티 스레드 그리고 우리는 반응 할 것입니다.
- Github Copilot에 가입하여 무료로 시작하려면 시작하십시오.
- 보안 모범 사례를 살펴볼 시리즈의 다음 부분에 참여하십시오.
행복한 코딩!
Github Copilot에 대해 더 많이 알고 싶으십니까?
무료로 Github Copilot을 사용해 보거나 Copilot에 대한 자세한 내용을 읽으십시오.
작성자가 작성했습니다
Post Comment