소규모 LLM을 위한 실용적인 프롬프트 엔지니어링

Maud Nalpas
Maud Nalpas

대규모 언어 모델의 효과는 제공하는 안내에 크게 좌우됩니다. 프롬프트 엔지니어링은 LLM에서 최상의 결과물을 얻을 수 있는 방식으로 질문을 작성하는 프로세스입니다. 이는 LLM 기반 기능을 구현하는 데 중요한 단계입니다.

프롬프트 엔지니어링은 반복적인 프로세스입니다. 다양한 LLM을 실험해 본 적이 있다면 더 나은 결과를 얻으려면 프롬프트를 조정해야 한다는 것을 알 수 있었을 것입니다.

크기가 다른 모델에도 적용됩니다.

Gemini 또는 ChatGPT와 같은 대규모 LLM을 기반으로 하는 채팅 인터페이스는 최소한의 프롬프트만으로 만족스러운 결과를 얻을 수 있습니다. 하지만 미세 조정되지 않은 기본값의 소형 LLM을 사용하는 경우 접근 방식을 조정해야 합니다.

소규모 LLM은 기능이 약하고 가져올 수 있는 정보 풀이 작습니다.

LLM 크기를 정의하는 것은 복잡하며 제작자가 항상 공개하지는 않습니다.

이 문서에서 '소규모 LLM'은 300억 개 미만의 매개변수를 사용하는 모델을 의미합니다. 현재 수백만 개에서 수십억 개에 이르는 매개변수가 있는 모델을 브라우저에서 소비자용 기기로 실행할 수 있습니다.

작은 LLM은 어디에 사용되나요?

  • 기기 내/브라우저 내 생성형 AI: 예를 들어 MediaPipe의 LLM 추론 API와 함께 Gemma 2B를 사용하거나(CPU 전용 기기에도 적합) 브라우저에서 Transformers.js와 함께 DistilBert를 사용하는 경우 웹 다운로드를 적절하게 유지하고 기기의 메모리 및 GPU/CPU 제약조건에 맞추기 위해 모델을 다운로드하고 사용자 기기에서 추론을 실행하는 것은 이러한 소형 LLM으로만 가능합니다.
  • 커스텀 서버 측 생성형 AI Gemma 2B, Gemma 7B 또는 Gemma 27B와 같은 소형 개방형 가중치 모델을 자체 서버에서 실행하고 원하는 경우 미세 조정할 수 있습니다.

시작하기

Gemini나 ChatGPT와 같은 대규모 LLM을 기반으로 하는 채팅 인터페이스는 최소한의 프롬프트만으로 만족스러운 결과를 얻을 수 있습니다. 하지만 소규모 LLM을 사용할 때는 접근 방식을 조정해야 합니다. 소규모 LLM은 기능이 약하고 가져올 수 있는 정보 풀이 작습니다.

맥락과 정확한 형식 안내 제공

소규모 LLM으로 최적의 결과를 얻으려면 더 자세하고 구체적인 프롬프트를 작성하세요.

예를 들면 다음과 같습니다.

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
입력 (검토) 출력 (등급)
  더 큰 LLM (Gemini 1.5) 소형 LLM (Gemma 2B)
핏이 정말 좋습니다. 무게를 잘 분산하며 하루 종일 트레킹을 해도 놀라울 만큼 편안합니다. 추천합니다. 5 별점 4개 중 5개**
끈이 약해서 무거운 짐을 넣으면 어깨에 파고들기 시작했습니다. 1 2/5

Gemini 1.5는 이 간단한 프롬프트로 원하는 출력을 제공하지만 Gemma의 출력은 만족스럽지 않습니다.

  • 형식이 잘못되었습니다. 평점에 정수를 요청했습니다.
  • 평점이 정확하지 않은 것 같습니다. 첫 번째 리뷰는 5성급 리뷰를 나타낼 만큼 열정적입니다.

이를 해결하려면 프롬프트 엔지니어링 기법, 원샷, 퓨샷, 멀티샷 프롬프트, 생각의 연쇄 프롬프트를 사용해야 합니다. 또한 명확한 형식 안내를 제공하고 모델이 전체 평점을 사용해야 한다고 주장해야 합니다.

예를 들면 다음과 같습니다.

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`
;
입력 (검토) 더 작은 LLM (Gemma 2B)을 사용한 출력

핏이 정말 좋습니다. 무게를 잘 분산하며 하루 종일 트레킹을 해도 놀라울 만큼 편안합니다. 추천합니다.

분석: 이 리뷰는 매우 긍정적이며 제품의 착용감과 편안함을 강조하여 제품에 대한 높은 만족도를 나타냅니다. 따라서 높은 평가를 받을 만합니다.

평점 (정수): 5

끈이 약해서 무거운 짐을 넣으면 어깨에 깊게 파고들기 시작했습니다.

**분석:** 리뷰에서 끈의 상당한 편안함 문제를 강조합니다. 또한 제품이 무거운 짐을 넣거나 장시간 외출하는 데 적합하지 않을 수 있음을 나타냅니다.

**평점:** 1 (가장 나쁨)

YouTube의 더 정교한 프롬프트는 샘플링 프롬프트 및 생각의 연쇄 프롬프트 기법과 함께 더 정확한 평가를 제공합니다.

수동 출력 파싱 예상

항상 LLM의 출력을 수동으로 정리하고 해석해야 하지만, 이는 특히 정제되지 않은 결과를 생성하고 사고의 연쇄를 요할 수 있는 소규모 LLM에 특히 해당합니다.

첫 번째 예에서는 생각의 연쇄 프롬프트를 사용했으므로 출력에 분석과 평가가 모두 포함되었으며 평가를 수동으로 파싱해야 합니다. 또한 이전 섹션의 출력에서 형식이 일관되지 않습니다. 모델이 마크다운을 출력하는 경우도 있지만 매번 그런 것은 아닙니다.

// Use try/catch to catch (parsing) errors
try {
 
// Parse the output for a rating
 
const int = /[1-5]/;
 
const ratingAsString = llmOutput.match(int)[0];
 
// Parse as int
 
const ratingAsInt = parseInt(ratingAsString);
 
// `checkRating` checks the rating is a number between 1 and 5, since the
 
// regEx may catch a number like "100"
 
const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console
.error('Error', e);
}

Mind API 차이점

일반적으로 대규모 LLM의 진입점인 Gemini API 또는 OpenAI와 같은 LLM 클라우드 API는 유용한 프롬프트 기능을 제공합니다. 예를 들어 Gemini 1.5 Pro는 시스템 안내JSON 모드를 제공합니다.

현재 이러한 기능은 커스텀 모델 사용 시나 브라우저 내 AI API(예: MediaPipe LLM 추론 API 또는 Transformers.js)를 사용하여 액세스하는 소규모 LLM의 경우 항상 사용할 수 있는 것은 아닙니다. 이는 반드시 기술적 제한사항은 아니지만 브라우저 내 AI API는 더 간소한 경향이 있습니다.

토큰 한도 주의

소규모 LLM의 프롬프트에는 예시나 더 자세한 안내가 포함되어야 하므로 더 길어지고 입력 토큰 한도(있는 경우)를 더 많이 차지할 수 있습니다.

또한 모델이 작을수록 입력 토큰 한도가 더 작습니다. 예를 들어 Gemini 1.5 Pro는 1백만 개의 입력 토큰 제한이 있는 반면 Gemma 모델은 8K 컨텍스트 윈도우가 있습니다.

토큰 수 함수를 사용하여 한도가 초과되지 않도록 합니다.

예상 시간 조정

엔지니어링 시간 추정치에 프롬프트 설계 및 테스트를 고려합니다.

API 차이와 토큰 제한으로 인해 더 큰 LLM의 프롬프트를 만드는 것보다 더 작은 LLM의 프롬프트를 만드는 데 더 많은 시간과 노력이 필요할 수 있습니다. LLM의 출력을 테스트하고 검증하는 데 더 많은 노력이 필요할 수도 있습니다.

프롬프트 엔지니어링과 미세 조정 비교

웹 개발자의 경우 커스텀 학습 및 미세 조정보다 프롬프트 엔지니어링을 사용하여 생성형 AI를 활용하는 것이 좋습니다. 하지만 일부 사용 사례에서는 특히 소규모 LLM을 사용하는 경우 고급 프롬프트 엔지니어링도 충분하지 않을 수 있습니다.

다음과 같은 경우 미세 조정을 사용하세요.

  • 특정 작업에 최고 수준의 정확성과 성능이 필요합니다. 미세 조정은 최적의 결과를 얻기 위해 모델의 내부 매개변수를 직접 조정합니다.
  • 태스크와 관련이 있고 선호하는 출력으로 이미 라벨이 지정된 잘 선별된 데이터가 있습니다. 효과적인 미세 조정을 위해서는 이 데이터가 필요합니다.
  • 동일한 목적으로 모델을 반복적으로 사용합니다. 미세 조정은 한 번 수행하고 특정 작업에 재사용할 수 있습니다.