paint-brush
프롬프트 및 프롬프트 엔지니어링 소개~에 의해@aibites
5,833 판독값
5,833 판독값

프롬프트 및 프롬프트 엔지니어링 소개

~에 의해 Shrinivasan Sankar8m2023/06/27
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

프롬프트 엔지니어링과 프롬프트 엔지니어링은 2023년에 가장 수요가 많은 기술입니다. [대형 언어 모델]의 급속한 성장으로 프롬프트 엔지니어링이라는 새로운 AI 분야가 등장했습니다. 이 기사에서는 프롬프트가 무엇인지, 프롬프트 엔지니어가 수행하는 작업은 무엇인지, 프롬프트 엔지니어가 작업하는 프롬프트의 다양한 요소에 대해 간략하게 살펴보겠습니다.
featured image - 프롬프트 및 프롬프트 엔지니어링 소개
Shrinivasan Sankar HackerNoon profile picture
0-item
1-item

프롬프트 엔지니어링과 프롬프트 엔지니어링은 2023년에 가장 수요가 많은 기술입니다 . 대규모 언어 모델 LLM의 급속한 성장으로 프롬프트 엔지니어링이라는 새로운 AI 분야가 등장했습니다. 이 기사에서는 프롬프트가 무엇인지, 프롬프트 엔지니어가 수행하는 작업은 무엇인지, 프롬프트 엔지니어가 작업하는 프롬프트의 다양한 요소에 대해 간략하게 살펴보겠습니다.

프롬프트란 정확히 무엇입니까?

프롬프트는 단순히 "훈련된" 모델에 제공하는 입력입니다. 훈련된 모델이라고 하면 모델의 가중치는 고정되거나 고정되어 프롬프트 프로세스 중에 변경되지 않습니다. 이제 우리가 모델을 훈련하고 기계 학습 모델에 추론을 배포하고 실행했기 때문에 이것이 추론과 어떻게 다른지 궁금할 것입니다. 요점은 추론을 통해 입력이 고정된다는 것입니다. 우리는 결코 이를 변경하지 않으며 모델이 출력으로 제공하는 것이 무엇이든 결과로 받아들입니다. 이미지 분류를 예시 작업으로 생각해 보세요.


그러나 프롬프트를 사용하면 단일 입력으로 제한되지 않습니다. 필요에 따라 입력을 조정하여 모델의 동작을 개선할 수 있습니다. 모델을 올바른 답으로 이끌려는 의도로 모델을 지시하는 것이 더 중요합니다. 추론과 관련하여 모델을 주어진 것으로 받아들이는 동안 프롬프트를 통해 모델의 기능과 한계를 연구하게 됩니다.


귀하에게 최상의 서비스를 제공하기 위해 당면한 문제에 맞게 이러한 입력을 설계하거나 엔지니어링하는 기술은 프롬프트 엔지니어링 이라는 상당히 새로운 분야를 탄생시킵니다.


신속한 엔지니어링

프롬프트 엔지니어링에 대해 알아보기 전에 예제를 통해 프롬프트 엔지니어링의 동기나 필요성을 이해해 보겠습니다. 주어진 구절을 요약하고 싶다고 가정해 보겠습니다. 그래서 나는 Wikipedia의 큰 구절을 입력으로 제공하고 마지막에는 " 위 단락을 요약합니다 "라고 말합니다. LLM에서 답변을 얻기 위해 프롬프트에 간단한 지침을 제공하는 이러한 방식을 지침 프롬프트 라고 합니다.


좀 더 복잡한 수학 사례로 이동하여 LLM에게 두 숫자를 곱하도록 요청해 보겠습니다. " 2343*1232는 무엇입니까?"라는 프롬프트를 시도해 보겠습니다. 우리가 얻는 답은 " 23431232 "입니다. 이는 분명히 두 숫자의 곱셈이 아니라 두 숫자를 합친 것입니다.


이제 프롬프트를 수정하고 프롬프트에 " 2343에 1232를 곱한 값은 무엇입니까? 곱셈 후 정확한 답을 알려주세요 "라는 추가 줄을 추가하겠습니다. 이제 LLM으로부터 정답인 " 2886576 "을 얻었습니다.


따라서 모델 출력의 품질은 프롬프트의 품질에 따라 결정됩니다. 여기서 신속한 엔지니어링이 시작됩니다. 프롬프트 엔지니어의 목표는 모델의 출력 품질을 평가 하고 더 나은 출력을 얻기 위해 프롬프트에서 개선 영역을 식별하는 것입니다. 따라서 프롬프트 엔지니어링은 LLM을 이해하고 좋은 프롬프트를 설계하려는 의도로 시행착오를 통해 LLM의 기능과 한계를 연구하는 고도로 실험적인 학문 입니다.

프롬프트 요소

프롬프트를 엔지니어링하거나 디자인하려면 프롬프트의 다양한 요소를 이해해야 합니다. 프롬프트에는 다음 요소 중 하나 이상이 포함될 수 있습니다.


프롬프트는 모델에게 작업을 요청하는 지침 일 수 있습니다. 이 예에서는 방대한 텍스트 본문을 제공하고 모델에 이를 요약하도록 요청했습니다.


프롬프트에는 선택적으로 더 나은 서비스를 제공하기 위해 모델에 대한 컨텍스트가 포함될 수 있습니다. 예를 들어, 영국 문화유산에 대해 질문이 있는 경우 먼저 "영국 문화유산은 세계적으로 유명한 선사 시대 유적지부터 웅장한 중세 성, 로마 요새에 이르기까지 400개 이상의 역사적인 기념물, 건물 및 장소를 관리합니다."와 같은 맥락을 제공할 수 있습니다. …” 그리고 다음과 같은 질문을 합니다. “ 영국 최대의 문화유산은 어디입니까?


프롬프트의 일부로 출력을 보려는 형식을 지시할 수도 있습니다. 따라서 프롬프트는 선택적으로 출력 표시기를 가질 수 있습니다. 예를 들어, “ 영국의 모든 영국 문화유산 목록, 위치 및 전문 분야를 알고 싶습니다 .”라고 질문할 수 있습니다. 결과를 표 형식으로 원합니다 .”


또는 더 나은 응답을 원할 경우 다음 구문을 사용하여 원하는 형식을 입력하여 출력에서 열과 행을 보려는 것을 나타낼 수 있습니다.


Desired format:

Company names: <comma_separated_list_of_sites>

Sites: -||-Location: -||-Speciality: -||-


프롬프트에는 모델에서 예상되는 내용에 대한 예제 입력을 제공하는 하나 이상의 입력 데이터가 포함될 수 있습니다. 감정 분류의 경우 의도를 보여주기 위해 예제를 제공하기 시작하고 응답에 어떤 설명도 원하지 않는다고 지정하는 이 프롬프트를 살펴보세요.


Text: Today I saw a movie. It was amazing.

sentiment: Positive

Text: I don't very good after seeing that incident.

sentiment:

프롬프트 유형 - 샷

프롬프트에서 예를 제시하는 이러한 방식은 예를 보여줌으로써 인간에게 설명하는 방법과 유사합니다. 프롬프팅 세계에서는 이를 퓨샷 프롬프팅 이라고 합니다. 우리는 작업의 입력과 출력을 모두 갖춘 고품질 예제를 제공합니다. 이런 방식으로 모델은 사용자가 추구하는 바를 이해하고 훨씬 더 잘 반응합니다.


우리의 예를 확장하면, 구절의 감정을 알고 싶다면 "그 구절의 감정이 무엇입니까?"라고 묻는 대신 출력에서 가능한 클래스를 다루는 몇 가지 예를 제공할 수 있습니다. 이 경우 긍정적이고 부정적인 경우:


Text: Today I saw a movie. It was amazing.

sentiment: Positive

Text: I don't very good after seeing that incident.

sentiment: Negative

Text: Lets party this weekend to celebrate your anniversary.

sentiment: Positive

Text: Walking in that neighbourhood is quite dangerous.sentiment: Negative

Text: I love watching tennis all day long

sentiment:


그런 다음 내가 입력한 마지막 텍스트에 응답하도록 모델을 떠날 수 있습니다. 일반적으로 5~8개의 예는 몇 번의 메시지를 표시하는 데 충분합니다. 지금쯤 추측할 수 있듯이 이 접근 방식의 단점은 프롬프트에 너무 많은 토큰이 있다는 것입니다. 간단하게 시작하려면 예제를 제공할 필요가 없지만 다음 프롬프트와 같이 문제로 바로 이동합니다.


Text: I love watching tennis all day long

sentimet:


이는 예시를 제공하지 않지만 모델이 적절하게 응답할 것으로 기대하는 제로샷 프롬프트 입니다. 일반적으로 프롬프트 엔지니어링에서는 더 간단하기 때문에 제로샷으로 시작하고 응답을 기반으로 더 나은 응답을 얻기 위해 예제를 제공하여 퓨샷으로 이동합니다.

프롬프트 유형 - 역할

LLM을 통해 전문적인 주제로 넘어가고 싶다면 역할을 할당하여 즉시 해당 분야의 전문가가 되도록 조종할 수 있으며 이를 역할 프롬프트 라고 합니다.


일반적으로 LLM이 수행해야 하는 전문가 역할로 프롬프트를 시작합니다. 그런 다음 수행해야 할 작업에 대한 지침을 따르십시오. 간단한 예로, 역할은 LLM에게 시인이 되도록 요청하는 것일 수 있고 지시는 AI Bites에 대한 시를 쓰는 것일 수 있습니다.


또는 LLM에 Linux 터미널 역할을 하도록 요청하면 약간 더 복잡해질 수 있습니다. 그리고 파일의 처음 10줄을 다른 파일에 복사하고 저장하는 구체적인 지침을 제공합니다. 설명을 제공하지 않도록 명시적으로 언급하여 출력에 다른 텍스트가 포함되지 않도록 할 수도 있습니다.


You are a poet.

Write a poem about AI Bites


Act as a linux terminalI want you to provide the shell command to read the contents of a file named "input.txt".Copy the first 10 lines to a different file with the name "new.txt" and save it.Do not give any explanations.

공식적인 프롬프트 구조


LLM에 입력할 수 있는 프롬프트의 다양한 요소

즉, 프롬프트의 구조를 공식화하기를 원한다면 이렇게 할 것입니다. 프롬프트는 일반적으로 프롬프트가 전문적인 주제에 관한 경우 모델이 수행해야 하는 역할로 시작됩니다. 그런 다음 LLM에 제공하고 싶은 지침이 있을 수 있습니다. 또한 LLM에 추가 정보를 제공하려는 경우 지침을 따라갈 수도 있습니다.


몇 번의 프롬프트를 수행하면 곧 고품질의 예제를 제공할 수 있습니다. 그런 다음 이러한 예 뒤에는 모델에 제공하려는 컨텍스트가 올 수 있습니다. 질문을 하고 aq 및 A 작업을 수행하려면 마지막에 질문을 포함할 수 있습니다.

프롬프트 형식

이제 프롬프트를 구성하는 요소가 무엇인지 살펴보았으므로 이러한 프롬프트의 형식을 지정하는 방법을 알면 더욱 좋습니다. 예를 들어 원하는 형식을 명시적으로 언급한 다음 실제로 해당 형식을 제공하는 것이 좋습니다.


Extract locations from the below textDesired format:Cities: <comma_separated_list_of_cities>Countries: <comma_separated_list_of_countries>Input: Although the exact age of Aleppo in Syria is unknown,an ancient temple discovered in the city dates to around 3,000 BC Excavations in the1990s unearthed evidence of 5,000 years of civilization,dating Beirut, which is now Lebanon's capital, to around 3,000 BC


마찬가지로 입력이나 컨텍스트의 경우 입력 뒤에 콜론을 붙인 다음 입력을 제공하는 것이 좋습니다.


예제를 제공할 때 이 예제와 같이 두 개의 해시로 분리하는 것이 좋습니다.

Text: Today I saw a movie. It was amazing.sentiment: Positive

Text: I don't very good after seeing that incident.sentiment: Negative


Text: Lets party this weekend to celebrate your anniversary.sentiment: PositiveText: Walking in that neighbourhood is quite dangerous.sentiment: Negative


입력을 제공하는 경우 다음 예와 같이 따옴표로 묶을 수 있습니다.

Text: """{text input here}"""


그런 다음 출력이 완료되었으므로 모델이 텍스트 대량 생산을 중지하도록 암시하는 중지 시퀀스 라는 것이 있습니다. 원하는 기호로 정지 순서를 선택할 수 있습니다. 하지만 여기서는 새로운 라인이 일반적인 옵션인 것 같습니다.


Text: "Banana",

Output: "yellow \\n"

Text: "Tomato",

Output: "red \\n"

Text: "Apple",

Output: "red \\n"


코드 생성 작업을 하는 경우 생성할 출력 코드를 보려는 언어에 따라 주석을 제공하는 것이 좋습니다.


/*

Get the name of the use as input and print it

*/


# get the name of the user as input and print it

비디오 보기

여기까지 읽으셨다면 기사가 마음에 드셨거나 AI에 대해 궁금하셨을 거라 생각합니다. 어쨌든 Prompt Engineering에 대한 동영상을 시청해 보세요. 이것은 Prompting에 관한 비디오 시리즈의 첫 번째 비디오입니다. 그러니 구독하고 계속 지켜봐 주시기 바랍니다!

결론

프롬프트, 프롬프트 엔지니어링 및 해당 유형에 대한 모든 소개를 통해 여기서는 표면적인 부분만 살펴보았습니다. 예를 들어, LLM에게 주어진 상황에 대해 추론하도록 어떻게 요청할 수 있습니까? 사고방식, 자기 일관성, 일반 지식 등과 같이 프롬프트를 표시하는 고급 방법이 있습니다. 다음 게시물과 동영상에서 이에 대해 살펴보겠습니다. 채널 고정 해주세요!