Prompt Engineering-Tips and tricks for successful prompting with LLMs

박종영

Prompt Engineering-Tips and tricks for successful prompting with LLMs

텍스트-텍스트 형식으로 인해 대규모 언어 모델(LLM)은 단일 모델로 다양한 작업을 해결할 수 있습니다. 이러한 기능은 원래 GPT-2GPT-3과 같은 모델을 사용한 제로 및 퓨샷 학습을 통해 입증되었습니다[5, 6]. 그러나 인간의 선호도와 지침에 맞게 미세 조정되면 LLM은 더욱 매력적이 되어 코딩 어시스턴트, 정보 검색 대화 에이전트채팅 기반 검색 경험과 같은 인기 있는 생성 애플리케이션을 가능하게 합니다.

그들이 가능하게 하는 응용 프로그램으로 인해 LLM은 연구 커뮤니티와 대중 문화 모두에서 빠르게 명성을 얻었습니다. 이러한 상승 과정에서 우리는 또한 새롭고 보완적인 분야인 신속한 엔지니어링의 발전을 목격했습니다. 높은 수준에서 LLM은 i) 텍스트 (즉, 프롬프트)를 입력으로 사용하고 ii) 유용한 것을 추출 할 수있는 텍스트 출력 (예 : 분류, 요약, 번역 등)을 생성하는 방식으로 작동합니다. 이 접근 방식의 유연성은 유익합니다. 그러나 동시에 LLM이 원하는 출력을 생성 할 수있는 최상의 기회를 갖도록 입력 프롬프트를 올바르게 구성하는 방법을 결정해야합니다.

프롬프트 엔지니어링은 LLM 성능을 최적화하기 위해 다양한 프롬프트 전략을 사용할 수 있는 방법을 연구하는 경험적 과학입니다. 다양한 접근 방식이 존재하지만, 우리는 이 개요를 통해 프롬프트의 일반적인 메커니즘에 대한 이해와 제로/퓨샷 학습 및 지시 프롬프트와 같은 몇 가지 기본적인(그러나 믿을 수 없을 정도로 효과적인!) 프롬프트 기술에 대한 이해를 구축할 것입니다. 그 과정에서 우리는 보다 효과적인 신속한 엔지니어 및 LLM 실무자가 되기 위해 즉시 채택할 수 있는 실용적인 트릭과 테이크 아웃을 배울 것입니다.

(작성자 작성)

LLM 이해하기. 프롬프트에 초점을 맞추기 때문에 이 개요는 언어 모델의 역사메커니즘을 설명하지 않습니다. 언어 모델에 대한 일반적인 이해를 돕기 위해(속삭임을 깊이 이해하기 위한 중요한 전제 조건임) 사용 가능한 다양한 개요를 작성했습니다. 이러한 개요는 아래에 나열되어 있습니다(중요도 순으로).

  • 언어 모델링 기본 사항(GPT 및 GPT-2) [링크]
  • 언어 모델(GPT-3)에 대한 스케일의 중요성 [링크]
  • 현대 [링크] 및 전문 [링크] LLM
  • PaLM, T5(<>부 및 <>부), LLaMA(<>부 및 <>부))

한 눈에 확인

언어 모델은 일반적인 텍스트-텍스트 형식([1])을 사용하여 다양한 작업을 해결할 수 있습니다

LLM에 대한 현재의 과대 광고를 감안할 때, 우리는 스스로에게 물어볼 수 있습니다 : LLM을 그렇게 강력하게 만드는 근본적인 강점은 무엇입니까? 이 질문에 대한 단일 답변(예: 모델 규모, 방대한 사전 학습 데이터, 인간 피드백 등)은 없지만 LLM의 주요 강점 중 하나는 일반적인 텍스트-텍스트 형식입니다. 이 모델은 다음 토큰 예측의 전문가이며 이 기술을 적절하게 조정하고 활용하여 다양한 작업을 해결할 수 있습니다!

작업을 해결하기 위해 우리가 해야 할 일은 i) 관련 정보가 포함된 텍스트 입력을 모델에 제공하고 ii) 모델에서 반환된 텍스트에서 출력을 추출하는 것입니다. 이러한 통합 접근 방식은 번역, 요약, 질문 답변, 분류 등에 사용할 수 있습니다. 그러나 이야기는 그렇게 간단하지 않습니다. 즉, LLM에 제공된 프롬프트의 문구 및 구조(즉, 입력된 텍스트)는 모델의 정확도에 상당한 영향을 미칠 수 있습니다. 즉, 신속한 엔지니어링은 엄청난 문제입니다.

프롬프트 엔지니어링이란 무엇입니까?

"프롬프트 엔지니어링은 다양한 응용 분야 및 연구 주제에 LM을 효율적으로 사용하기 위해 프롬프트를 개발하고 최적화하기 위한 비교적 새로운 분야입니다." — [2]에서

프롬프트의 내용을 적절하게 만드는 것이 LLM으로 유용한 결과를 얻는 데 중요하다는 점을 감안할 때 프롬프트 엔지니어링은 최근 몇 달 동안 많은 관심을 받았습니다. 그러나 그것은 경험적 과학입니다 - 가능한 최상의 프롬프트를 발견하는 것은 일반적으로 휴리스틱 기반이며 실험이 필요합니다. 시간이 지남에 따라 프롬프트를 추적 및 버전 관리하고 다양한 아이디어를 테스트하여 어떤 것이 작동하는지 확인함으로써 더 나은 프롬프트를 발견할 수 있습니다.

지침으로 LLM 프롬프트 (작성자 작성)

프롬프트의 구성 요소입니다. 프롬프트를 만드는 방법에는 다양한 옵션이 있습니다. 그러나 대부분의 프롬프트는 동일한 몇 가지(선택 사항) 구성 요소로 구성됩니다.

  • 입력 데이터: LLM이 처리해야 하는 실제 데이터입니다(예: 번역 또는 분류되는 문장, 요약되는 문서 등).
  • 예시 : LLM에 대한 올바른 동작을 보여주는 가장 좋은 방법 중 하나는 프롬프트 내부에 입력-출력 쌍의 몇 가지 구체적인 예를 제공하는 것입니다.
  • 지시 사항 : 프롬프트에서 올바른 행동의 구체적인 예를 보여주는 대신 지시 사항을 통해 수행 할 작업을 텍스트로 설명 할 수 있습니다. 위 참조.
  • 지표 : 고정되고 예측 가능한 구조로 LLM에 입력을 제공하는 것이 도움이되므로 지표를 사용하여 프롬프트의 다른 부분을 분리 할 수 있습니다. 아래를 참조하십시오.
  • 컨텍스트 : 위에서 설명한 구성 요소 외에도 어떤 방식 으로든 LLM에 추가 "컨텍스트"또는 정보를 제공 할 수 있습니다.

표시기는 다양한 방법으로 프롬프트를 구성하는 데 사용할 수 있습니다(작성자 생성).

일반적인 팁. 프롬프트 엔지니어링의 세부 사항은 사용 중인 모델과 해결하려는 작업에 따라 많이 다릅니다. 그러나 명심해야 할 신속한 엔지니어링에 대해 일반적으로 인정되는 몇 가지 원칙이 있습니다[1, 3].

  • 간단하게 시작: 간단한 프롬프트로 시작한 다음 경험적 결과를 추적하면서 프롬프트를 천천히 수정합니다.
  • 직접적이어야 합니다: LLM이 특정 스타일이나 형식과 일치하도록 하려면 이를 명확하고 직접적으로 명시해야 합니다. 원하는 것을 정확히 말하면 메시지가 전달됩니다.
  • 특이성: 모호성은 모든 신속한 엔지니어의 적입니다. 너무 길거나 너무 긴 입력을 제공하지 않고 프롬프트를 상세하고 구체적으로 만들어야 합니다(즉, 프롬프트의 길이에 제한이 있습니다!).
  • 예시는 강력합니다: 우리가 원하는 것을 설명하는 것이 어렵다면, 여러 다른 입력에 대한 올바른 출력 또는 동작의 구체적인 예를 제공하는 것이 유용할 수 있습니다.

언어 모델에 대한 컨텍스트 창 시각화(작성자가 만듦)

컨텍스트 창입니다. 다양한 프롬프트 팁과 접근 방식을 고려할 때 프롬프트에 제한된 양의 정보만 포함할 수 있음을 기억해야 합니다. 모든 LLM에는 한 번에 처리할 수 있는 총 토큰 수(즉, 텍스트 시퀀스의 단어 또는 하위 단어)에 대한 제한을 설정하는 사전 정의된 컨텍스트 창이 있습니다. 컨텍스트 창 크기는 모델마다 다르지만 현재 컨텍스트 창 크기를 늘리는 방향으로 나아가고 있습니다. 예를 들어, GPT-4에는 OpenAI의 이전 모델보다 32배 더 큰 4K 토큰의 컨텍스트 창이 있습니다.

일반적인 프롬프트 기법

제로 및 소수 샷 학습의 출현 ([4, 5, 6]에서)

LLM은 ChatGPT와 같은 인기 모델로 인해 최근 폭발적으로 증가했지만 프롬프트는 한동안 존재해 왔습니다. 원래 GPT[4]와 같은 모델은 다운스트림 작업을 해결하기 위해 미세 조정되었습니다. GPT-2[5]의 제안으로 연구원들이 단일 기반 모델로 여러 다운스트림 작업을 해결하기 위해 제로 샷 학습을 사용하기 시작하는 것을 보았습니다. 마지막으로, GPT-3는 언어 모델이 크기가 커짐에 따라 소수 샷 학습에 정말 능숙해진다는 것을 보여주었습니다. 이 섹션에서는 이러한 아이디어를 통해 제로 및 퓨 샷 학습이 어떻게 작동하는지 더 잘 이해하고 몇 가지 더 복잡한 프롬프트 기술에 대한 세부 정보를 제공합니다.

제로샷 학습

([6]에서)

제로 샷 학습의 이면에 있는 아이디어는 매우 간단합니다. 해결되는 작업에 대한 설명과 관련 입력 데이터를 LLM에 제공하고 결과를 생성하도록 합니다. 위 참조. 그들이 관찰하는 방대한 양의 사전 훈련 데이터로 인해 LLM은 종종 이러한 방식으로 작업을 해결할 수 있습니다. 즉, 지식 기반을 활용하여 (상대적으로) 많은 수의 작업을 해결할 수 있습니다. 아래 예를 참조하십시오(GPT-3.5로 생성됨).

GPT-3.5를 활용한 제로샷 학습(작성자 작성)

제로 샷 학습은 GPT-2와 같은 모델에 의해 광범위하게 탐구되었으며 경우에 따라 잘 수행됩니다. 그러나 제로 샷 학습이 우리의 과제를 해결하지 못한다면 어떻게해야합니까? 많은 경우, 우리는 보다 구체적이고 구체적인 정보를 제공함으로써 LLM의 성능을 획기적으로 향상시킬 수 있습니다. 특히, 원하는 출력의 예를 프롬프트에 추가하여 모델이 프롬프트에 표시된 데이터에서 패턴을 복제할 수 있도록 할 수 있습니다.

소수 샷 학습

단순한 작업 설명을 넘어 고품질 입력-출력 예제로 프롬프트를 보강할 수 있습니다. 이 기술은 올바른 동작의 명시적인 예를 제공하여 LLM 성능을 향상시키려는 소수 샷 학습의 기초를 형성합니다. 적절하게 사용하고 올바른 모델에 적용하면 GPT-3[6]과 같은 LLM의 획기적인 기능에서 알 수 있듯이 소수 샷 학습이 매우 효과적입니다. 아래를 참조하십시오.

([3]에서)

그러나 LLM의 소수 학습 기능을 적절하게 활용하는 방법을 배우는 것은 복잡할 수 있습니다. 프롬프트에 어떤 예를 포함해야 합니까? 프롬프트를 구성하는 올바른 방법이 있습니까? 프롬프트 변경이 LLM에 큰 영향을 미칩니까?

대부분의 LLM은 프롬프트가 구성되는 방식에 민감하므로 프롬프트 엔지니어링이 어렵고 중요합니다. GPT-4와 같은 최근 모델은 프롬프트의 작은 섭동에 덜 민감한 것처럼 보이지만[2], 연구 커뮤니티[7]는 여전히 이해하는 데 도움이 되는 소수 샷 학습을 적절하게 사용하기 위한 몇 가지 팁을 제공했습니다.

  • 예시적인 순서가 중요하며, 몇 번의 샷 예제를 순열하면 LLM 성능이 크게 바뀔 수 있습니다. 더 많은 샷 예제를 포함한다고 해서 이 문제가 해결되는 것은 아닙니다.
  • 몇 번의 예에서 레이블 분포가 중요하며 실제 데이터 분포와 일치해야 합니다. 놀랍게도 레이블의 정확성은 그다지 중요하지 않습니다.
  • LLM은 몇 번의 샷 예제 중 마지막 예제(즉, 최근 편향)를 반복하는 데 편향되는 경향이 있습니다.
  • 프롬프트에 포함된 예시는 다양하고 무작위로 정렬되어야 합니다.

최적의 데이터 샘플링. 다양하고 무작위로 정렬되며 테스트 예제와 관련된 예제를 선택하는 것이 가장 좋습니다. 그러나 이러한 기본적인 직관을 넘어 프롬프트에 대한 최적의 모범을 선택하는 방법을 결정하기 위해 상당한 양의 연구가 수행되었습니다. 예를 들어, 다양성 선택[8], 불확실성 기반 선택[9] 또는 테스트 예와의 유사성에 기반한 선택[10]을 통해 몇 가지 학습 샘플을 선택할 수 있습니다.

([3]에서)

소수 샷 학습 vs. 미세 조정. 계속 진행하기 전에 주목할만한 혼란 점을 언급하고 싶습니다. 소수 샷 학습은 미세 조정이 아닙니다. 소수 샷 학습은 프롬프트 내부의 LLM에 예제를 제시하며, 올바른 출력을 생성하기 위한 관련 컨텍스트로 사용할 수 있습니다. 이 과정을 "상황 내 학습"이라고 합니다. 위 참조. 모델의 매개변수는 소수 샷 학습에 의해 수정되지 않습니다. 대조적으로, 미세 조정은 선택한 데이터 세트에 대해 모델을 명시적으로 훈련(즉, 역전파를 통해 가중치 업데이트)합니다.

지시 프롬프트

코딩 도우미로 명령 조정 언어 모델 사용([15]에서)

소수 샷 학습은 믿을 수 없을 정도로 강력하지만 주목할만한 단점이 있습니다 : 모범은 많은 토큰을 소비합니다. LLM의 컨텍스트 창이 제한되어 있다는 점을 감안할 때 많은 토큰을 사용하지 않는 프롬프트 메서드를 탐색할 수 있습니다. 예를 들어, LLM에 올바른 동작을 텍스트로 설명 할 수 있습니까? 짧은 대답은 '예'입니다! 프롬프트의 일부로 작성된 명령어만 포함하는 이 기법을 명령어 프롬프트라고 하며 특정 유형의 LLM에서 가장 잘 수행됩니다.

명령 튜닝 및 정렬. 최근 언어 모델의 개발은 교육 수행 능력 향상에 중점을 두고 있습니다. 사전 훈련된 LLM은 즉시 사용 가능한 지침을 잘 따르지 않습니다. 그러나 이러한 모델에 지침을 따르는 방법을 가르치면 사용자가 원하는 것을 훨씬 더 잘 수행할 수 있습니다(즉, 인간 정렬 개선). LLM을 따르는 명령은 정보 검색 대화 에이전트(예: ChatGPT)에서 코딩 도우미(예: Codex [13])에 이르기까지 다양하고 유용한 응용 프로그램을 지원합니다. 아래를 참조하십시오.

([13, 14]에서)

이전 게시물에서 광범위하게 논의한 바와 같이, LLM을 만드는 첫 번째 단계는 레이블이 지정되지 않은 큰 텍스트 모음에 대해 언어 모델링 목표를 사용하여 모델을 사전 훈련하는 것입니다. 이 프로세스 중에 모델은 정보를 얻고 다음 토큰 예측을 정확하게 수행하는 방법을 학습합니다. 그러나 모델의 출력이 항상 흥미롭거나 매력적이거나 도움이 되는 것은 아니며 모델은 일반적으로 복잡한 지침을 준수하는 데 어려움을 겪습니다. 그러한 행동을 장려하기 위해서는 기본적인 사전 훈련을 넘어서야합니다.

지시에 따른 LLM 만들기. LLM에게 지침을 따르는 방법을 가르치는 데는 몇 가지 다른 접근 방식이 있습니다. 예를 들어, 명령어 튜닝 [12]을 수행하거나 명령어가 포함 된 대화의 예를 통해 LLM을 미세 조정할 수 있습니다. LLaMA(및 그 변형)[15], 모든 FLAN 모델[12], OPT-IML[16] 등과 같은 몇 가지 주목할만한 모델이 이 접근 방식을 채택합니다. 또는 SFT(Supervised Fine-Tuning)와 RLHF(Human Feedback)의 강화 학습으로 구성된 4단계 접근 방식을 사용할 수 있습니다. 아래를 참조하십시오. 이 방법론은 ChatGPT, GPT-17, Sparrow[<>] 등과 같은 놀라운 모델을 만들었습니다.

인간의 피드백을 기반으로 LLM 정렬 ([13]에서)

유용한 지침을 만듭니다. 지침을 따르도록 훈련된 LLM에 액세스할 수 있다면 유용하고 유익한 지침으로 모델을 프롬프트하여 많은 것을 성취할 수 있습니다. 다음은 지침 프롬프트를 사용하기 위한 몇 가지 핵심 팁과 아이디어입니다.

  • 프롬프트의 나머지 부분과 마찬가지로 지침은 구체적이고 상세해야 합니다.
  • 우리는 LLM에게 프롬프트에서 무언가를하지 말라고 말하는 것을 피해야합니다. 오히려, 우리는 LLM에게 무엇을해야하는지 알려주는 데 집중해야합니다.
  • 프롬프트 내에서 명령을 명확하게 식별하는 표시기가 있는 입력 구조를 사용하는 것이 도움이 됩니다. 아래를 참조하십시오.

지시 프롬프트를 위한 다양한 형식(작성자가 만듦)

역할 프롬프트. 명령 프롬프트와 접선적으로 관련된 또 다른 흥미로운 프롬프트 기술은 모델에 "역할" 또는 페르소나를 할당하는 역할 프롬프트입니다. 이 역할은 다음과 같은 텍스트 스니펫을 통해 프롬프트 내에서 할당됩니다.

  • 당신은 유명하고 뛰어난 수학자입니다.
  • 당신은 의사입니다.
  • 당신은 음악 전문가입니다.

흥미롭게도 최근 LLM은 대화 전반에 걸쳐 이러한 역할을 아주 잘 맡고 유지할 수 있습니다[18]; 아래를 참조하십시오.

LaMDA를 사용한 역할 프롬프트([18]에서)

더 나아가 역할 프롬프트는 단순히 재미있는 트릭이 아닙니다. LLM에 역할을 제공하면 실제로 성능이 향상될 수 있습니다(예: GPT-3를 "뛰어난 수학자"로 만드는 역할은 산술 기반 질문의 성능을 향상시킬 수 있음). 그러나 역할 프롬프트는 특정 경우에만 성능을 향상시킵니다.

"AI에 역할을 할당할 때 우리는 AI에 몇 가지 컨텍스트를 제공합니다. 이 컨텍스트는 AI가 질문을 더 잘 이해하는 데 도움이 됩니다. 질문을 더 잘 이해하면 AI가 더 나은 답변을 제공하는 경우가 많습니다." — learnprompting.org 에서

현실 세계에서 지시 프롬프트. 지침과 함께 LLM을 프롬프트하는 것은 다양한 응용 프로그램에 사용할 수 있는 매우 강력한 도구입니다. 이 기술을 활용하는 방법을 이해하려면 오픈 소스 정보 검색 API가 포함된 ChatGPT 플러그인의 최근 릴리스를 살펴볼 수 있습니다. 이 API 내에는 문서에서 메타데이터를 추출하고 PII(개인 식별 정보)를 필터링하기 위해 제공되는 두 가지 특정 모듈이 있습니다. 흥미롭게도 이러한 서비스는 전적으로 LLM 기반이며 아래에 표시된 프롬프트를 사용합니다.

ChatGPT 정보 검색 API에서 메타데이터 추출 및 PII 감지에 대한 프롬프트(작성자가 생성)

이러한 프롬프트 내에서 LLM에는 원하는 작업을 수행하는 방법에 대한 구체적이고 자세한 지침이 제공됩니다. 지침의 몇 가지 주목할만한 측면은 다음과 같습니다.

  • 원하는 출력 형식(json 또는 true/false)이 명시적으로 명시되어 있습니다.
  • 이 명령은 구조화된 형식(즉, 글머리 기호로 구분된 목록)을 사용하여 중요한 정보를 설명합니다.
  • LLM의 작업(즉, PII 식별 또는 메타데이터 추출)은 프롬프트에 명시적으로 명시되어 있습니다.
  • 흥미롭게도 이러한 프롬프트는 모델에 여러 번 수행하지 말아야 할 작업을 알려주며, 이는 일반적으로 권장하지 않습니다.

PII 탐지와 같은 중요한 작업을 정확하게 수행하기 위해 LLM을 신뢰하는 것은 한계를 감안할 때 최선의 생각이 아닐 수 있습니다. 그럼에도 불구하고 이러한 접근 방식은 교육 프롬프트의 놀라운 잠재력을 보여줍니다. 전체 프로그램이나 서비스를 작성하는 대신 프롬프트를 작성하는 것만으로도 많은 작업을 빠르게 해결할 수 있습니다.

테이크 아웃

"챗봇 페르소나에 대한 정말 훌륭한 프롬프트를 작성하는 것은 놀랍도록 높은 영향력을 발휘하는 기술이며 약간의 자연어로 프로그래밍하는 초기 예입니다." — Sam Altman

이 개요에서 다른 것을 배우지 않는다면 올바른 프롬프트(즉, 프롬프트 엔지니어링)를 구성하는 것이 실제로 LLM을 성공적으로 활용하는 데 큰 부분을 차지한다는 것을 알아야 합니다. 언어 모델은 텍스트-텍스트 구조로 인해 매우 일반적이며 다양한 작업을 해결하는 데 사용할 수 있습니다. 그러나 이러한 모델이 잘 수행될 수 있도록 상세하고 적절한 컨텍스트를 제공해야 합니다. 최적의 프롬프트 기술은 모델과 작업에 따라 다르지만 성공 가능성을 극대화하기 위해 활용할 수 있는 높은 수준의 시사점이 많이 있습니다.

0에서 몇 샷 학습까지. 광범위한 사전 교육(및 요즘에는 미세 조정) 데이터 세트를 감안할 때 LLM에는 많은 정보가 포함되어 있으며 즉시 사용 가능한 다양한 작업을 해결할 수 있습니다. 이를 위해 모델에 작업 설명과 관련 입력 데이터만 제공하고 모델은 올바른 출력을 생성해야 합니다. 그러나 제로 샷 학습은 모델에 제공되는 제한된 컨텍스트로 인해 잘 수행될 수 있습니다. 제로샷 학습의 성능을 향상시키려면 프롬프트에 예시를 삽입하여 소수 쇼 학습을 활용해야 합니다.

지시에 따른 LLM. 소수 샷 학습은 잘 수행되지만 일반적으로 많은 토큰을 사용하며, 이는 대부분의 LLM의 제한된 컨텍스트 창을 고려할 때 문제입니다. 이 문제를 해결하기 위해 올바른 출력의 구체적인 예로 이 동작을 캡처하는 대신 LLM의 원하는 동작에 대한 정확한 텍스트 설명을 제공하는 명령 프롬프트 접근 방식을 채택할 수 있습니다. 명령어 프롬프트는 강력하지만 잘 작동하려면 미세 조정된 특정 형태의 LLM(예: 명령어 튜닝 또는 RLHF를 통해)이 필요합니다. 사전 훈련된 LLM은 즉시 지침을 따르는 데 능숙하지 않습니다.

팁과 요령. 신속한 엔지니어링에는 채택할 수 있는 다양한 트릭과 모범 사례가 함께 제공됩니다. 일반적으로 이러한 기술은 새로운 모델이 출시될 때마다 변동하지만(예: GPT-4는 이전 모델에 비해 구조화되지 않은 프롬프트를 처리하는 데 훨씬 더 우수합니다[2]), 몇 가지 원칙은 꽤 오랫동안 적용되어 왔습니다. 첫째, 항상 간단한 프롬프트로 시작한 다음 천천히 복잡성을 추가해야 합니다. 프롬프트를 개발할 때 구체적이고 상세하게 작성하는 것을 목표로 해야 하며, 지나치게 장황하지 않도록 해야 합니다(제한된 컨텍스트 창으로 인해). 마지막으로, LLM 성능을 진정으로 극대화하려면 일반적으로 소수 학습, 지시 프롬프트 또는 더 복잡한 접근 방식을 활용해야 합니다.

 

(본 내용은 Cameron R. Wolfe, Ph.D. 블로그에서 가져와서 번역한 내용입니다)

기업 홍보를 위한 확실한 방법
협회 홈페이지에 회사정보를 보강해 보세요.