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

Maud Nalpas
Maud Nalpas

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

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

이는 다양한 크기의 모델에도 적용됩니다.

Gemini 또는 ChatGPT와 같은 대규모 LLM으로 구동되는 채팅 인터페이스는 최소한의 프롬프트로 만족스러운 결과를 얻을 수 있는 경우가 많습니다. 그러나 미세 조정되지 않은 더 작은 기본 LLM으로 작업할 때는 접근 방식을 조정해야 합니다.

LLM이 작을수록 성능이 낮고 정보를 가져올 수 있는 정보가 적습니다.

'더 작은 LLM'이란 무엇을 의미할까요?

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

이 문서에서 '작은 LLM'은 매개변수가 300억 개 미만인 모든 모델을 의미합니다. 현재 수백만 개에서 수십억 개의 매개변수가 있는 모델은 브라우저, 소비자급 기기에서 현실적으로 실행할 수 있습니다.

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

  • 기기 내/브라우저 내 생성형 AI.예를 들어 MediaPipe의 LLM Inference API(CPU 전용 기기에도 적합)와 함께 Gemma 2B를 사용하거나 브라우저에서 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 별 5개 중 4개**
스트랩이 느슨해서, 무거운 물건을 실으면 제 어깨를 파헤치기 시작했어요. 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 (최저)

Google의 보다 정교한 프롬프트와 퓨샷 프롬프팅 및 사고 연쇄 프롬프팅 기술을 결합하면 더 정확한 평점을 얻을 수 있습니다.

수동 출력 파싱 예상

항상 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 모드를 제공합니다.

현재 이러한 기능은 커스텀 모델 사용이나 MediaPipe LLM Inference API 또는 Transformers.js와 같은 브라우저 내 AI API를 사용하여 액세스된 소규모 LLM에서 항상 사용할 수 있는 것은 아닙니다. 이것이 반드시 기술적 제한은 아니지만 브라우저 내 AI API는 더 가벼운 경향이 있습니다.

Mind 토큰 한도

더 작은 LLM에 대한 프롬프트에는 예시나 자세한 안내가 포함되어야 하므로, 입력 토큰 한도가 있는 경우 시간이 더 길고 더 많은 부분을 차지할 수 있습니다.

또한 작은 모델은 입력 토큰 한도가 더 작은 경향이 있습니다. 예를 들어 Gemini 1.5 Pro에는 100만 개의 입력 토큰 제한이 있는 반면 Gemma 모델에는 8K 컨텍스트 기간이 있습니다.

한도에 도달하지 않도록 토큰 수 함수를 사용합니다.

예상 시간 조정

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

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

프롬프트 엔지니어 vs. 미세 조정?

웹 개발자의 경우 커스텀 학습 및 미세 조정보다 생성형 AI를 활용하는 데 프롬프트 엔지니어링이 선호됩니다. 그러나 일부 사용 사례, 특히 더 작은 LLM을 사용하는 경우에는 고급 프롬프트 엔지니어링만으로는 충분하지 않을 수 있습니다.

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

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