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

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

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

크기가 다른 모델에도 마찬가지입니다.

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

소형 LLM은 성능이 낮고 정보를 가져올 수 있는 정보 풀이 더 작습니다.

'소형 LLM'이란 무엇을 의미하나요?

LLM 크기를 정의하는 것은 복잡하며 제조업체에서 항상 공개하는 것은 아닙니다.

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

소형 LLM은 어디에 사용되나요?

  • 온디바이스/브라우저 내 생성형 AI: 예를 들어 Gemma 2B 를 MediaPipe의 LLM 추론 API (CPU 전용 기기에도 적합) 또는 브라우저에서 DistilBert와 함께 Transformers.js를 사용하는 경우입니다. 웹 다운로드를 적절하게 유지하고 기기의 메모리 및 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개 리뷰를 나타낼 만큼 열정적입니다.

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

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

`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 (최악)

더 정교한 프롬프트는 퓨샷 프롬프팅 및 연쇄적 사고(CoT) 프롬프팅 기법과 결합되어 더 정확한 평점을 제공합니다.

수동 출력 파싱 예상

항상 LLM의 출력을 수동으로 정리하고 해석해야 하지만, 특히 덜 세련된 결과를 생성하고 연쇄적 사고(CoT) 프롬프팅이 필요할 수 있는 소형 LLM의 경우 더욱 그렇습니다.

첫 번째 예에서는 연쇄적 사고(CoT) 프롬프팅을 사용했으므로 출력에 분석과 평점이 모두 포함되어 있으며 평점을 수동으로 파싱해야 합니다. 또한 이전 섹션의 출력에서 일관성 없는 형식을 확인하세요. 모델은 때때로 Markdown을 출력하지만 항상 그런 것은 아닙니다.

// 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);
}

API 차이점 고려

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

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

토큰 한도 고려

소형 LLM의 프롬프트에는 예시 또는 더 자세한 안내가 포함되어야 하므로 프롬프트가 더 길어지고 입력 토큰 한도가 있는 경우 더 많은 입력 토큰 한도를 차지할 가능성이 높습니다.

또한 소형 모델은 입력 토큰 한도가 더 작은 경향이 있습니다. 예를 들어 Gemini 1.5 Pro는 입력 토큰 한도가 100만 개이지만 Gemma 모델은 컨텍스트 윈도우가 8K입니다.

토큰 수 함수를 사용하여 한도에 도달하지 않도록 하세요.

시간 추정치 조정

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

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

프롬프트 엔지니어와 세부 조정?

웹 개발자의 경우 프롬프트 엔지니어링은 생성형 AI 커스텀 학습 및 세부 조정보다활용하는 데 선호하는 방법입니다. 하지만 고급 프롬프트 엔지니어링도 일부 사용 사례, 특히 소형 LLM을 사용하는 경우에는 충분하지 않을 수 있습니다.

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

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