랭체인(LangChain)으로 Llama 3.1의 능력 향상하기 – 2nd

랭체인(LangChain)으로 라마(llama 3.1)의 능력을 높이는 방법, 오늘은 그 두 번째 이야기로, 프롬프트 체이닝 (Prompt Chaining)에 대해 설명해 보고자 합니다.

랭체인(LangChain)으로 Llama 3.1의 능력 향상하기

지난 글에서는 랭체인을 이용하여 라마와 주고 받는 대화를 기억하고 필요에 따라 참고하여 응답하는 방식을 정리했습니다. 그 예로 바로 앞의 문장을 번역 요청하고 그에 따라 대답이 정확하게 이루어지는지 확인했었습니다.

오늘은 llama에게 요청하는 프롬프트를 연속적으로 변화를 주어 라마가 답변을 조금 더 의미있고 통찰력 있게 정리하여 답변할 수 있도록 유도하는 방법에 대해 파이썬 코드를 이용해 구현하고 실행한 결과를 확인해 보도록 하겠습니다.

Llama 3.1의 일반적인 답변

우선 라마에게 아래와 같은 질문을 해 봤습니다.

명리학(命理學)과 성리학(性理學)이란 무엇인가?

위의 질문에 llama 3.1은 아래와 같은 답변을 합니다.

명리학은 한자로 ‘운명’을 말하며, 운명을 조절하는 방식에 대한 학문을 일컫는 말이다. 성리학은 한자로 ‘성격의 이치’를 말하며, 인간이 해야 할 도徳적 인성과 덕을 강조한다.

랭체인(LangChain)으로 Llama 3.1의 능력 향상하기-01
랭체인(LangChain)으로 Llama 3.1의 능력 향상하기-01

위와 같이 질의에 간단한 대답을 합니다. 물론, 언제나 똑같은 대답은 하는 것은 아닙니다. 똑같은 질문을 반복하면 구체적이고 긴 대답을 할때도 있고, 위와 같이 간단하게 대답할 때도 있습니다. 또, 현재 llama 3.1의 수준에서 항상 정확하게 대답하는 것도 아닙니다. 인공지능 언어 모델들에게서 나타는 환각 현상(Hallucination)을 보일때도 있습니다.

이러한 문제들을 보완하고 신뢰할 수 있는 대답을 인공지능 언어 모델이 하도록 유도하는 방법으로 랭체인의 프롬프트 체이닝과 외부 검색 기능을 사용하는 것입니다. 외부 검색을 추가하는 방법에 대해서는 다음 기획에 살펴보기로 하고, 오늘 이 글에서는 프롬프트 체이닝 기능을 파이썬으로 구현하는 방법에 대해 살펴보도록 하겠습니다.

랭체인의 프롬프트 체이닝 (LangChain, Prompt template Chaining)

우선, LLM 클래스를 상속받아 구현하는 부분은 지난 글에서 제시한 코드와 크게 차이가 안나므로 참고하여 작성하실 수 있을 거예요. 오늘은 오늘의 핵심 부분인 프롬프트 템플릿을 이용한 체이닝 부분을 작성해 보겠습니다.

먼저 일반적인 요청과 응답에 대해 다음과 같이 “PromptTemplate”를 구성합니다.

Step1st_prompt =

PromptTemplate( input_variables=[“query”], template=“Given the query: ‘{query}’, provide a general response in Korean.” )

연속해서 두 번째 요청은 다음과 같이 “PromptTemplate”를 구성합니다. 첫 번째 요청으로 일반적인 응답을 받았고, 이 응답을 검토한 후 보다 더 구체적인 내용으로 응답해 줄것을 요청합니다.

Step2nd_prompt =

PromptTemplate( input_variables=[“general_response”], template=“Based on the general response: ‘{general_response}’, provide more detailed insights in Korean.”)

마지막, 3번째 요청은 구체적인 응답을 기반으로 내용을 통합적으로 이해하고 중요 내용을 요약해 줄 것을 요청합니다.

Stepfinal_prompt =

PromptTemplate( input_variables=[“detailed_response”], template=“Given the detailed response: ‘{detailed_response}’, summarize the key points comprehensively in Korean.”)


이제, llama 3.1에게 요청할 내용을 정의하고, 작성된 각각의 프롬프트 템플릿을 연속적으로 질의하고 응답을 정리할 수 있도록 다음과 같이 코드를 구성합니다.

# 라마 3.1에게 요청한 메시지를 작성합니다.

query = “명리학(命理學)과 성리학(性理學)이란 무엇인가?”

# 1단계: 초기 질문에 대한 일반적인 응답 생성

Step1st_response = Step1st_prompt.format_prompt(query=query).to_string()

Step1st_result = llm.invoke(Step1st_response)

print(“1단계 일반적인 응답 : “)

print(Step1st_result)

# 2단계: 1단계의 결과를 기반으로 더 심화된 정보 생성

Step2nd_response = Step2nd_prompt.format_prompt(general_response=Step1st_result).to_string()

Step2nd_result = llm.invoke(Step2nd_response)

print(“\n2단계 심화된 응답 : “)

print(Step2nd_result)

# 3단계: 2단계의 결과를 바탕으로 최종 요약 응답 생성

Stepfinal_response = Stepfinal_prompt.format_prompt(detailed_response=Step2nd_result).to_string()

Stepfinal_result = llm.invoke(Stepfinal_response) # invoke 메소드 사용

print(“\n3단계 최종 요약 응답 : “)

print(Stepfinal_result)


위와 같이 코드를 구현한 후 실제 예상한 대로 결과가 잘 출력 되는지 코드를 실행합니다. 다음 그림과 같은 결과를 출력합니다.

랭체인(LangChain)으로 Llama 3.1의 능력 향상하기-02
랭체인(LangChain)으로 Llama 3.1의 능력 향상하기-02

그림의 출력 내용 전문을 옮겨보면 다음과 같습니다.

1단계 일반적인 응답 :

‘명리학(命理學)과 성리학(性理學)’은 고대 중국 사상에서 사용된 용어들입니다.

명리학(命理學)은 인간의 운명을 결정하는 자연의 이치(理)를 의미합니다. 여기서 ‘명'(命) means “fate” or “destiny”, 그리고 ‘리'(理)는 “천리의 이치”를 나타내는 것으로, 천하의 원리를 가리킵니다.

성리학(性理學)은 인간의 본性的 성질과 본연의 이치를 의미합니다. 여기서 ‘성'(性) means “nature” or “essence”, 그리고 ‘리'(理)는 다시 말해 “천리의 이치”를 나타내는 것으로, 천하의 원리를 가리킵니다.

둘다 중국 사상에서 인간이 자연의 법칙을 따라야 할 것을 강조하며, 인간의 운명과 본성에 대한 이해를 돕기 위한 개념들입니다.

2단계 심화된 응답 :

고대 중국 사상에서 “명리학”과 “성리학”은 두 가지 중요한 용어로 사용되었다. 이 섹션에서는 이 용어의 의미와 함께, 이 두 가지 개념을 더욱 자세히 살펴보겠습니다.

### 명리학(命理學)

**이해**: 명리학은 인간의 운명을 결정하는 자연의 이치를 뜻합니다. “명”은 운명 또는โช파를 의미하고, “리”는 천하의 원리를 가리키는 말입니다.

**본질적인 개념**: 이 학문은 인간의 삶에서 자연의 법칙과 규율에 따른다는 것을 강조하며, 우리가 살고 있는 세계의 구조와 순서에 대한 이해를 돕습니다. 명리학은 운명이 인간을 지배하는 존재로 여겨지며, 우리의 삶의 모든 순간에 영향을 미칩니다.

**시각**: 명리학은 운명의 강력한 힘 앞에서 인생의 유연성이 중요함을 강조합니다. 이는 자연의 이치에 순응하여 삶을 살아가야 한다는 것을 의미하며, 이러한 관점은 중국 사상에서 인간과 자연의 관계를 이해하는 데 큰 역할을 합니다.

### 성리학(性理學)

**이해**: 성리학은 인간의 본성과 본연의 이치를 뜻합니다. “성”은 인간의 본질 또는 본성을 가리키며, “리”는 다시 말해 천하의 원리를 의미합니다.

**본질적인 개념**: 이 학문은 인간 본성이 타자의 원리가 무엇인지에 대해 탐구합니다. 성리학은 인생에서 인간의 본성과 그들이 가지고 있는 잠재력을 강조하며, 각 개인의 내면 속에 존재하는 천리의 이치에 대한 관심을 불러일으킵니다.

**시각**: 성리학은 인류의 공동체와 개별적 삶의 상호관계를 다루며, 인간이 삶에서 자신의 본성에 따라 살아가야 한다는 것을 강조합니다. 이는 개인과 사회 모두에게 중요한 가치인 자아실현과 통일을 말해줍니다.

**중국 사상에서 이러한 두 가지 개념은 서로 밀접한 관련이 있습니다.** 명리학은 인간의 운명에 대한 이해를 돕는 데 도움이 되며, 성리학은 인간의 본성과 그들이 살아갈 수 있는 길을 알려줍니다. 이 두 가지 학문 모두 중국 사상에서 자연의 법칙과 규율에 따른 삶을 중요시하며, 인간이 삶에서 자신의 본성을 유지하여 살아가는 것이 가장 올바른 길이라고 가르칩니다.

**결론적으로,** 명리학과 성리학은 고대 중국 사상에서 중요한 역할을 한 두 가지 학문입니다. 이들은 인간의 운명과 본성에 대한 이해를 돕기 위해 사용되었으며, 자연의 법칙과 규율에 따른 삶이 가장 올바른 길임을 강조했습니다.

3단계 최종 요약 응답 :

**고대 중국 사상에서 “명리학”과 “성리학”의 이해**

1. **명리학**:

– 인간의 운명을 결정하는 자연의 이치를 뜻합니다.

– “명”은 운명 또는โช파를 의미하고, “리”는 천하의 원리를 가리키는 말입니다.

– 이 학문은 인간의 삶에서 자연의 법칙과 규율에 따른다는 것을 강조하며, 우리가 살고 있는 세계의 구조와 순서에 대한 이해를 돕습니다.

2. **성리학**:

– 인간의 본성과 본연의 이치를 뜻합니다.

– “성”은 인간의 본질 또는 본성을 가리키며, “리”는 다시 말해 천하의 원리를 의미합니다.

– 이 학문은 인간 본성이 타자의 원리가 무엇인지에 대해 탐구하며, 인생에서 인간의 본성과 그들이 가지고 있는 잠재력을 강조합니다.

**명리학과 성리학의 중요성**

* 이 두 가지 학문 모두 중국 사상에서 자연의 법칙과 규율에 따른 삶을 중요시며, 인간이 삶에서 자신의 본성을 유지하여 살아가는 것이 가장 올바른 길이라고 가르칩니다.

* 명리학과 성리학은 고대 중국 사상에서 중요한 역할을 한 두 가지 학문입니다. 이들은 인간의 운명과 본성에 대한 이해를 돕기 위해 사용되었으며, 자연의 법칙과 규율에 따른 삶이 가장 올바른 길임을 강조했습니다.

출력된 형태만 보면 예상했던 3단계 결과가 잘 출력되었습니다. 쿼리 요청에 대한 llama 3.1의 일반적인 대답과 이 대답에 대해 구체적으로 심화된 답변을 다시 제시해 주고, 마지막으로 심화된 답변의 중요 내용을 요약하여 정리해 주는 답변을 확인할 수 있습니다.

현재 llama 3.1 8b 버전으로 대답에 대한 신뢰성 부분은 논외로 한다면 랭체인의 프롬프트 체이닝 기능은 llama 3.1의 최적화 또는 개인화에 있어서 꼭 적용되어야할 부분으로 보이기도 합니다.


답글 남기기