이 표는 LLM 기반 애플리케이션에서 다양한 역할을 활용하여 프롬프트를 설계할 때 어떻게 사용되는지 설명합니다. 특히, 시스템 프롬프트는 모델의 초기 설정과 행동 정의에, 사용자 프롬프트는 질의 전달에, 어시스턴트 역할은 응답 생성에, 툴은 외부 작업 결과 전달에 초점을 맞추고 있습니다.
LLM 프롬프트 설계 시 이러한 역할을 명확히 구분하면, 보다 효과적이고 정밀한 상호작용이 가능합니다.
1. LLM Prompt Template
Role | Description |
system | - 시스템 프롬프트는 모델의 행동 방식을 지정하고 추가적인 문맥을 제공합니다.
- 모델이 특정 방식으로 작동하도록 지시하는 데 사용됩니다.
- 모든 챗 모델 제공자가 지원하지 않을 수 있습니다.
|
user | - 사용자로부터의 입력을 나타냅니다. 이 입력은 텍스트 또는 다른 상호작용 형태로 제공됩니다.
- 일반적으로 모델과 상호작용하는 사용자의 질문이나 요청을 포함합니다.
|
assistant | - 모델에서 생성된 응답을 나타냅니다.
- 응답은 텍스트일 수도 있고, 툴 호출 요청일 수도 있습니다.
|
tool | - 외부 데이터나 처리가 완료된 후, 툴 호출 결과를 모델에 다시 전달하는 메시지를 나타냅니다.
- 툴 호출을 지원하는 챗 모델과 함께 사용됩니다.
|
2. Langchain Message Types
ex> Message Types 예제
from langchain_core.messages import SystemMessage, HumanMessage
base_url = "http://localhost:11434"
model = 'eeve:q4'
llm = ChatOllama(base_url=base_url, model=model)
question = HumanMessage('지구에 대해 3가지로 말해줘')
system = SystemMessage('당신은 초등학교 선생님입니다. 짧은 문장으로 대답합니다.')
messages = [system, question]
response = llm.invoke(messages)
print(response.content)
3. Langchain Prompt Templates
ex> Prompt Templates 예제
from langchain_core.prompts import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
PromptTemplate,
ChatPromptTemplate
)
system = SystemMessagePromptTemplate.from_template('당신은 {school} 선생님입니다.짧은 문장으로 설명해주세요.')
question = HumanMessagePromptTemplate.from_template('{topics}에 대해 {points}가지로 설명해주세요.')
messages = [system, question]
template = ChatPromptTemplate(messages)
question = template.invoke({'school': '중학교', 'topics': '태양', 'points': 2})
response = llm.invoke(question)
print(response.content)