Prompting Techniques 내용을 나 교수에게 복사해서 전달합니다.
메모) Zero-Shot, Few-Shot과 같은 기본 기법부터 Tree of Thoughts, ReAct, Reflexion과 같은 최신 고급 기법까지 폭넓게 포함하고 있습니다.
- Zero-shot Prompting
- Few-shot Prompting
- Chain-of-Thought Prompting
- Meta Prompting
- Self-Consistency
- Generate Knowledge Prompting
- Prompt Chaining
- Tree of Thoughts
- Retrieval Augmented Generation
- Automatic Reasoning and Tool-use
- Automatic Prompt Engineer
- Active-Prompt
- Directional Stimulus Prompting
- Program-Aided Language Models
- ReAct
- Reflexion
- Multimodal CoT
- Graph Prompting
메모) 지금은, 웬만한 LLM이면 기법들을 사용하지 않고도 맞는 답을 제공할 수 있습니다. 기법을 사용한다는 것은 작성할 프롬프트가 길어지고 응답을 생성하기 위한 과정들이 있어야 하기 때문에 노려과 비용이 듭니다.
LLM의 약점으로 많이 거론되는 것이 환각입니다. 지금 LLM들은 초기 보다 많이 줄었지만 그래도 중요한 문제를 다룬다면 작은 실수가 큰 타격을 줄 수 있으니 조심해야 합니다. 프롬프트 엔지니어링에서 더 나은 기법을 사용한다는 것은 그렇지 않은 경우보다 더 나은 답을 얻을 확률을 높이는 것입니다. 모르면 환각 환각 하면서 생성형 AI라는 거인의 어깨에서 가고 싶은 곳으로 못가고 이리 저리 헤매이다 떨어질 것입니다. 여러 기법들을 익히고 배우고 사용함으로 거인의 어깨에서 거인의 걸음으로 걸어갈 수 있습니다.
나 교수의 응답에서 필요한 부분만 남겨두고, 내용의 명확한 이해를 위해 필요한 경우 원문을 함께 인용하도록 하겠습니다.
👨🏫: 네, 제공해주신 제로샷 프롬프팅에 대한 글을 분석해 드리겠습니다.
대규모 데이터로 훈련된 LLM은 특정 작업을 수행할 때 예시나 시연 없이도 작업을 처리할 수 있는데, 이러한 방식을 “제로샷”이라고 합니다. 제로샷 프롬프트는 추가적인 예시 없이 모델에 직접 작업을 수행하도록 지시합니다.
제로샷 프롬프팅은 간단하고 일반적인 작업에는 효과적일 수 있지만, 복잡하거나 특정 분야의 작업, 또는 높은 정확도와 일관성이 요구되는 작업에는 한계를 보입니다. 이러한 경우 퓨샷 프롬프팅이나 다른 고급 프롬프트 엔지니어링 기법을 사용하는 것이 더 효과적일 수 있습니다.
메모) 최근의 LLM들은 점점 강해져서 Zero-Shot으로도 지시를 잘 수행합니다.
- 예시
- Classify the text into neutral, negative or positive.
Text: I think the vacation is okay.
Sentiment:
- 응답
👨🏫: 제공해주신 퓨샷 프롬프팅(Few-Shot Prompting)에 대한 글을 분석해 드리겠습니다.
퓨샷 프롬프팅(Few-Shot Prompting)은 LLM이 특정 작업을 더 잘 수행하도록 프롬프트 안에 소수의 예시(demonstrations) 를 제공하는 기법입니다. 이는 LLM이 문맥 내 학습(in-context learning)을 통해 제공된 예시를 바탕으로 다음에 나올 입력에 대한 응답을 생성하도록 유도합니다. 즉, 퓨샷 프롬프팅은 LLM에게 “이런 식으로 해야 한다”는 것을 보여주는 학습 과정과 유사합니다.
LLM은 대규모 텍스트 데이터에서 학습된 패턴을 기반으로 작동합니다. 퓨샷 프롬프팅은 이러한 패턴 인식 능력을 활용하여, 프롬프트에 포함된 예시를 통해 특정 작업에 대한 입력과 출력의 관계를 학습하고, 이를 바탕으로 새로운 입력에 대한 적절한 출력을 생성합니다. 예시를 통해 LLM은 작업의 목표, 입력 형식, 출력 형식 등을 파악하고 이를 일반화하여 새로운 입력에 적용합니다.
- 예시
- This is awesome! // Negative
This is bad! // Positive
Wow that movie was rad! // Positive
What a horrible show! //
메모) 말로 하는 게 복잡하고 어려울 때 예시를 사용합니다. 백문이 불여일견이라는 말처럼 예시를 드는 게 더 좋을 때가 있습니다. |
👨🏫: 제공해주신 Chain-of-Thought (CoT) 프롬프팅에 대한 글을 분석해 드리겠습니다.
CoT 프롬프팅은 대규모 언어 모델(LLM)이 복잡한 추론 작업을 수행할 때, 중간 추론 단계를 프롬프트에 명시적으로 포함시키는 기법입니다. 즉, LLM에게 문제 해결 과정을 단계별로 생각하도록 유도하여 최종 답변의 정확도를 높이는 방법입니다. “Let’s think step by step” 와 같은 문구를 추가하는 것만으로도 CoT 프롬프팅을 구현할 수 있습니다.
CoT 프롬프팅은 LLM이 단순히 패턴 매칭을 넘어 논리적 추론을 수행하도록 유도하여 복잡한 문제에 대한 정확한 답변을 도출할 수 있도록 돕습니다. 기존의 퓨샷 프롬프팅으로는 해결하기 어려웠던 홀수/짝수 문제와 같은 추론 문제에서 CoT 프롬프팅은 괄목할 만한 성능 향상을 보여줍니다.
CoT 프롬프팅은 LLM이 답변을 도출하는 과정을 단계별로 보여주기 때문에, 답변의 근거와 논리를 파악하기 용이합니다. 이를 통해 LLM의 추론 과정을 이해하고, 오류 발생 시 원인을 분석하여 개선하는 데 도움이 됩니다.
CoT 프롬프팅은 퓨샷 프롬프팅과 결합하여 사용될 수 있으며, 적은 수의 예시만으로도 효과를 볼 수 있습니다. 이는 데이터 수집 및 가공에 드는 비용과 시간을 절약할 수 있다는 장점을 제공합니다. 심지어 제로샷 CoT 프롬프팅처럼 예시 없이도 “Let’s think step by step”와 같은 프롬프트를 추가하는 것만으로도 효과를 볼 수 있습니다.
CoT 프롬프팅은 산술, 상식 추론, 기호 추론 등 다양한 유형의 복잡한 추론 작업에 적용될 수 있습니다. 이는 CoT 프롬프팅의 범용성과 활용 가능성을 높여줍니다.
메모) 생성형 AI에서는 안 되면 이것 저것 해 보는게 중요합니다. 특정 규모 이상의 대형 언어 모델에서는 “emergent ability”가 나타납니다. “Emergent ability”는 특정 규모 이하의 모델에서는 관찰되지 않다가, 모델의 크기가 특정 임계점을 넘어서면 갑자기 나타나는 능력을 의미합니다. 즉, 단순히 모델의 크기에 비례하여 성능이 향상되는 것이 아니라, 특정 규모 이상이 되어야만 발현되는 새로운 능력입니다. CoT 프롬프팅의 경우, 소규모 언어 모델에서는 “Let’s think step by step” 와 같은 프롬프트를 추가해도 중간 추론 단계를 생성하거나 답변의 정확도가 향상되는 효과가 미미합니다. 하지만, 특정 규모 이상의 대형 언어 모델에서는 이러한 프롬프트가 매우 효과적으로 작용하여, 모델이 스스로 추론 단계를 생성하고 더 정확한 답변을 제시하는 emergent ability를 보여줍니다.
이러한 emergent ability는 대형 언어 모델의 숨겨진 잠재력을 보여주는 중요한 현상입니다. 아직 정확한 메커니즘은 완전히 밝혀지지 않았지만, 모델의 크기가 증가함에 따라 새로운 능력이 나타날 수 있다는 점을 시사하며, 더 큰 규모의 모델 개발에 대한 동기를 부여합니다. |
👨🏫: 네, Auto-CoT의 등장 배경, 작동 방식, 그리고 두 단계에 대해 자세히 설명드리겠습니다.
CoT 프롬프팅은 LLM의 추론 능력을 향상시키는 효과적인 기법으로 알려져 있습니다. 그러나 CoT 프롬프팅을 적용하기 위해서는 각 문제에 대한 추론 단계를 직접 작성해야 하는데, 이는 상당한 시간과 노력이 필요한 작업입니다. 특히 다양한 문제에 대해 효과적인 CoT 프롬프트를 생성하는 것은 매우 어려울 수 있습니다. Auto-CoT는 이러한 수동 CoT 프롬프트 생성의 한계를 극복하고 자동화된 방식으로 효율적인 CoT 프롬프트를 생성하기 위해 등장했습니다.
Auto-CoT는 크게 두 단계로 작동합니다.
- 질문 클러스터링 (Question Clustering)
- 주어진 데이터셋의 질문들을 유사한 질문끼리 그룹화하는 단계입니다. 이는 다양한 유형의 질문을 포괄적으로 다루는 데모를 생성하기 위한 기반이 됩니다. 클러스터링을 통해 각 클러스터는 특정 유형의 추론 패턴을 나타내게 됩니다.
- 데모 샘플링 (Demonstration Sampling)
- 각 클러스터에서 대표 질문을 선택하고, 선택된 질문에 대해 제로샷 CoT 프롬프팅 (e.g., “Let’s think step by step”)을 사용하여 추론 체인을 생성하는 단계입니다. 이렇게 생성된 추론 체인은 퓨샷 프롬프팅에서 데모로 사용됩니다. 대표 질문을 선택할 때는 질문의 길이나 추론 단계의 수 등의 휴리스틱을 사용하여 간단하고 정확한 데모를 생성하도록 유도합니다.
질문 클러스터링을 통해 다양한 유형의 질문을 포괄하는 데모를 생성하여 모델의 일반화 능력 향상에 기여합니다. 수동으로 CoT 프롬프트를 생성하는 데 드는 시간과 노력을 절약하고 효율성을 높입니다. 다양한 데모를 통해 생성된 추론 체인의 오류 가능성을 줄이고, 더욱 안정적인 성능을 확보합니다. |
👨🏫: Auto-CoT의 두 단계인 질문 클러스터링과 데모 샘플링을 예시와 함께 자세히 설명해 드리겠습니다.
- 1단계: 질문 클러스터링 (Question Clustering)
- Auto-CoT는 먼저 다양한 질문들을 유사한 것끼리 그룹화하는 클러스터링 과정을 거칩니다. 이를 통해 서로 다른 추론 패턴을 가진 질문들을 구분하고, 각 패턴을 대표하는 질문들을 추출할 수 있습니다.
- 예시
- 다음과 같은 질문들이 있다고 가정해 보겠습니다.질문 1: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요?
질문 2: 연필 10자루에서 3자루를 친구에게 주고, 2자루를 잃어버렸습니다. 연필이 몇 자루 남았을까요?
질문 3: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
질문 4: 기차가 시속 100km로 3시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
- 이 질문들을 클러스터링하면 다음과 같이 두 개의 클러스터로 나눌 수 있습니다.
- 클러스터 1 (덧셈/뺄셈): 질문 1, 질문 2
클러스터 2 (곱셈): 질문 3, 질문 4
- 2단계: 데모 샘플링 (Demonstration Sampling)
- 클러스터링이 완료되면, 각 클러스터에서 대표 질문을 하나씩 선택합니다. 그리고 선택된 질문에 대해 제로샷 CoT 프롬프팅을 적용하여 추론 체인을 생성합니다. 이때 “Let’s think step by step”와 같은 프롬프트를 사용하여 LLM이 스스로 추론 과정을 생성하도록 유도합니다.
- 예시
- 클러스터 1 대표 질문: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요?
- 제로샷 CoT 프롬프팅 적용: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요? Let’s think step by step.
- LLM 생성 답변: 사과 5개와 배 3개를 합하면 총 8개의 과일이 있습니다. 사과 2개를 먹으면 8 – 2 = 6개의 과일이 남습니다.
- 클러스터 2 대표 질문: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
- 제로샷 CoT 프롬프팅 적용: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요? Let’s think step by step.
- LLM 생성 답변: 시속 60km로 2시간 동안 달렸으므로, 총 이동 거리는 60 * 2 = 120km 입니다.
|
메모) Auto-COT 하는 두 과정이 힘들수도 있습니다. 그래서 다음 처럼 질문들을 모아서 전달했습니다.
“다음과 같은 질문들이 있습니다. Auto-COT로 해결해 주고 해결 과정도 설명해 주세요.
######
* 질문 1: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요?
* 질문 2: 연필 10자루에서 3자루를 친구에게 주고, 2자루를 잃어버렸습니다. 연필이 몇 자루 남았을까요?
* 질문 3: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
* 질문 4: 기차가 시속 100km로 3시간 동안 달렸습니다. 총 몇 km를 이동했을까요?”
아래 답변에서 3단계 퓨샷 프롬프트를 복사해서 사용합니다.
👨🏫: 네, 제공해주신 질문들을 Auto-CoT 방식으로 해결하고, 해결 과정을 설명해 드리겠습니다.
1단계: 질문 클러스터링
제공해주신 질문들을 유사한 유형끼리 그룹화합니다.
- 클러스터 1 (덧셈/뺄셈): 질문 1, 질문 2 (사과/배, 연필 개수 계산)
- 클러스터 2 (곱셈): 질문 3, 질문 4 (자동차/기차 이동 거리 계산)
2단계: 데모 샘플링 및 제로샷 CoT 적용
각 클러스터에서 대표 질문을 선택하고 제로샷 CoT 프롬프팅을 적용하여 추론 체인을 생성합니다.
-
- 클러스터 1 대표 질문 (질문 1): 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요?
- 제로샷 CoT 프롬프트: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요? Let’s think step by step.
- LLM 생성 답변 (추론 체인): 먼저 사과 5개와 배 3개를 합쳐 총 8개의 과일이 있습니다. 그다음 사과 2개를 먹었으므로 8개에서 2개를 빼면 6개의 과일이 남습니다. 따라서 답은 6개입니다.
- 클러스터 2 대표 질문 (질문 3): 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
- 제로샷 CoT 프롬프트: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요? Let’s think step by step.
- LLM 생성 답변 (추론 체인): 자동차는 시속 60km의 속력으로 2시간 동안 달렸습니다. 이동 거리는 속력 곱하기 시간이므로 60km/h * 2h = 120km입니다. 따라서 답은 120km입니다.
3단계: 퓨샷 프롬프팅 구성 및 나머지 질문 해결
생성된 추론 체인을 데모로 사용하여 퓨샷 프롬프팅을 구성하고 나머지 질문(질문 2, 질문 4)을 해결합니다.
- 질문 2: 연필 10자루에서 3자루를 친구에게 주고, 2자루를 잃어버렸습니다. 연필이 몇 자루 남았을까요?
- 퓨샷 프롬프트:
|
Q: 사과 5개와 배 3개를 가지고 있습니다. 사과 2개를 먹으면 과일이 몇 개 남을까요? A: 먼저 사과 5개와 배 3개를 합쳐 총 8개의 과일이 있습니다. 그다음 사과 2개를 먹었으므로 8개에서 2개를 빼면 6개의 과일이 남습니다. 따라서 답은 6개입니다. Q: 연필 10자루에서 3자루를 친구에게 주고, 2자루를 잃어버렸습니다. 연필이 몇 자루 남았을까요? A: |
- LLM 예상 답변: 먼저 연필 10자루에서 친구에게 3자루를 주었으므로 10 – 3 = 7자루가 남았습니다. 그다음 2자루를 잃어버렸으므로 7 – 2 = 5자루가 남았습니다. 따라서 답은 5자루입니다.
- 질문 4: 기차가 시속 100km로 3시간 동안 달렸습니다. 총 몇 km를 이동했을까요?
- 퓨샷 프롬프트:
|
Q: 자동차가 시속 60km로 2시간 동안 달렸습니다. 총 몇 km를 이동했을까요? A: 자동차는 시속 60km의 속력으로 2시간 동안 달렸습니다. 이동 거리는 속력 곱하기 시간이므로 60km/h * 2h = 120km입니다. 따라서 답은 120km입니다. Q: 기차가 시속 100km로 3시간 동안 달렸습니다. 총 몇 km를 이동했을까요? A: |
- LLM 예상 답변: 기차는 시속 100km의 속력으로 3시간 동안 달렸습니다. 이동 거리는 속력 곱하기 시간이므로 100km/h * 3h = 300km입니다. 따라서 답은 300km입니다.
|
이 글은 메타 프롬프팅(Meta Prompting)이라는 새로운 프롬프팅 기법을 소개하고, 그 특징과 장점, 응용 분야에 대해 설명하는 설명문입니다.
- 메타 프롬프팅은 LLM과의 상호작용에서 내용보다는 구조와 문법에 중점을 두는 효율적이고 범용적인 프롬프팅 기법입니다. 추상적인 접근 방식을 통해 다양한 문제에 대한 구조화된 해결책을 제시할 수 있도록 LLM을 유도합니다.
- Few-Shot Prompting은 구체적인 예시를 통해 LLM이 패턴을 학습하도록 유도하는 반면, Meta Prompting은 추상적인 구조를 제시하여 LLM이 더 일반적인 패턴을 학습하고 다양한 상황에 적용하도록 유도합니다. Meta Prompting은 더 적은 토큰을 사용하며, 새로운 상황에 대한 일반화 능력을 향상시킬 수 있습니
|
메모) 메타 프롬프팅은 프롬프트를 생성하거나 개선하는 프롬프트 입니다. 기법 이름이 같아서 좀 혼란 스러울 수 있는데 ‘프롬프트를 생성하는 프롬프트’라는 의미로 보면 비슷합니다. 메타 프롬프팅 기법도 패턴이 되는 프롬프트를 만들고 이것을 기반으로 구체적인 프롬프트를 만듭니다.
CDPE에서 메타 프롬프팅을 제공하면서 구체화되는 부분은 사용자가 제공하겠다고 말하면, 메타 프롬프팅을 먼저 제공하고 구체화되는 부분은 뒤에 제공하면 됩니다.
메타 프롬프팅의 예시를 요청했습니다.
메타 프롬프팅의 핵심은 문제 해결 과정의 구조와 문법에 초점을 맞춰 LLM이 특정 콘텐츠가 아닌 일반적인 패턴을 학습하고 적용하도록 유도하는 것입니다. 다음은 몇 가지 예시입니다.
- 수학 문제 풀이 (Meta Prompting)
- 문제 유형: 두 수의 합을 구하는 문제
- 메타 프롬프트: “두 개의 숫자 {{숫자1}}와 {{숫자2}}가 주어졌을 때, 두 수의 합을 구하는 공식은 {{숫자1}} + {{숫자2}} = {{결과}} 입니다.”
- 이 메타 프롬프트는 특정 숫자에 국한되지 않고, 어떤 두 수가 주어지든 합을 구하는 일반적인 구조를 제공합니다. LLM은 이 구조를 학습하여 다양한 숫자에 대해 합을 계산할 수 있습니다.
- 이야기 생성 (Meta Prompting)
- 주제: 주인공이 역경을 극복하는 이야기
- 메타 프롬프트: “주인공 {{주인공 이름}}은 {{목표}}를 달성하고 싶어합니다. 하지만 {{장애물}} 때문에 어려움을 겪습니다. {{주인공 이름}}은 {{해결 방법}}을 통해 {{장애물}}을 극복하고 결국 {{목표}}를 달성합니다.”
- 이 메타 프롬프트는 특정 이야기 내용 없이도 “역경 극복”이라는 이야기 구조를 제공합니다. LLM은 이 구조를 활용하여 다양한 주인공, 목표, 장애물, 해결 방법으로 새로운 이야기를 생성할 수 있습니다.
- 코드 생성 (Meta Prompting)
- 작업: 리스트에서 특정 값을 찾는 함수 생성
- 메타 프롬프트: “함수
find_value(list, value) 는 리스트 list 에서 값 value 를 찾아 그 인덱스를 반환합니다. 만약 value 가 리스트에 없다면 -1을 반환합니다. 함수의 구조는 다음과 같습니다:
python
def find_value(list, value):
for i, item in enumerate(list):
if item == value:
return i
return -1
”
- 이 메타 프롬프트는 특정 값이나 리스트에 국한되지 않고, 리스트에서 값을 찾는 함수의 일반적인 구조를 제공합니다. LLM은 이 구조를 이해하고 다양한 리스트와 값에 대해 동작하는 함수를 생성할 수 있습니다.
|
메모) 다음과 같이 구체화를 LLM에게 맡길 수도 있습니다.
다음 프롬프트를 구체화해주세요. “주인공 {{주인공 이름}}은 {{목표}}를 달성하고 싶어합니다. 하지만 {{장애물}} 때문에 어려움을 겪습니다. {{주인공 이름}}은 {{해결 방법}}을 통해 {{장애물}}을 극복하고 결국 {{목표}}를 달성합니다.”
CDPE 방법으로 사용자가 결정할 수도 있습니다.
다음 프롬프트에서 주인공 이름, 목표, 장애물, 해결방법은 내가 제공합니다. “주인공 {{주인공 이름}}은 {{목표}}를 달성하고 싶어합니다. 하지만 {{장애물}} 때문에 어려움을 겪습니다. {{주인공 이름}}은 {{해결 방법}}을 통해 {{장애물}}을 극복하고 결국 {{목표}}를 달성합니다.”
이에 대해 생성형 AI가 “알겠습니다. 주인공 이름, 목표, 장애물, 해결 방법을 알려주세요.” 이렇게 답하면. 사용자는 다음과 같이 정보를 제공합니다. “주인공 이름: 태호, 목표: 로봇 제작 대회에서 우승, 장애물: 부족한 부품과 기술적인 문제, 해결 방법: 폐기된 로봇 부품을 재활용하고, 전문가의 도움을 받아 기술적인 문제를 해결”
제공된 글은 Chain-of-Thought (CoT) 프롬프팅의 한계를 극복하기 위해 제안된 Self-Consistency 기법을 설명하고 있습니다. 핵심은 다양한 추론 경로를 샘플링하고 그 결과에서 가장 일관된 답을 선택하는 것입니다. 이를 통해 산술 및 상식 추론 작업에서 CoT 프롬프팅의 성능을 향상시킬 수 있습니다.
- 예시
- “내가 6살 때 내 여동생은 내 나이의 절반이었다. 지금 나는 70살인데 내 여동생은 몇 살인가?”라는 질문에 대한 초기 답변은 35세로, 오답입니다. Self-Consistency 기법 적용을 위해 Wang et al. 2022 (Table 17)의 few-shot 예시들을 사용했습니다. 이를 통해 세 가지 다른 출력을 얻었습니다:
- 출력 1: 67세 (여동생 나이 = 70 – 3)
출력 2: 67세 (여동생 나이 = 70 – 3)
출력 3: 35세 (여동생 나이 = 70 / 2)
- 출력 1과 2는 동일한 추론과 답을 제시하며, 출력 3은 다른 추론으로 오답을 제시합니다. Self-Consistency 기법은 다수의 답변 (67세)을 최종 답안으로 선택함으로써 정확도를 높입니다.
- CoT는 단일 추론 경로에 의존하여 오류 발생 가능성이 높지만, Self-Consistency는 다양한 추론 경로를 통해 오류를 줄입니다.
- 일관된 답변을 선택함으로써, 특히 산술 및 상식 추론 문제에서 정확도가 향상됩니다.
- 복잡한 알고리즘 없이, 다수결 방식으로 최종 답변을 선택하는 간결한 방법입니다.
- 단순 다수결 외에 더 정교한 일관성 측정 방법이 필요할 수 있습니다. 특히 답변의 분포가 고르거나, 추론 과정이 복잡한 경우 다수결만으로는 최적의 답을 선택하기 어려울 수 있습니다.
- 학습 데이터의 편향이 반영된 여러 개의 잘못된 추론이 생성될 경우, 다수결에 의해 오답이 선택될 가능성도 존재합니다.
결론적으로, Self-Consistency는 CoT의 약점을 보완하는 유용한 기법이지만, 계산 비용 및 일관성 측정 방법 개선 등의 과제가 남아있습니다. 더 정교한 일관성 평가 방법 및 효율적인 샘플링 전략 개발을 통해 Self-Consistency 기법의 성능을 더욱 향상시킬 수 있을 것으로 예상됩니다. |
메모) Self-Consistency 기법을 적용해서 프롬프트를 작성한다는 것은 문제를 푸는 방법을 “여러 가지”로 하라는 “내용과 신뢰할 수 있는 답을 선택”하라는 지시가 포함된다는 것입니다. 해결 방법을 포함하라고 하고 어떤 방법이 가장 효율적인지를 포함하면 해결 방법이 여럿인 경우 특정 방법을 추천해줄 수도 있습니다.
- 예시) 12개의 사과를 $0.5씩 샀을 때 총 비용을 3가지 다른 방법으로 계산해주세요. 각 계산 방법의 최종 결과를 보여주고, 가장 신뢰할 수 있는 답변을 선택해주세요.
GENKNOW (Generative Knowledge) 프롬프팅 기법에 대한 전반적인 설명입니다.
GENKNOW 기법은 LLM이 사전 지식을 생성하여 질문에 대한 답변의 정확도를 높이는 방법입니다.
- GENKNOW는 LLM이 부족한 실제 지식을 질문에 답하기 전에 생성함으로써 문제를 직접적으로 해결합니다. 이는 답변 정확도 향상에 기여합니다.
- 맥락과 사실 정보를 제공함으로써 LLM이 정답에 도달할 확률이 높아집니다.
- “설명과 답변” 형식은 LLM의 답변 생성 과정을 보여줌으로써 투명성을 높입니다.
- 생성된 지식의 품질은 일관적이지 않을 수 있습니다.
- 생성된 지식이 질문과 중복되거나 무관한 경우 LLM에 혼란을 야기할 수 있습니다.
- 지식 생성을 위한 더 구체적이고 목표 지향적인 프롬프트는 지식 조각의 관련성과 정확성을 향상시킬 수 있습니다.
- 여러 개의 생성된 지식 조각이나 외부 지식 베이스의 정보를 결합하면 더 포괄적인 이해와 더 나은 최종 답변을 얻을 수 있습니다.
- LLM에 최종 답변을 제공하기 전에 생성된 지식의 품질과 관련성을 평가하는 메커니즘을 구현하여 부정확하거나 오해의 소지가 있는 정보를 걸러낼 수 있습니다. 이를 위해 다른 LLM이나 별도의 점수 시스템을 사용할 수 있습니다.
- 피드백이나 추가 분석을 기반으로 LLM이 지식 생성을 개선하는 반복적인 프로세스는 점진적으로 더 정확하고 관련성 있는 지식을 생성할 수 있게 합니다.
- 지식 계층화
- 표면적 지식(단순 정보 나열) → 심층 지식(다각도 접근 가능) → 통합적 지식
- 각 단계에서 점진적 지식 확장
- 멀티스텝 추론 접근
- 초기 지식 검색
- 컨텍스트 분석
- 가설 생성
- 지식 통합
- 최종 결론 도출
- 지식의 동적 생성
- 정적 지식 → 상황별 적응적 지식
- 컨텍스트 민감성 향상
- 추론의 투명성
- 각 단계별 사고 과정 노출
- 결론에 대한 근거 제시
- 고려사항
- 명확하고 구조화된 프롬프트 설계
- 각 단계별 세부 지침 제공
- 모델의 지식 한계 인식
- 결과의 비판적 검토 필요
예시
- 시나리오: 기후 변화 분석
- 일반 프롬프트
- GENKNOW 프롬프트
- 기후 변화 분석을 다음 단계로 수행하세요:1. 기존 과학적 지식 요약
– 주요 온실가스 식별
– 역사적 기후 변화 패턴2. 현재 데이터 컨텍스트 분석
– 최근 10년간 글로벌 온도 변화
– 극端 기후 현상 증가 추이3. 인과관계 추론
– 인간 활동과 기후 변화 연관성
– 산업화의 장기적 영향4. 미래 시나리오 예측
– 다양한 기후 모델 통합
– 잠재적 사회경제적 영향5. 종합적 통찰 도출
– 다차원적 관점에서의 결론
– 불확실성 인정 및 설명
|
단계 구성 노하우를 물었습니다.
1. 단계 설계의 핵심 원칙
- 구조화 기본 요소
- 명확성: 각 단계의 목적이 분명해야 함
- 논리성: 단계 간 자연스러운 흐름 유지
- 점진성: 복잡성을 점진적으로 증가
- 독립성: 각 단계는 고유한 기능 보유
2. 단계 구성 전략
- 공통 구조 프레임워크
- 준비 단계: 컨텍스트 및 목표 설정
- 분석 단계: 정보 수집 및 평가
- 탐색 단계: 대안 및 가능성 모색
- 종합 단계: 최종 결론 및 실행 방안 도출
3. 단계별 설계 세부 기술
- 각 단계의 핵심 질문
- Why: 이 단계가 필요한 이유
- What: 이 단계에서 달성해야 할 핵심 목표
- How: 목표 달성을 위한 구체적 방법론
4. 단계 세분화 기법
- 상세화 접근법
- 수직적 세분화
- 큰 단계를 더 작은 하위 단계로 분해
- 복잡성 관리 및 세부 통제 가능
- 수평적 확장
- 각 단계의 깊이 있는 탐색
- 다각도 접근을 통한 comprehensive 분석
5. 효과적인 단계 연결 방법
- 연결성 확보 전략
- 논리적 전환: 각 단계 사이 명확한 연결고리 제공
- 피드백 루프: 이전 단계로 되돌아가 재검토 가능한 구조
- 반복성: 필요시 단계 재순환 메커니즘 설계
6. 단계 구성 시 주의사항
- 잠재적 함정 회피
- 과도한 복잡성 방지
- 불필요한 단계 제거
- 유연성 확보
- 목적 지향적 설계
7. 실제 적용 예시[문제 해결 단계 프레임워크]
1. 문제 정의 단계
– 현상 관찰
– 근본 원인 분석
– 문제 범위 설정
2. 데이터 수집 단계
– 관련 정보 확보
– 데이터 검증
– 정보의 신뢰성 평가
3. 해결안 개발 단계
– 다양한 대안 모색
– 각 대안의 장단점 분석
– 최적 해결안 선정 기준 수립
4. 실행 전략 수립 단계
– 구체적 실행 계획 설계
– 자원 할당
– 리스크 관리 방안
5. 모니터링 및 피드백 단계
– 진행 상황 추적
– 성과 측정
– 지속적 개선 메커니즘
8. 고급 단계 구성 팁
- 창의적 접근
- 비선형적 사고: 때로는 단계의 순서 파괴
- 메타인지: 전체 프로세스에 대한 지속적 성찰
- 적응성: 상황에 따른 동적 조정
9. 단계 구성의 최종 목표
- 궁극적 지향점
- 복잡성 관리
- 명확한 의사결정 지원
- 체계적이고 효율적인 문제 해결
이러한 노하우를 바탕으로 상황과 목적에 맞는 최적의 단계를 설계할 수 있습니다. |
이 텍스트는 프롬프트 체이닝(Prompt Chaining) 기법에 대해 설명하고 있습니다.
프롬프트 체이닝은 복잡한 작업을 여러 개의 순차적이고 연결된 프롬프트로 분해하여 해결합니다.
- 문서 QA를 위한 프롬프트 체이닝 활용 예시:
- 프롬프트 1: 문서에서 질문과 관련된 구절 추출.
{{document}} 자리 표시자에 문서 내용을 입력.
- 프롬프트 2: 프롬프트 1에서 추출된 구절과 원본 문서를 기반으로 질문에 대한 답변 생성. 답변의 정확성, 친절한 어조, 도움이 되는 내용을 강조.
- 제공된 예시에서는 프롬프트 체이닝을 통해 문서에서 질문 관련 구절을 추출하고, 추출된 구절을 바탕으로 질문에 대한 답변을 생성하는 과정을 보여줍니다. 추가적으로, 응답에서 인용 부호를 제거하는 등의 추가적인 프롬프트 체이닝을 통해 답변을 정제할 수 있음을 제시합니다.
- 긴 맥락을 처리하는 LLM 모델 사용 권장
- 핵심 특징
- 점진적 문제 해결
- 복잡한 작업을 작은 단위로 세분화
- 각 단계별 집중적 접근
- 최종 목표로의 점진적 진행
- 모듈성
- 각 프롬프트는 독립적 기능 수행
- 단계별 재사용 및 조정 가능
- 유연한 작업 흐름 설계
- 작동 메커니즘
- 단계별 프로세스
- 전체 작업 분해
- 각 단계 프롬프트 설계
- 이전 단계 출력을 다음 단계 입력으로 활용
- 최종 결과 통합
- 실제 활용 예시
시나리오: 비즈니스 전략 보고서 작성
프롬프트 체이닝 워크플로우
- 산업 분석 단계
- 현재 [산업명] 시장의 주요 트렌드와 성장 동인을 분석해주세요.
– 핵심 성장 요인
– 주요 경쟁자 현황
– 시장 규모 및 전망
- 경쟁사 분석 단계
- 이전 분석 결과를 바탕으로 상위 3개 경쟁사의 다음 항목을 상세히 조사하세요:
– 비즈니스 모델
– 강점과 약점
– 최근 전략적 움직임
- SWOT 분석 단계
- 앞선 두 단계 결과를 종합하여 우리 회사의 SWOT 분석을 수행하세요:
– 내부 강점/약점
– 외부 기회/위협
– 각 요소에 대한 구체적 근거
- 전략 수립 단계
- 분석 결과를 바탕으로 향후 3년간의 구체적인 비즈니스 전략을 제안하세요:
– 단기/중기/장기 목표
– 핵심 실행 전략
– 예상되는 리스크와 대응 방안
- 최종 보고서 통합 단계
- 이전 4개 단계의 분석 결과를 통합하여 전문적이고 체계적인 비즈니스 전략 보고서를 작성하요.
– executive summary 포함
– 데이터 기반 인사이트
– 명확하고 설득력 있는 구조
|
메모) 프롬프트 체인을 만든다는 것은 프롬프트들이 서로 연결된다는 것입니다. 뒤의 프롬프트가 앞의 프롬프트를 언급해서 앞의 프롬프트 결과를 사용해야 합니다.
예에서 강점, 약점, 목표 등은 사용자가 제공해야 합니다.
다음과 같이 CDPE 방법을 적용해 다음과 같이 단계 전에 지시를 해서 단계 진행별 필요한 정보를 제공할 수 있습니다. “비즈니스 전략 보고서를 다음과 같은 단계로 작성하려고 합니다. 각 단계를 진행하면서 필요한 정보가 있으면 단계 진행을 멈추고 필요한 정보를 요청하고 받고 진행하세요.”
이 텍스트는 복잡한 문제 해결을 위한 향상된 프롬프팅 기법인 Tree of Thoughts (ToT)에 대해 설명합니다.
ToT는 LLM의 문제 해결 능력을 향상시키는 유망한 프레임워크입니다. 중간 단계의 생각들을 생성하고 평가하는 능력, 그리고 탐색 알고리즘을 통해 복잡한 문제에 대한 해결 전략을 수립할 수 있습니다. 다양한 탐색 전략과 강화학습을 통해 ToT 시스템은 지속적으로 발전할 가능성을 가지고 있습니다.
- 복잡한 문제 해결에 있어 탐색과 전략적 예측을 가능하게 함.
- 문제 해결을 위한 중간 단계 역할을 하는 ‘생각(thoughts)’들의 트리를 구성하고 탐색. 각 생각은 일관된 언어 시퀀스로 표현됨.
- LLM이 중간 단계들을 스스로 평가하여 문제 해결 과정을 추론하고, 탐색 알고리즘(예: BFS, DFS)을 통해 체계적인 탐색 및 역추적 가능.
- 각 단계에서 여러 후보 생각 생성. LLM이 각 후보를 평가 (예: “확실/아마도/불가능”). 평가 결과에 따라 탐색을 진행 (예: BFS, DFS).
- 기본 원리
- 문제 해결을 위한 다중 경로 탐색
- 각 사고의 가능성을 트리 구조로 체계화
- 동적 탐색 및 평가 메커니즘
- 작동 메커니즘
- 문제를 중간 단계로 decompose
- 각 단계에서 다양한 사고 경로 생성
- 각 경로의 잠재력 평가
- 가장 유망한 경로 선택적 탐색
- 핵심 구성 요소
- 생성(Generate): 다양한 사고/해법 생성
- 상태 평가(Value): 각 사고의 잠재력 측정
- 탐색(Search): 최적 경로 선택
- ToT 핵심 전략
- 다차원적 사고 접근
- multiple paths 탐색
- 각 경로의 잠재력 평가
- 점진적 아이디어 정제
- 평가 메커니즘
- 객관적 평가 기준 설정
- 정량적/정성적 분석 병행
- 지속적인 아이디어 검증
|
- Tree of Thoughts (ToT) 프롬프트 작성법
1. 구조적 설계 원칙
- 프롬프트 구조화 핵심 요소
- 명확한 목적 설정
- 단계별 세분화
- 평가 기준의 객관성
- 유연성 확보
- 효과적인 프롬프트 설계 전략
- 단계별 접근 방법
- 초기 탐색 단계
- 광범위한 아이디어 생성
- 다양성 확보
- 제약 조건 최소화
- 평가 및 필터링 단계
- 객관적 평가 기준 수립
- 정량적/정성적 메트릭스 활용
- 멀티 앵글 분석
- 심층 분석 단계
- 유망 대안 집중 탐색
- 세부적 실행 가능성 검증
- 잠재적 리스크 식별
- 프롬프트 작성 핵심 기술
- 효과적인 프롬프트 구성 요소
- 명확한 컨텍스트 제공
- 구체적인 평가 기준
- 단계별 세부 지침
- 제약 조건 명시
- 평가 기준 설계
- 평가 메커니즘 개발
- 객관성
- 다차원적 분석
- 기술적 타당성
- 경제적 잠재력
- 사회적 영향
- 혁신성
- 프롬프트 작성 템플릿
- [목표] 달성을 위한 Tree of Thoughts 접근법초기 탐색 단계:
– 최소 [N]개, 최대 [M]개 아이디어 생성
– 다음 기본 조건 준수:
1. [조건 1]
2. [조건 2]
3. [조건 3]평가 기준:
1. 혁신성 (0-10점)
2. 실현 가능성 (0-10점)
3. 잠재적 영향력 (0-10점)심층 분석 단계:
– 상위 [X]개 아이디어 선택
– 다음 항목 상세 분석:
1. 기술적 구현 방안
2. 잠재적 리스크
3. 확장성
4. 차별화 포인트최종 선정 기준:
– 총합 점수 최고점
– 다각도 검증 완료
- 고급 프롬프트 기법
- 고려해야 할 고급 전략
- 컨텍스트 풍부화
- 제약 조건의 지능적 설계
- 피드백 루프 통합
- 학습 메커니즘 내재화
- 주의사항
- 프롬프트 설계 시 피해야 할 함정
- 과도한 제약
- 모호한 평가 기준
- 지나친 복잡성
- 맥락 결여
- 실제 적용 팁
- 프롬프트 최적화 전략
- 점진적 정제
- 다양한 변형 시도
- 결과 지속 모니터링
- 유연한 조정
- 성공적인 ToT 프롬프트의 핵심 특징
|
실제 사례를 가지고 제시한 내용에 따라 ToT를 진행하는 과정을 설명해주세요.
실제 사례로 본 Tree of Thoughts (ToT) 프롬프트 적용
시나리오: 지속가능한 도시 교통 혁신 프로젝트
- 초기 탐색 단계 프롬프트
- 목표: 대도시의 교통 혼잡과 탄소 배출을 획기적으로 감소시키는 혁신적인 솔루션 개발
- 초기 아이디어 생성 가이드라인:
- – 최소 5개, 최대 10개의 혁신적인 교통 솔루션 제안
- – 다음 핵심 조건 만족:
- 1. 탄소 배출 최소화
- 2. 도시 인프라와 호환 가능
- 3. 경제적 실현 가능성
- 4. 사용자 편의성 고려
- 제안할 솔루션의 초기 영역:
- – 전기 모빌리티
- – 스마트 대중교통
- – 공유 경제 기반 교통
- – 자율주행 기술
- – 친환경 인프라 혁신
- 아이디어 평가 단계 프롬프트
- 초기 생성된 교통 솔루션 평가
- 평가 기준 (각 항목 0-10점):
- 1. 혁신성
- – 기존 솔루션과의 차별점
- – 기술적 혁신 수준
- 2. 실현 가능성
- – 기술적 구현 가능성
- – 초기 투자 대비 효율성
- – 규제 및 법적 장애물
- 3. 환경적 영향
- – 탄소 배출 감소 잠재력
- – 지속가능성
- – 생태계 긍정적 영향
- 4. 경제성
- – 장기적 수익 모델
- – 운영 비용
- – 확장 가능성
- 상위 3개 아이디어 선정 및 상세 분석 준비
- 심층 분석 단계 프롬프트
- 상위 3개 교통 솔루션 심층 분석
- 상세 분석 항목:
- 1. 기술적 구현 방안
- – 필요 기술 스택
- – 기술적 혁신 포인트
- – 프로토타입 개발 로드맵
- 2. 잠재적 리스크 분석
- – 기술적 리스크
- – 시장 수용성 리스크
- – 규제 및 법적 리스크
- – 재정적 리스크
- 3. 확장성 검토
- – 다른 도시/지역 적용 가능성
- – 글로벌 스케일링 전략
- – 장기 성장 시나리오
- 4. 차별화 포인트
- – 경쟁 솔루션 대비 장점
- – 독창적 접근 방식
- – 사용자 가치 제안
- 최종 선정 및 실행 계획 프롬프트
- 최종 선정 솔루션: 스마트 도시 자율주행 공유 전기 미니버스 시스템
- 최종 실행 계획 수립:
- 1. MVP(최소기능제품) 개발 로드맵
- – 초기 프로토타입 개발 기간
- – 기술 검증 단계
- – 파일럿 테스트 계획
- 2. 초기 투자 및 자금 조달 전략
- – 예상 초기 투자 규모
- – 잠재적 투자자/파트너
- – 자금 조달 접근 방식
- 3. 단계별 롤아웃 전략
- – 초기 도입 도시 선정
- – 단계별 확장 계획
- – 성과 측정 지표
- 4. 지속가능성 및 장기 비전
- – 환경적 영향 측정
- – 사회적 가치 창출
- – 미래 기술 로드맵.
|
메모) 챗 방식을 사용하면, 더 강력해진 LLM은 특별한 다른 방법 필요 없이 “Tree of Thoughts”을 언급하면서 프롬프트 만으로도 가능해 졌습니다.
단계별로 프롬프트 제공하지 않고 할 수 있는 방식으로 할 때 다음과 같이 프롬프트를 작성할 수 있습니다. 각 단계별로 다음 단계 진행에 대해 물을 수도 있습니다.
우리는 지속가능한 도시 교통 혁신 프로젝트을 위한 혁신적인 비즈니스 아이디어를 탐색할 것입니다. 아이디어를 10개로 시작합니다.
Tree of Thoughts 방법론을 활용하여 다음 단계로 진행하세요.
각 단계를 진행하면서 필요한 정보가 있으면 단계 진행을 멈추고 필요한 정보를 요청하고 받고 진행하세요.
######초기 탐색 단계 프롬프트
목표: 대도시의 교통 혼잡과 탄소 배출을 획기적으로 감소시키는 혁신적인 솔루션 개발
초기 아이디어 생성 가이드라인:
– 최소 5개, 최대 10개의 혁신적인 교통 솔루션 제안
– 다음 핵심 조건 만족:
1. 탄소 배출 최소화
2. 도시 인프라와 호환 가능
3. 경제적 실현 가능성
4. 사용자 편의성 고려
제안할 솔루션의 초기 영역:
– 전기 모빌리티
– 스마트 대중교통
– 공유 경제 기반 교통
– 자율주행 기술
– 친환경 인프라 혁신
아이디어 평가 단계 프롬프트
초기 생성된 교통 솔루션 평가
평가 기준 (각 항목 0-10점):
1. 혁신성
– 기존 솔루션과의 차별점
– 기술적 혁신 수준
2. 실현 가능성
– 기술적 구현 가능성
– 초기 투자 대비 효율성
– 규제 및 법적 장애물
3. 환경적 영향
– 탄소 배출 감소 잠재력
– 지속가능성
– 생태계 긍정적 영향
4. 경제성
– 장기적 수익 모델
– 운영 비용
– 확장 가능성
상위 3개 아이디어 선정 및 상세 분석 준비
심층 분석 단계 프롬프트
상위 3개 교통 솔루션 심층 분석
상세 분석 항목:
1. 기술적 구현 방안
– 필요 기술 스택
– 기술적 혁신 포인트
– 프로토타입 개발 로드맵
2. 잠재적 리스크 분석
– 기술적 리스크
– 시장 수용성 리스크
– 규제 및 법적 리스크
– 재정적 리스크
3. 확장성 검토
– 다른 도시/지역 적용 가능성
– 글로벌 스케일링 전략
– 장기 성장 시나리오
4. 차별화 포인트
– 경쟁 솔루션 대비 장점
– 독창적 접근 방식
– 사용자 가치 제안
최종 선정 및 실행 계획 프롬프트
최종 선정 솔루션: 스마트 도시 자율주행 공유 전기 미니버스 시스템
최종 실행 계획 수립:
1. MVP(최소기능제품) 개발 로드맵
– 초기 프로토타입 개발 기간
– 기술 검증 단계
– 파일럿 테스트 계획
2. 초기 투자 및 자금 조달 전략
– 예상 초기 투자 규모
– 잠재적 투자자/파트너
– 자금 조달 접근 방식
3. 단계별 롤아웃 전략
– 초기 도입 도시 선정
– 단계별 확장 계획
– 성과 측정 지표
4. 지속가능성 및 장기 비전
– 환경적 영향 측정
– 사회적 가치 창출
– 미래 기술 로드맵 |
이 텍스트는 지식 집약적인 작업에서 언어 모델의 성능을 향상시키는 기법인 Retrieval Augmented Generation (RAG)에 대해 설명합니다.
- 일반적인 언어 모델은 감정 분석, 개체명 인식과 같은 작업에는 효과적이지만, 추가적인 배경 지식이 필요한 복잡한 작업에는 한계를 보임.
- RAG는 외부 지식 소스를 활용하여 사실적 일관성, 신뢰성을 향상시키고, “환각(hallucination)” 문제를 완화하는 방법.
- RAG의 작동 방식
- 입력을 받아 관련 문서를 검색 (예: Wikipedia).
- 검색된 문서들을 원본 입력과 함께 텍스트 생성 모델에 입력.
- 생성 모델은 입력과 문서 내용을 기반으로 최종 출력 생성.
- RAG의 장점
- 사실적 일관성 및 신뢰성 향상: 외부 지식 소스 활용
- 환각 현상 완화: 근거 없는 내용 생성 방지.
- 적응성: 외부 지식 소스 업데이트를 통해 모델 재훈련 없이 최신 정보 반영 가능. LLM의 정적 지식 문제 해결.
- 효율적인 수정: 전체 모델 재훈련 없이 지식 업데이트 가능.
|
메모) LLM은 사전 훈련에 사용된 데이터만 알고 있기 때문에 사전 훈련 이후에 생성된 데이터나 기업이나 개인의 내부 데이터는 모르는 문제가 있습니다. 이를 보완하기 위한 방법으로 RAG가 등장했습니다.
검색이나 지식 기반 구축을 통한 데이터를 프롬프트의 컨텍스트에 포함하는 방법을 사용합니다. 챗 방식을으로 하는 경우 사용자 메시지로 추가하면 됩니다.
저는 파인튜닝 보다 검색과 지식 기반 구축하는 방법을 선호합니다.
RAG(Retrieval Augmented Generation)를 설명하기 좋은 예시는 다음과 같습니다. 핵심은 외부 지식을 활용하여 답변의 정확도와 신뢰도를 높이는 것입니다.
1. 전문 지식 기반 질의응답:
- 질문: “2023년 노벨 물리학상 수상자의 연구 업적을 요약해줘.”
- RAG 적용 전: 일반적인 언어 모델은 2023년 노벨상 정보를 학습하지 못했을 가능성이 높아 부정확하거나 엉뚱한 답변을 할 수 있습니다.
- RAG 적용 후: RAG는 외부 문서(e.g., 위키피디아, 뉴스 기사)에서 2023년 노벨 물리학상 수상자 정보를 검색하고, 이를 바탕으로 정확한 답변을 생성합니다. 수상자 이름, 연구 분야, 업적을 요약하여 제공할 수 있습니다.
2. 특정 도메인 문서 요약:
- 요청: “내부 서버에 저장된 100페이지 분량의 ‘회사 개인정보보호 정책’ 문서를 핵심 내용만 요약해줘.”
- RAG 적용 전: 일반적인 언어 모델은 해당 문서에 접근 권한이 없으므로 요약할 수 없습니다.
- RAG 적용 후: RAG는 문서에 접근하여 내용을 분석하고, 중요한 조항 및 핵심 내용을 추출하여 요약본을 생성합니다.
3. 고객 지원 챗봇:
- 고객 질문: “A 제품의 환불 정책은 어떻게 되나요?”
- RAG 적용 전: 학습 데이터에 없는 특정 제품의 환불 정책에 대해서는 답변이 어렵습니다.
- RAG 적용 후: RAG는 회사 내부 데이터베이스(e.g., FAQ, 제품 매뉴얼)에서 A 제품의 환불 정책 정보를 검색하고, 고객에게 정확한 답변을 제공합니다.
4. 코드 생성:
- 요청: “Python으로 특정 API를 호출하는 코드를 작성해줘.”
- RAG 적용 전: API의 스펙이나 사용법을 모르면 정확한 코드 생성이 어렵습니다.
- RAG 적용 후: RAG는 API 문서를 검색하여 필요한 정보를 추출하고, 이를 바탕으로 정확한 Python 코드를 생성합니다.
핵심 요약:
RAG는 외부 정보를 활용하여 답변의 품질을 향상시키는 기법입니다. 위 예시처럼 전문 지식, 특정 문서, 내부 데이터베이스 등 다양한 소스를 활용하여 답변의 정확성, 신뢰도, 최신성을 확보할 수 있습니다. 이를 통해 언어 모델의 활용 범위를 넓히고 실질적인 문제 해결에 도움을 줄 수 있습니다. |
메모) RAG를 하려면, 검색 엔진이나 지식 기반 구축을 위한 기능을 제공해야 하기 때문에, 이를 위한 생성형 AI 애플리케이션을 사용해야 합니다.
대규모 언어 모델(LLM)은 few-shot 또는 zero-shot 설정에서 중간 추론 단계(Chain of Thought, CoT)를 생성하여 복잡한 추론을 수행할 수 있습니다. 나아가 각 추론 단계는 핵심 LLM 기능을 넘어서는 계산을 지원하기 위해 외부 도구(예: 검색/코드 실행)를 활용할 수 있습니다.
ART는 작업 라이브러리에서 주어진 작업에 가장 가까운 데모를 선택합니다. 데모는 어떤 과정으로 어떤 도구를 사용해 작업을 수행했는지를 알려줍니다. ART는 데모 내용에 따라 주어진 작업을 수행합니다.
ART는 또한 확장 가능하며, 사람이 작업별 프로그램의 오류를 수정하거나 새로운 도구를 통합하여 성능을 쉽게 향상시킬 수 있도록 합니다. 최소한의 인간 개입으로 선택된 작업의 성능을 대폭 향상시켜 이를 입증합니다. |
메모) 어떤 도구들이 필요할까요? RAG에서 봤듯이 검색 도구와 지식기반 데이터에 접근할 도구가 필요합니다. LLM은 언어모델이니 수학 문제를 전문적으로 해결할 도구가 있으면 좋습니다. AIPIlotSmarteasy에서 제공하는 코파일럿 에이전트 같은 자연어로 전문 영역의 문제를 해결할 수 있는 도구가 있어야 합니다. 준비된 도구로 해결할 수 없다면 코드를 생성 실행 도구가 있다면 금상첨화입니다.
제공해주신 내용은 Automatic Prompt Engineer (APE) 프레임워크에 대한 설명과 관련 연구들을 소개하고 있습니다. 이를 바탕으로 APE 및 프롬프트 최적화에 대한 분석을 제공합니다.
APE는 LLM을 활용하여 자동으로 프롬프트를 생성하고 최적화하는 프레임워크입니다. 블랙박스 최적화 방식을 사용하며, 특히 CoT 추론 능력 향상에 효과적임을 보여줍니다.
* 블랙박스 최적화(Black-box optimization)는 내부 작동 방식을 알지 못하는 시스템이나 함수의 출력을 최적화하는 기법입니다. 프롬프트 엔지니어링에서 블랙박스 최적화는 LLM의 내부 작동 방식을 완전히 이해하지 못하더라도, 입력(프롬프트)과 출력(LLM의 응답)의 관계를 관찰하고 분석하여 최적의 프롬프트를 찾는 데 사용됩니다.
- APE 작동 방식
- 후보 생성: Inference 모델(LLM)이 출력 데모를 기반으로 다양한 프롬프트 후보 생성.
- 검색 및 평가: Target 모델을 통해 후보 프롬프트들을 실행하고 평가 점수 계산.
- 선택: 가장 높은 평가 점수를 받은 프롬프트를 최적 프롬프트로 선택.
- 주요 성과
- 기존의 “Let’s think step by step”보다 효과적인 zero-shot CoT 프롬프트 발견.
- “Let’s work this out in a step by step way to be sure we have the right answer.” 프롬프트를 통해 MultiArith, GSM8K 벤치마크에서 성능 향상 달성.
|
메모) 프롬프트만을 사용하여 Automatic Prompt Engineer (APE)와 유사한 기능을 구현하는 방법
네, 프롬프트만을 사용하여 Automatic Prompt Engineer (APE)와 유사한 기능을 구현하는 방법을 설명드리겠습니다. 하지만 완벽하게 APE 프레임워크를 대체하는 것은 어렵고, 제한적인 범위 내에서 최적화를 시도하는 방식이 될 것입니다.
프롬프트 예시:
다음 과제를 가장 잘 수행하는 프롬프트를 생성해 주세요. 과제는 “[특정 과제 설명]”입니다.
다양한 프롬프트 변형을 최소 5개 이상 생성하고, 각 프롬프트에 대해 예상되는 출력과 그 이유를 설명해 주세요. 또한, 각 프롬프트의 장점과 단점을 비교 분석해 주세요. 마지막으로, 가장 효과적이라고 생각하는 프롬프트를 추천하고 그 이유를 설명해 주세요.
예시: “[특정 과제 설명]”이 “주어진 문장을 요약해 주세요.”인 경우:
다음 과제를 가장 잘 수행하는 프롬프트를 생성해 주세요. 과제는 “주어진 문장을 요약해 주세요.”입니다.
다양한 프롬프트 변형을 최소 5개 이상 생성하고, 각 프롬프트에 대해 예상되는 출력과 그 이유를 설명해 주세요. 또한, 각 프롬프트의 장점과 단점을 비교 분석해 주세요. 마지막으로, 가장 효과적이라고 생각하는 프롬프트를 추천하고 그 이유를 설명해 주세요.
LLM의 응답 예시 (일부):
- 프롬프트 1: “다음 문장을 요약하세요: [문장]”
- 예상 출력: [요약된 문장]
- 이유: 간결하고 직접적인 지시.
- 장점: 이해하기 쉽고 빠른 응답 생성.
- 단점: 요약의 길이나 스타일에 대한 제약 없음.
- 프롬프트 2: “다음 문장을 30단어 이내로 요약하세요: [문장]”
- 예상 출력: [30단어 이내로 요약된 문장]
- 이유: 요약 길이 제한 추가.
- 장점: 간결한 요약 생성.
- 단점: 내용 손실 가능성.
- … (다른 프롬프트 변형들) …
- 추천 프롬프트: 프롬프트 2
- 이유: 간결하면서도 핵심 내용을 잘 담고 있을 가능성이 높음.
한계점:
- 자동화 수준: APE처럼 완전 자동화된 최적화는 어려움. 사용자가 최종적으로 프롬프트를 선택하고 평가해야 함.
- 평가 기준: LLM이 생성한 평가는 주관적일 수 있으며, 객관적인 평가 지표를 사용하기 어려움.
- 확장성: 복잡한 작업이나 특정 도메인에 대한 프롬프트 최적화는 어려울 수 있음.
이 방법은 APE의 핵심 아이디어를 프롬프트 내에서 구현하는 간단한 접근 방식입니다. 하지만 한계점을 고려하여 적절하게 활용해야 합니다. 실제 APE 프레임워크는 더 정교한 알고리즘과 평가 메커니즘을 사용하여 프롬프트를 최적화합니다. |
제공해주신 내용은 Active-Prompt라는 새로운 프롬프팅 기법에 대한 설명입니다. 핵심은 CoT 방법의 고정된 예시 세트 문제점을 해결하기 위해, 작업별로 특화된 예시 프롬프트를 적응적으로 사용하는 것입니다.
Active-Prompt는 불확실성이 높은 질문에 대해 사람의 피드백을 반영하여 CoT 프롬프트의 예시를 동적으로 개선하는 기법입니다.
1. Active-Prompt의 핵심 동작 방식
- 초기 질의: 소수의 CoT 예시 또는 예시 없이 LLM에 질의
- k개 답변 생성: 훈련 질문 세트에 대해 k개의 답변 생성
- 불확실성 측정: 생성된 k개 답변 간의 불일치를 기반으로 불확실성 측정
- 선택 및 주석: 불확실성이 가장 높은 질문들을 선택하여 사람이 CoT 추론 과정을 주석으로 추가
- 추론: 새롭게 주석이 추가된 예시를 사용하여 각 질문에 대해 추론
2. 기존 CoT 방법과의 차이점
- 고정된 예시 세트 문제 해결: 기존 CoT는 고정된 예시를 사용하지만, Active-Prompt는 작업별로 적응적으로 예시를 선택하고 개선
- 인간 참여: 사람의 주석을 통해 LLM의 추론 능력 향상
- 동적 학습: 불확실성 기반 학습으로 효율적인 성능 개선
3. 장점
- 향상된 성능: 작업별 최적의 예시를 사용하여 추론 성능 향상 기대
- 효율적인 학습: 불확실성이 높은 질문에 집중하여 효율적인 학습 가능
- 적응성: 다양한 작업에 적응적으로 적용 가능
4. 단점
- 인간의 노력 필요: 사람의 주석 작업이 필요하므로 추가적인 비용 발생
- 불확실성 측정의 어려움: 적절한 불확실성 측정 지표 선택 중요
|
고정된 예시 세트를 사용하는 Chain-of-Thought (CoT) 프롬프팅의 주요 문제점은 다음과 같습니다.
- 다양한 작업에 대한 적용성 부족: 특정 작업에 효과적인 예시 세트가 다른 작업에서는 효과가 없거나 오히려 성능을 저하시킬 수 있습니다. 예를 들어, 수학 문제 해결에 적합한 CoT 예시가 코드 생성에는 적합하지 않을 수 있습니다.
- 최적의 예시 선택 어려움: 어떤 예시가 특정 작업에 가장 효과적인지 미리 알기 어렵습니다. 수많은 예시들을 테스트해야 최적의 예시 세트를 찾을 수 있지만, 이는 매우 비효율적입니다.
- 새로운 작업에 대한 대응 어려움: 새로운 유형의 작업이 등장할 때마다 해당 작업에 적합한 예시 세트를 다시 만들어야 합니다. 이러한 수동적인 과정은 확장성이 떨어집니다.
- 편향성 문제: 예시 세트에 편향이 존재하는 경우, LLM의 출력에도 편향이 반영될 수 있습니다. 예를 들어, 특정 인종이나 성별에 편향된 예시를 사용하면 LLM이 편향된 답변을 생성할 수 있습니다.
- 데이터 부족: 일부 작업에서는 충분한 양의 고품질 예시 데이터를 구하기 어려울 수 있습니다. 특히 전문적인 지식이 필요한 분야에서는 예시 데이터 구축에 많은 비용과 시간이 소요될 수 있습니다.
Active-Prompt와 같은 기법은 이러한 고정된 예시 세트의 문제점을 해결하기 위해 등장했습니다. 불확실성을 기반으로 예시를 동적으로 선택하고 개선함으로써, 다양한 작업에 대한 적응성을 높이고 효율적인 학습을 가능하게 합니다. |
Active-Prompt 적용 예시: 영화 리뷰 감정 분석
과제: 영화 리뷰를 읽고 긍정적인 리뷰인지 부정적인 리뷰인지 분류하는 모델을 학습시키고자 합니다.
1. 초기 단계:
- 훈련 데이터: 다양한 영화 리뷰(긍정/부정)로 구성된 훈련 데이터셋을 준비합니다.
- 초기 프롬프트: “다음 영화 리뷰의 감정을 분석하세요: [리뷰]” 와 같은 간단한 프롬프트와 함께 소수의 CoT 예시(감정 분석 추론 과정을 보여주는 예시)를 제공합니다.
- LLM 질의 및 답변 생성: LLM에 훈련 데이터셋의 리뷰들을 입력하고, 각 리뷰에 대해 긍정/부정 분류 답변을 k개 생성합니다 (예: k=3).
2. 불확실성 측정:
- 각 리뷰에 대해 생성된 k개의 답변 간의 불일치를 측정합니다. 예를 들어, 3개의 답변 중 2개가 “긍정”, 1개가 “부정”이라면 불확실성이 존재합니다. 불일치 정도가 높을수록 불확실성이 크다고 판단합니다.
3. 선택 및 주석:
- 불확실성이 가장 높은 리뷰들을 선택합니다.
- 선택된 리뷰들에 대해 사람이 직접 CoT 추론 과정을 주석으로 작성합니다. 예:
- 리뷰: “이 영화는 정말 지루하고, 스토리도 엉망이었다. 시간 낭비였다.”
- 주석 (CoT): “영화가 지루하고 스토리가 엉망이라고 언급되었으므로 부정적인 리뷰입니다. ‘시간 낭비’라는 표현 또한 부정적인 감정을 강조합니다. 따라서 이 리뷰는 부정적입니다.”
4. 추가 학습 및 평가:
- 새롭게 주석이 추가된 예시들을 기존 CoT 예시 세트에 추가합니다.
- 추가된 예시를 포함한 프롬프트를 사용하여 LLM을 다시 학습시키고 성능을 평가합니다.
5. 반복 (선택):
- 필요에 따라 2-4단계를 반복하여 더 많은 불확실한 리뷰에 대한 주석을 추가하고 모델을 개선할 수 있습니다.
Active-Prompt의 효과:
- 초기에는 LLM이 애매하게 분류했던 리뷰들에 대해 명확한 CoT 추론 과정을 학습하게 됩니다.
- 결과적으로 모델의 감정 분석 성능이 향상될 것으로 기대할 수 있습니다.
핵심: Active-Prompt는 LLM이 어려워하는 부분을 파악하고, 사람의 전문 지식을 활용하여 LLM의 학습을 효율적으로 돕는다는 점에서 큰 의미가 있습니다. 이를 통해 더 적은 데이터로도 높은 성능을 달성할 수 있습니다. |
다음은 Active-Prompt 적용 방법입니다.
1. 다양한 프롬프트 변형 생성:
LLM에게 주어진 task에 대해 다양한 프롬프트 변형을 생성하도록 지시합니다. 이때, 변형된 프롬프트들이 어떤 부분에서 차이가 있는지 명시적으로 설명하도록 요구합니다.
다음 과제를 해결하기 위한 다양한 프롬프트를 생성해 주세요: "[과제 설명]"
각 프롬프트는 서로 다른 관점이나 전략을 사용해야 합니다. 최소 5개 이상의 프롬프트를 생성하고, 각 프롬프트의 차이점을 설명하세요.
2. LLM을 이용한 자체 평가 (선택적):
생성된 프롬프트 변형들을 사용하여 LLM이 자체적으로 평가를 수행하도록 할 수 있습니다. 각 프롬프트에 대한 예상 답변, 장점, 단점 등을 LLM이 스스로 분석하도록 유도합니다.
이전 단계에서 생성한 각 프롬프트에 대해 다음 정보를 제공해 주세요:
* 예상 답변: 프롬프트를 사용했을 때 예상되는 답변의 형태와 내용
* 장점: 해당 프롬프트의 장점
* 단점: 해당 프롬프트의 단점
3. 사람의 검토 및 선택:
LLM이 생성한 프롬프트 변형과 자체 평가 결과를 검토합니다. 가장 적합하다고 판단되는 프롬프트를 선택하고, 필요에 따라 수정합니다. LLM의 자체 평가가 부정확하거나 불충분한 경우, 사람이 직접 평가하고 선택해야 합니다.
4. 선택된 프롬프트를 사용하여 답변 생성:
선택된 프롬프트를 사용하여 LLM으로부터 최종 답변을 얻습니다.
5. 반복 (선택적):
LLM의 답변이 만족스럽지 않은 경우, 1-4단계를 반복하여 프롬프트를 개선할 수 있습니다. 이전 단계에서 얻은 정보를 바탕으로 새로운 프롬프트 변형을 생성하고 평가합니다. |
Directional Stimulus Prompting(DSP)는 LLM이 원하는 요약을 생성하도록 안내하는 새로운 프롬프팅 기법으로, 조정 가능한 정책 LM을 사용하여 자극/힌트를 생성합니다.
Li et al., (2023)(opens in a new tab) proposes a new prompting technique to better guide the LLM in generating the desired summary.
1.DSP의 작동 방식
- 정책 LM: 튜닝 가능한 정책 LM이 자극/힌트 생성
- 블랙박스 LLM: 고정된 블랙박스 LLM이 힌트를 기반으로 요약 생성
- 강화 학습: 정책 LM은 강화 학습을 통해 최적의 힌트 생성 방법 학습
2. DSP와 표준 프롬프팅의 비교
- 표준 프롬프팅: 사람이 직접 작성한 프롬프트 사용
- DSP: 정책 LM이 생성한 힌트를 추가하여 LLM 안내
3. 장점
- 요약 품질 향상: LLM에게 명확한 방향 제시
- 효율적인 최적화: 작은 규모의 정책 LM 사용으로 계산 비용 절감
- 적응성: 다양한 요약 작업에 적용 가능.
4. 핵심 기술:
- 강화 학습: 정책 LM 학습에 강화 학습 활용
- 튜닝 가능한 정책 LM: 작업에 따라 정책 LM 조정 가능
### Key Insights
* **프롬프트 엔지니어링 자동화:** DSP는 프롬프트 생성 과정을 자동화하는 방법론 제시.
* **강화 학습의 활용:** LLM 최적화를 위한 강화 학습 활용 증가 추세.
* **모듈화된 프롬프팅:** 힌트 생성과 요약 생성을 분리하여 효율성과 유연성 향상.
### Recommendations
* **다양한 태스크에 대한 적용 및 평가:** DSP를 다양한 요약 및 기타 자연어 생성 작업에 적용하여 성능 검증.
* **정책 LM의 크기 및 구조 최적화 연구:** 더 효율적인 정책 LM 설계 방안 연구.
* **강화 학습 알고리즘 개선:** 정책 LM 학습에 사용되는 강화 학습 알고리즘 개선 연구.
* **사람의 피드백 통합:** 사람의 피드백을 통합하여 정책 LM의 성능 향상. |
다음은 Directional Stimulus Prompting의 몇 가지 예시입니다:
탐색적 프롬프트
당신은 창의적인 문제 해결사입니다. 다음 문제를 해결하기 위해 최대한 다양한 관점에서 접근해주세요: [문제 설명]
- 비전통적인 해결책 제안
- 각 접근법의 장단점 분석
- 가장 혁신적인 솔루션 선택 근거 설명
제약 기반 프롬프트
다음 제약 조건을 모두 만족하는 솔루션을 설계하세요:
- 리소스 제한
- 기술적 제약
- 시간/비용 제약
- 윤리적 고려사항
각 제약 조건이 솔루션에 미치는 영향을 상세히 설명해주세요.
다중 관점 프롬프트
[주제/문제]에 대해 다음 5가지 다른 전문가 관점에서 분석해주세요:
- 경제학자
- 심리학자
- 기술 혁신가
- 사회학자
- 환경 전문가
각 관점에서 고유한 통찰과 해결 접근법을 제시하세요.
시나리오 기반 프롬프트
다음 가상 시나리오를 분석하고 최적의 대응 전략을 개발하세요:
- 초기 상황
- 잠재적 변수/위험 요소
- 단계별 의사결정 프로세스
- 예상치 못한 상황에 대한 대비책
확장/수렴 프롬프트
[주제]에 대해:
- 가능한 모든 아이디어/접근법 발산적으로 나열
- 각 아이디어를 엄격한 기준으로 평가
- 최종 3개 최고의 솔루션 수렴
- 선정 근거를 상세히 문서화 이러한 프롬프트들은 AI의 사고 과정을 구조화하고 더 깊이 있고 다각도로 문제에 접근하도록 유도합니다.
|
텍스트 분석 개요
이 문서는 추론과 행동 단계를 번갈아 수행하는 ReAct 프롬프팅 프레임워크에 대해 설명합니다. ReAct를 통해 대규모 언어 모델(LLM)은 외부 리소스와 상호작용하여 답변의 신뢰성과 사실성을 향상시킬 수 있습니다. ReAct는 Chain-of-Thought(CoT) 프롬프팅 방법을 기반으로 하며, 외부 지식을 통합하여 CoT의 한계를 극복합니다. HotpotQA 예시를 통해 ReAct의 실제 적용 방식을 보여줍니다.
상세 분석
ReAct 프롬프팅의 주요 특징:
- 추론과 행동의 교차 생성: ReAct는 LLM이 추론 과정(Thought)과 작업별 행동(Act)을 번갈아 생성하도록 유도합니다. 이러한 반복적인 프로세스는 동적 계획, 적응 및 예외 처리를 가능하게 합니다.
- 외부 지식 통합: 지식 베이스 또는 환경과 같은 외부 소스와 상호작용하여 LLM이 최신 정보에 접근하고 통합할 수 있도록 하여, 더욱 사실적이고 신뢰할 수 있는 답변을 생성합니다.
- 향상된 해석 가능성 및 신뢰성: ReAct에서 생성된 명시적인 추론 과정은 LLM의 의사 결정 과정에 대한 통찰력을 제공하여 투명성과 신뢰성을 향상시킵니다.
- 사고의 연쇄(CoT)와의 시너지: ReAct를 CoT와 결합하면 LLM의 내부 지식과 외부에서 검색된 정보를 모두 활용하여 성능이 향상됩니다.
ReAct 작동 방식:
- 추론과 행동의 시너지: 인간의 문제 해결 방식에서 영감을 얻은 ReAct는 추론과 행동을 결합하여 복잡한 작업을 처리합니다.
- CoT의 한계 극복: ReAct는 외부 정보 접근 및 동적 지식 업데이트를 통해 CoT의 한계(예: 사실 환각 및 오류 전파)를 극복합니다.
- 동적 추론: ReAct는 관찰된 정보를 기반으로 행동 계획을 생성, 유지 및 조정하는 동적 추론을 용이하게 합니다.
- 외부 환경과의 상호작용: Wikipedia, 검색 엔진 등 외부 환경과의 상호작용을 통해 LLM에 추가 정보를 제공하여 추론을 향상시킵니다.
HotpotQA 예시: 제공된 예시는 HotpotQA 질문(“Apple Remote 외에 어떤 기기가 Apple Remote가 원래 상호 작용하도록 설계된 프로그램을 제어할 수 있을까?”)에 ReAct를 적용하는 방법을 보여줍니다. LLM은 Thought-Act 궤적을 생성하고, 관찰(Obs)은 검색 엔진에서 검색된 정보를 나타냅니다. 추론은 정보 검색 프로세스를 안내하고, 검색된 정보는 추론을 뒷받침하고 개선합니다. 단순화를 위해 생략되었지만, 일반적으로 프롬프트에는 LLM의 행동을 안내하기 위한 in-context 예시가 포함됩니다.
주요 통찰
ReAct는 내부 추론과 외부 지식 검색을 결합하여 LLM 성능과 신뢰성을 크게 향상시킵니다. 반복적인 Thought-Act-Observe 주기는 동적인 문제 해결을 가능하게 하고 CoT와 같은 순수 내부 추론 방식의 한계를 해결합니다.
추가 탐구 제안
- 비교 성능 분석: 다양한 작업에서 ReAct, CoT 및 기타 프롬프팅 방법을 포괄적으로 비교 분석하면 각 방법의 상대적인 강점과 약점에 대한 귀중한 통찰력을 얻을 수 있습니다.
- 외부 도구의 영향: 다양한 외부 도구(예: 지식 베이스, API)가 ReAct 성능에 미치는 영향을 조사하면 특정 작업에 대한 최적의 도구 조합을 식별하는 데 도움이 됩니다.
- 프롬프트 엔지니어링 전략: 최적의 in-context 예시 설계 및 Thought-Act-Observe 시퀀스 구성과 같은 ReAct를 위한 효과적인 프롬프트 엔지니어링 전략을 탐구하면 성능을 더욱 향상시킬 수 있습니다.
- 다른 프레임워크와의 통합: ReAct를 다른 고급 프롬프팅 프레임워크와 통합할 가능성을 모색하면 더욱 강력하고 다재다능한 LLM 애플리케이션으로 이어질 수 있습니다.
|
텍스트 분석 개요
이 발췌문은 HotpotQA 예시를 통해 ReAct 프롬프팅을 설명합니다. ReAct는 “생각-행동-관찰” 주기를 사용하여 복잡한 질문을 분해하고 정확한 답변을 위해 외부 정보를 검색합니다. 이 주기는 few-shot exemplars를 통해 모델에게 제시됩니다. 프롬프트 구조는 작업에 따라 조정되며, 추론 중심 작업은 더 많은 생각 단계를 활용합니다.
상세 분석
ReAct 프롬프팅 메커니즘:
- Few-Shot Exemplars: ReAct는 HotpotQA와 같은 훈련 세트의 예시를 사용하여 원하는 “생각-행동-관찰” 형식을 보여줍니다. 이러한 예시는 LLM에 대한 가이드 역할을 합니다.
- 생각-행동-관찰 주기: 이 주기는 ReAct의 핵심입니다.
- 생각 (Thought): LLM은 질문에 대해 추론하여 계획을 세우거나 필요한 정보를 식별합니다. 이는 자유 형식이며 문제에 따라 적응합니다.
- 행동 (Action): 생각 과정을 기반으로 LLM은 정보 검색 또는 조회와 같은 수행할 행동을 지정합니다. 행동은 특정 형식(예:
Search[쿼리] )으로 지정됩니다.
- 관찰 (Observation): 행동의 결과로 외부 소스에서 검색된 정보를 나타냅니다. 이 관찰은 후속 생각과 행동에 대한 정보를 제공합니다.
- 작업별 프롬프팅: ReAct 프롬프트의 구조는 작업에 따라 조정됩니다. 추론 중심 작업(예: HotpotQA)은 여러 생각-행동-관찰 단계를 사용합니다. 행동 중심 작업은 더 적은 생각 단계를 사용하여 광범위한 추론보다 행동을 우선시합니다.
HotpotQA 예시 분석:
예시 질문인 “콜로라도 조산대의 동쪽 부분이 뻗어 있는 지역의 고도 범위는 무엇인가?”는 다음 단계를 통해 분해됩니다.
- 초기 생각 및 행동: LLM은 “콜로라도 조산대”를 검색해야 할 필요성을 인식합니다.
- 관찰 및 정제된 생각: 초기 검색에서 “동쪽 부분”이 언급되지 않아 새로운 조회 작업이 발생합니다.
- 반복: 관찰을 기반으로 “High Plains” 및 “High Plains (미국)”에 대한 후속 검색을 통해 프로세스가 반복됩니다.
- 최종 생각 및 행동: 최종 관찰은 고도 범위를 제공하여 최종 답변으로 이어집니다.
주요 통찰
ReAct는 외부 지식을 LLM 추론과 통합하는 구조적 접근 방식을 제공합니다. “생각-행동-관찰” 주기는 각 단계에서 검색된 정보에 따라 적응하는 동적 문제 해결을 가능하게 합니다. 프레임워크의 유연성을 통해 필요에 따라 추론 또는 행동에 최적화하여 다양한 작업 유형에 적응할 수 있습니다.
추가 분석 제안:
- 예시 효과: 다양한 예시가 성능에 미치는 영향을 조사합니다. 예시의 수와 복잡성이 LLM의 ReAct 프로세스 학습 능력에 어떤 영향을 미치는가?
- 행동 공식화: 다양한 행동 공식이 정보 검색 프로세스에 미치는 영향을 분석합니다. 더 구체적이거나 구조화된 행동이 관찰의 질을 향상시킬 수 있는가?
- 오류 분석: ReAct가 실패하는 사례를 검토합니다. 생각-행동-관찰 주기에서 일반적인 실패 지점은 무엇인가? 이를 어떻게 해결할 수 있는가?
- 동적 적응: ReAct의 동적 적응을 개선하는 방법을 탐구합니다. LLM이 예상치 못한 관찰을 기반으로 계획을 더 잘 조정하는 방법을 배울 수 있는가?
|
“Few-Shot Exemplars: ReAct는 HotpotQA와 같은 훈련 세트의 예시를 사용하여 원하는 “생각-행동-관찰” 형식을 보여줍니다. 이러한 예시는 LLM에 대한 가이드 역할을 합니다.” 이 내용에 대해 예를 들어 설명해주세요.
ReAct 프롬프팅에서 Few-Shot Exemplar를 사용하는 예를 들어 보겠습니다. 사용자가 LLM에게 “대한민국 초대 대통령은 누구인가?”라는 질문을 했다고 가정해 봅시다.
Few-Shot Exemplar 없이 질문했을 경우:
LLM은 내부 지식만을 바탕으로 답변을 생성해야 합니다. 만약 LLM의 학습 데이터에 해당 정보가 부족하거나 오류가 있다면 잘못된 답변을 생성할 수 있습니다.
Few-Shot Exemplar를 사용한 경우:
다음과 같은 예시들을 LLM에 제공할 수 있습니다.
예시 1:
- 질문: 프랑스 혁명은 언제 일어났나요?
- 생각: 프랑스 혁명에 대한 정보를 검색해야 합니다.
- 행동: Search[프랑스 혁명]
- 관찰: 프랑스 혁명은 1789년에 시작되었습니다.
- 행동: Finish[1789년]
예시 2:
- 질문: 미국 초대 대통령은 누구인가요?
- 생각: 미국 초대 대통령에 대한 정보를 검색해야 합니다.
- 행동: Search[미국 초대 대통령]
- 관찰: 미국 초대 대통령은 조지 워싱턴입니다.
- 행동: Finish[조지 워싱턴]
이러한 예시들을 통해 LLM은 다음과 같은 ReAct 프롬프팅 과정을 학습합니다.
- 질문을 분석하고 필요한 정보를 파악합니다.
- 해당 정보를 얻기 위한 검색 쿼리를 생성합니다. (행동)
- 검색 결과를 분석합니다. (관찰)
- 최종 답변을 생성합니다.
따라서 “대한민국 초대 대통령은 누구인가?”라는 질문에 대해 LLM은 위 예시들을 참고하여 다음과 같은 과정을 거칠 가능성이 높아집니다.
- 생각: 대한민국 초대 대통령에 대한 정보를 검색해야 합니다.
- 행동: Search[대한민국 초대 대통령]
- 관찰: 대한민국 초대 대통령은 이승만입니다.
- 행동: Finish[이승만]
이처럼 Few-Shot Exemplar는 LLM이 ReAct 프롬프팅 방식을 이해하고 질문에 대한 답변을 생성하는 데 필요한 단계들을 학습하는 데 도움을 줍니다. 결과적으로 더 정확하고 신뢰할 수 있는 답변을 얻을 수 있습니다. |
“작업별 프롬프팅: ReAct 프롬프트의 구조는 작업에 따라 조정됩니다. 추론 중심 작업(예: HotpotQA)은 여러 생각-행동-관찰 단계를 사용합니다. 행동 중심 작업은 더 적은 생각 단계를 사용하여 광범위한 추론보다 행동을 우선시합니다.” 이 내용에 대해 예를 들어 설명해주세요.
ReAct 프롬프팅은 작업의 종류에 따라 “생각-행동-관찰” 단계의 비중을 조절합니다. 추론이 중요한 작업과 행동이 중요한 작업에서 어떻게 프롬프트가 달라지는지 예시를 통해 살펴보겠습니다.
1. 추론 중심 작업 (예: HotpotQA):
HotpotQA는 여러 문서에서 정보를 종합하여 답을 찾아야 하는 질문-답변 작업입니다. 이런 경우 정확한 답을 찾기 위해서는 심층적인 추론 과정이 필수적입니다. 따라서 ReAct 프롬프트는 여러 단계의 “생각-행동-관찰” 주기를 포함합니다.
예시 질문: “2020년 미국 대통령 선거에서 조 바이든의 러닝메이트는 누구였으며, 그 사람의 출생지는 어디인가요?”
ReAct 프롬프트 예시:
- 생각: 먼저 조 바이든의 러닝메이트가 누구인지 찾아야 합니다.
- 행동: Search[2020년 미국 대통령 선거 조 바이든 러닝메이트]
- 관찰: 카멀라 해리스
- 생각: 이제 카멀라 해리스의 출생지를 찾아야 합니다.
- 행동: Search[카멀라 해리스 출생지]
- 관찰: 캘리포니아주 오클랜드
- 생각: 조 바이든의 러닝메이트는 카멀라 해리스이고, 그녀의 출생지는 캘리포니아주 오클랜드입니다.
- 행동: Finish[카멀라 해리스, 캘리포니아주 오클랜드]
2. 행동 중심 작업 (예: 웹사이트에서 특정 정보 찾기):
이러한 작업은 특정 행동들을 순차적으로 수행하는 것이 중요하며, 복잡한 추론 과정은 덜 중요합니다. 따라서 ReAct 프롬프트는 생각 단계를 최소화하고 행동에 집중합니다.
예시 작업: 특정 쇼핑몰 웹사이트에서 “파란색 셔츠”를 찾고 가격을 확인하는 작업
ReAct 프롬프트 예시:
- 생각: 파란색 셔츠를 찾고 가격을 확인해야 합니다.
- 행동: 웹사이트 접속[쇼핑몰 웹사이트 URL]
- 관찰: 웹사이트 접속 완료.
- 행동: 검색창 입력[“파란색 셔츠”]
- 관찰: 검색 결과 표시.
- 행동: 첫 번째 상품 선택
- 관찰: 상품 상세 페이지 표시.
- 행동: 가격 확인
- 관찰: 가격: 20,000원
- 행동: Finish[20,000원]
보시다시피, 행동 중심 작업에서는 각 행동 단계가 중요하며, 생각 단계는 전체적인 목표를 설정하는 정도로 간략하게 사용됩니다. 이처럼 ReAct는 작업의 특성에 맞춰 생각과 행동의 비중을 조절하여 효율적인 프롬프팅을 가능하게 합니다. |
텍스트 분석 개요
이 텍스트는 의사 결정 과제, 특히 ALFWorld 및 WebShop 환경에서 ReAct 프롬프팅의 성능 결과를 요약합니다. ReAct는 Act(행동 전용 프롬프팅)에 비해 우수한 성능을 보여주며, 복잡한 의사 결정 시나리오에서 추론의 중요성을 강조합니다. 그러나 현재 ReAct 구현은 여전히 전문가 수준의 성능에는 미치지 못합니다.
상세 분석
- 의사 결정 과제 및 환경: ReAct는 ALFWorld(텍스트 기반 게임) 및 WebShop(온라인 쇼핑 시뮬레이션)에서 평가됩니다. 두 환경 모두 복잡하며 전략적 탐색 및 행동 순서가 필요합니다.
- ReAct vs. Act: ReAct는 두 환경 모두에서 Act보다 지속적으로 우수한 성능을 보입니다. 추론 구성 요소가 없는 Act는 복잡한 목표를 관리 가능한 하위 목표로 분해하는 데 어려움을 겪어 효과적인 행동 계획을 방해합니다.
- 추론의 중요성: ReAct의 우수한 성능은 의사 결정 과제에서 추론의 중요성을 강조합니다. 추론을 통해 모델은 환경의 피드백을 기반으로 행동을 계획, 전략화 및 조정할 수 있습니다.
- ReAct 프롬프트 디자인: 핵심 “추론 및 행동” 원칙을 유지하면서 ReAct 프롬프트는 의사 결정 과제의 특정 요구 사항에 맞게 조정됩니다. 제공된 ALFWorld 예시는 추론에 의해 안내되는 행동 순서를 우선시하는 프롬프트 구조를 보여줄 가능성이 높습니다.
- 전문가와의 성능 격차: Act에 비해 장점이 있음에도 불구하고 ReAct의 성능은 여전히 이러한 의사 결정 과제에서 인간 전문가의 성능보다 상당히 낮습니다. 이는 프롬프팅 방법 또는 ReAct 프레임워크의 다른 측면에서 여전히 개선의 여지가 있음을 시사합니다.
주요 통찰
의사 결정 과제에서 ReAct의 성공은 복잡한 환경 내에서 행동 계획에 추론을 통합하는 가치를 강조합니다. 목표를 분해하고 피드백에 적응하는 능력은 순수하게 행동 중심적인 접근 방식에 비해 ReAct의 우수한 성능에 기여합니다. 그러나 ReAct와 인간의 성능 차이는 추가 연구 및 개발의 필요성을 강조합니다.
추가 분석 제안
- 인간 전략과의 자세한 비교: 인간 전문가가 이러한 과제에 접근하는 방식을 분석하고 그들의 전략을 ReAct의 전략과 비교하면 개선을 위한 귀중한 통찰력을 얻을 수 있습니다.
- 환경 복잡성의 영향: 다양한 수준의 환경 복잡성에서 ReAct의 성능을 조사하면 확장성을 확인하고 잠재적인 한계를 식별하는 데 도움이 될 수 있습니다.
- 의사 결정을 위한 프롬프트 최적화: 의사 결정 과제를 위한 프롬프트 디자인에 대한 추가 연구는 더 효과적인 행동 계획 및 실행으로 이어질 수 있습니다.
- 강화 학습 통합: 강화 학습 기법과 ReAct의 통합을 모색하면 시행착오를 통해 모델이 최적의 전략을 학습할 수 있도록 하여 인간 전문가와의 성능 격차를 해소할 수 있습니다.
|
ReAct 프롬프트를 제시해주세요.
ReAct 프롬프트의 *구체적인 예시*를 몇 가지 보여드리겠습니다. 다양한 상황에 따라 프롬프트를 어떻게 구성하는지 이해하는 데 도움이 될 것입니다. 기억하세요, ReAct 프롬프트의 핵심은 “Thought:”, “Action:”, “Observation:” 입니다.
**예시 1: 영화 정보 찾기**
**질문:** “인터스텔라” 감독은 누구인가요?
**프롬프트:**
Thought: 인터스텔라 감독을 찾아야 합니다. 인터넷 검색을 사용할 수 있습니다.
Action: "인터스텔라 감독" 검색
Observation: 검색 결과에 따르면 인터스텔라 감독은 크리스토퍼 놀란입니다.
Thought: 질문에 대한 답을 찾았습니다.
Final Answer: 인터스텔라 감독은 크리스토퍼 놀란입니다.
**예시 2: 간단한 계산**
**질문:** 17 곱하기 3은 얼마인가요?
**프롬프트:**
Thought: 17 곱하기 3을 계산해야 합니다.
Action: 17 * 3 계산
Observation: 17 * 3 = 51
Thought: 계산 결과를 얻었습니다.
Final Answer: 51
**예시 3: 두 도시 간 거리**
**질문:** 서울과 부산 사이의 거리는 얼마인가요?
**프롬프트:**
Thought: 서울과 부산 사이의 거리를 찾아야 합니다. 지도 정보를 사용할 수 있습니다.
Action: 서울과 부산 사이의 거리 검색
Observation: 서울과 부산 사이의 거리는 약 400km입니다.
Thought: 질문에 대한 답을 찾았습니다.
Final Answer: 서울과 부산 사이의 거리는 약 400km입니다.
**예시 4: 정보 조합**
**질문:** 2022년 월드컵 우승 국가의 수도는 어디인가요?
**프롬프트:**
Thought: 먼저 2022년 월드컵 우승 국가를 찾아야 합니다.
Action: 2022년 월드컵 우승 국가 검색
Observation: 2022년 월드컵 우승 국가는 아르헨티나입니다.
Thought: 이제 아르헨티나의 수도를 찾아야 합니다.
Action: 아르헨티나 수도 검색
Observation: 아르헨티나의 수도는 부에노스아이레스입니다.
Thought: 질문에 대한 답을 찾았습니다.
Final Answer: 부에노스아이레스
이 예시들을 통해 ReAct 프롬프트가 어떻게 “Thought,” “Action,” 그리고 “Observation” 단계를 사용하여 복잡한 질문을 단계별로 해결하는지 알 수 있습니다. 이러한 구조는 LLM이 더 정확하고 효율적으로 작업을 수행하는 데 도움이 됩니다. 자신의 작업에 맞게 이러한 예시를 수정하고 적용해 보세요. |
ReAct 프롬프팅 기법을 사용해 “2022년 월드컵 우승 국가의 수도는 어디인가요?”에 답하려고 합니다.
질문: “2022년 월드컵 우승 국가의 수도는 어디인가요?”에 대한 ReAct 프롬프트를 제시해 드리겠습니다.
Thought: 2022년 월드컵 우승 국가를 찾아야 합니다. 인터넷 검색을 사용할 수 있습니다.
Action: "2022년 월드컵 우승 국가" 검색
Observation: 검색 결과, 2022년 월드컵 우승 국가는 아르헨티나입니다.
Thought: 이제 아르헨티나의 수도를 찾아야 합니다. 인터넷 검색을 사용할 수 있습니다.
Action: "아르헨티나 수도" 검색
Observation: 검색 결과, 아르헨티나의 수도는 부에노스아이레스입니다.
Thought: 질문에 대한 답을 찾았습니다.
Final Answer: 부에노스아이레스
이 프롬프트는 “Thought”, “Action”, “Observation” 단계를 명확하게 구분하여 LLM이 단계별로 추론 과정을 진행하도록 유도합니다. 먼저 2022년 월드컵 우승 국가를 찾고, 그 다음 해당 국가의 수도를 찾는 방식으로 논리적인 흐름을 따릅니다. 이러한 구조화된 접근 방식은 LLM이 정확하고 효율적으로 답을 찾는 데 도움이 됩니다. |
ReAct 프롬프트는 어떻게 실행됩니까?
ReAct 프롬프트는 일반적으로 다음과 같은 방식으로 실행됩니다.
- 프롬프트 설계: “Thought:”, “Action:”, “Observation:” 패턴을 사용하여 LLM이 단계적으로 추론하도록 프롬프트를 작성합니다. 위에서 제시된 예시들처럼 질문에 대한 답을 찾기 위한 단계를 명확히 정의해야 합니다.
- LLM에 프롬프트 입력: 작성된 ReAct 프롬프트를 LLM에 입력합니다.
- LLM의 “Thought” 처리: LLM은 “Thought:” 부분을 읽고 현재 목표와 다음에 수행할 작업을 이해합니다.
- LLM의 “Action” 수행: LLM은 “Action:” 부분에 따라 필요한 작업을 수행합니다. 이 작업은 다음과 같을 수 있습니다:
- 정보 검색: 웹 검색, 데이터베이스 쿼리 등을 통해 정보를 수집합니다. (실제 ReAct 구현에서는 LLM이 직접 인터넷 검색을 할 수 있도록 특별히 설계된 환경이 필요합니다.)
- 계산 수행: 간단한 계산이나 논리 연산을 수행합니다.
- 코드 실행: 특정 코드를 실행하고 결과를 얻습니다. (마찬가지로 코드 실행이 가능한 환경이 필요합니다.)
- LLM의 “Observation” 기록: LLM은 “Action:”의 결과를 “Observation:”에 기록합니다. 이는 다음 “Thought” 단계에서 사용될 중요한 정보입니다.
- 반복: 3~5단계를 필요한 만큼 반복합니다. 복잡한 작업일수록 더 많은 단계가 필요할 수 있습니다.
- “Final Answer” 도출: LLM은 최종적으로 “Final Answer:” 부분에 질문에 대한 답을 제시합니다.
실제 실행 환경:
- 단순 LLM: 단순 LLM을 사용하는 경우, “Action”과 “Observation”은 시뮬레이션됩니다. 사용자가 직접 “Action”을 수행하고 그 결과를 “Observation”에 입력해야 합니다. 즉, LLM은 추론 과정을 안내하는 역할을 하고, 실제 작업은 사용자가 수행합니다.
- ReAct 에이전트: ReAct 프롬프트를 완전히 자동화하려면 특별히 설계된 ReAct 에이전트가 필요합니다. 이 에이전트는 LLM과 연결되어 “Action”을 실제로 수행하고 “Observation”을 자동으로 생성합니다. 예를 들어, 웹 검색, 계산, 코드 실행 등을 LLM 대신 수행할 수 있습니다.
- LangChain과 같은 라이브러리: LangChain과 같은 라이브러리를 사용하면 ReAct 프롬프트를 더 쉽게 구현하고 관리할 수 있습니다. 이러한 라이브러리는 외부 도구와의 연동을 지원하고, 프롬프트 체이닝과 같은 고급 기능을 제공합니다.
ReAct 프롬프트를 효과적으로 사용하려면 LLM의 기능과 한계, 그리고 사용하는 환경을 잘 이해해야 합니다. 단순 LLM을 사용하는 경우 사용자의 개입이 필요하지만, ReAct 에이전트나 관련 라이브러리를 사용하면 자동화된 ReAct 프롬프팅을 구현할 수 있습니다. |
ReAct의 Act를 하려면 어떤 기능을 어떻게 실행할 것인가를 알아야 할 것 같습니다. 그렇다면 Thought에서 이것을 할 수 있는 기능 목록(액션 목록)을 가지고 있어야 할 것 같습니다.
맞습니다. 효과적인 ReAct 프롬프팅을 위해서는 LLM이 수행 가능한 “Action” 목록, 즉 액션 목록이 필요합니다. Thought 단계에서 LLM은 이 목록을 참조하여 현재 상황에 가장 적합한 Action을 선택해야 합니다. 이 액션 목록은 ReAct 에이전트 또는 프롬프트 자체에 포함될 수 있습니다.
액션 목록 구성 방법:
- 작업 특성 정의: 어떤 종류의 작업을 수행할 것인지 정의합니다. 예를 들어, 정보 검색, 계산, 코드 실행, 파일 조작 등이 있습니다.
- 액션 정의: 각 작업에 대해 구체적인 액션을 정의합니다. 액션은 명확하고 실행 가능해야 합니다.
- 액션 설명 추가 (선택적): 각 액션에 대한 간략한 설명을 추가하여 LLM이 액션의 목적과 기능을 이해하도록 도울 수 있습니다.
액션 목록 예시:
|
Available Actions: * search(query): 주어진 쿼리로 웹 검색을 수행합니다. * calculate(expression): 주어진 수식을 계산합니다. * current_date(): 현재 날짜를 반환합니다. * read_file(file_path): 지정된 파일 경로의 파일 내용을 읽습니다. * write_file(file_path, content): 지정된 파일 경로에 내용을 씁니다. * execute_code(code): 주어진 코드를 실행합니다. |
Thought 단계에서 액션 목록 활용:
Thought 단계에서 LLM은 현재 상황과 목표를 고려하여 액션 목록에서 가장 적합한 액션을 선택합니다. 예를 들어:
|
Thought: 2023년 월드컵 우승 국가를 알아야 합니다. search 액션을 사용할 수 있습니다. Action: search("2023년 월드컵 우승 국가") Observation: 2023년 월드컵 우승 국가는 스페인입니다. (가정) ... |
액션 목록 관리:
- 고정 액션 목록: 작업 유형이 정해져 있는 경우 고정된 액션 목록을 사용할 수 있습니다.
- 동적 액션 목록: 작업 유형이 다양한 경우, 외부 API를 통해 액션 목록을 동적으로 생성하거나 업데이트할 수 있습니다.
- 프롬프트 내 액션 목록: 간단한 작업의 경우 프롬프트 자체에 액션 목록을 포함시킬 수 있습니다. 하지만 액션 목록이 너무 길어지면 프롬프트가 복잡해지고 LLM의 성능이 저하될 수 있습니다.
액션 목록을 효과적으로 구성하고 관리함으로써 ReAct 프롬프팅의 성능을 향상시키고 더 복잡한 작업을 수행할 수 있습니다. 액션 목록은 LLM이 사용 가능한 도구를 이해하고 적절하게 활용하는 데 중요한 역할을 합니다. |
필요할 때 마다 프로그램 코드를 생성해서 실행할 수 있다면, 액션들을 갖고 있지 않을 것 같습니다.
맞습니다. LLM이 필요에 따라 프로그램 코드를 생성하고 실행할 수 있다면 미리 정의된 액션 목록이 없어도 ReAct 프롬프팅이 가능합니다. 이러한 접근 방식은 몇 가지 장점을 제공합니다:
- 유연성: 미리 정의된 액션에 국한되지 않고, 필요한 기능을 동적으로 생성하여 사용할 수 있습니다. 훨씬 다양한 작업을 수행할 수 있게 됩니다.
- 확장성: 새로운 액션을 추가하기 위해 시스템을 수정할 필요가 없습니다. LLM이 스스로 코드를 생성하므로 액션의 종류가 제한되지 않습니다.
- 복잡한 작업 처리: 여러 단계의 논리와 조건문을 포함하는 복잡한 작업을 코드를 통해 구현할 수 있습니다.
코드 생성 및 실행을 활용한 ReAct 프롬프팅 예시:
질문: “서울의 현재 날씨는 어떤가요?”
|
Thought: 서울의 현재 날씨를 알아내려면 날씨 API를 호출해야 합니다. Python 코드를 사용하여 API를 호출하고 결과를 파싱하겠습니다. Action: ```python import requests def get_weather(city): api_key = "YOUR_API_KEY" # 날씨 API 키를 입력해야 합니다. url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={city}" response = requests.get(url) data = response.json() return data['current']['condition']['text'] weather = get_weather("Seoul") print(weather) |
|
Observation: Partly cloudy Thought: 날씨 정보를 얻었습니다. Final Answer: 서울의 현재 날씨는 부분적으로 흐립니다. |
주의 사항:
- 안전성: LLM이 생성한 코드가 안전하게 실행될 수 있도록 적절한 보안 조치가 필요합니다. 악의적인 코드 실행을 방지하기 위한 검증 및 제한 메커니즘이 필수적입니다.
- 리소스 관리: 코드 실행에는 계산 리소스가 필요합니다. LLM이 과도한 리소스를 사용하지 않도록 제한해야 합니다.
- LLM의 코딩 능력: LLM이 코드를 정확하게 생성하고 실행 결과를 올바르게 해석할 수 있도록 충분한 훈련이 필요합니다.
- API 키 및 자격 증명 관리: 외부 API를 사용하는 경우 API 키와 자격 증명을 안전하게 관리해야 합니다.
LLM이 코드를 생성하고 실행할 수 있는 능력은 ReAct 프롬프팅의 가능성을 크게 확장합니다. 하지만 안전성과 리소스 관리에 대한 신중한 고려가 필요합니다. 적절한 안전 장치와 함께 사용한다면, 코드 생성을 통해 ReAct 프롬프팅을 더욱 강력하고 유연하게 활용할 수 있습니다. |
(Program-Aided Language Models부터 계속)