1. 정의
프롬프트(Prompt): 사용자 또는 시스템에서 제공하는 입력으로, LLM에게 특정 작업을 수행하도록 요청하는 지시문입니다. 프롬프트는 질문, 명령, 문장 시작 부분 등 다양한 형태를 취할 수 있으며, LLM의 응답을 유도하는 데 중요한 역할을 합니다.
LLM(Large Language Model): GPT, Gemini 등 대규모 언어 모델로, 대량의 텍스트 데이터에서 학습하여 언어를 이해하고 생성할 수 있는 인공지능 시스템입니다. LLM은 프롬프트를 바탕으로 적절한 응답을 생성하거나, 주어진 작업을 수행하는 데 사용됩니다.
2. 일반적인 작동 방식
프롬프트 생성: 사용자의 요구 사항이나 특정 작업을 정의하는 프롬프트를 생성합니다. 이 프롬프트는 LLM에게 전달되기 전에, 작업의 목적과 맥락을 명확히 전달하기 위해 최적화될 수 있습니다.
prompt = ChatPromptTemplate.from_messages([
LLM 처리: LLM은 제공된 프롬프트를 분석하고, 학습된 지식을 바탕으로 적절한 응답을 생성합니다. 이 과정에서 LLM은 내부적으로 다양한 언어 패턴과 내외부 지식을 활용하여, 요청된 작업을 수행하거나 정보를 제공합니다.
응답 반환: LLM에 의해 생성된 응답은 최종 사용자에게 필요한 형태로 변환되어 제공됩니다. 이 응답은 직접적인 답변, 생성된 텍스트, 요약된 정보 등 다양한 형태를 취할 수 있습니다.
3. 멀티 체인 (Multi-Chain)
여러 개의 체인을 연결하거나 복합적으로 작용하는 것은 멀티 체인(Multi-Chain) 구조를 통해 이루어집니다.이러한 구조는 각기 다른 목적을 가진 여러 체인을 조합하여, 입력 데이터를 다양한 방식으로 처리하고 최종적인 결과를 도출할 수 있도록 합니다. 복잡한 데이터 처리, 의사 결정, AI 기반 작업 흐름을 설계할 때 특히 유용합니다.
prompt1 = ChatPromptTemplate.from_template("translates {korean_word} to English.")
prompt2 = ChatPromptTemplate.from_template(
"explain {english_word} using oxford dictionary to me in Korean."
)
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
chain1 = prompt1 | llm | StrOutputParser()
chain2 = (
{"english_word": chain1}
| prompt2
| llm
| StrOutputParser()
)
4. 프롬프트(Prompt)
프롬프트는 사용자와 언어 모델 간의 대화에서 질문이나 요청의 형태로 제시되는 입력문입니다. 이는 모델이 어떤 유형의 응답을 제공할지 결정하는 데 중요한 역할을 합니다.
1) 명확성과 구체성
질문은 명확하고 구체적이어야 합니다. 모호한 질문은 LLM 모델의 혼란을 초래할 수 있기 때문입니다.
예시: "다음 주 주식 시장에 영향을 줄 수 있는 예정된 이벤트들은 무엇일까요?"는 "주식 시장에 대해 알려주세요."보다 더 구체적이고 명확한 질문입니다.
2) 배경 정보를 포함
모델이 문맥을 이해할 수 있도록 필요한 배경 정보를 제공하는 것이 좋습니다. 이는 환각 현상(hallucination)이 발생할 위험을 낮추고, 관련성 높은 응답을 생성하는 데 도움을 줍니다.
예시: "2020년 미국 대선의 결과를 바탕으로 현재 정치 상황에 대한 분석을 해주세요."
3) 간결함
핵심 정보에 초점을 맞추고, 불필요한 정보는 배제합니다. 프롬프트가 길어지면 모델이 덜 중요한 부분에 집중하거나 상당한 영향을 받는 문제가 발생할 수 있습니다.
예시: "2021년에 발표된 삼성전자의 ESG 보고서를 요약해주세요."
4) 열린 질문 사용
열린 질문을 통해 모델이 자세하고 풍부한 답변을 제공하도록 유도합니다. 단순한 '예' 또는 '아니오'로 대답할 수 있는 질문보다는 더 많은 정보를 제공하는 질문이 좋습니다.
예시: "신재생에너지에 대한 최신 연구 동향은 무엇인가요?"
5) 명확한 목표 설정
얻고자 하는 정보나 결과의 유형을 정확하게 정의합니다. 이는 모델이 명확한 지침에 따라 응답을 생성하도록 돕습니다.
예시: "AI 윤리에 대한 문제점과 해결 방안을 요약하여 설명해주세요."
6) 언어와 문체
대화의 맥락에 적합한 언어와 문체를 선택합니다. 이는 모델이 상황에 맞는 표현을 선택하는데 도움이 됩니다.
예시: 공식적인 보고서를 요청하는 경우, "XX 보고서에 대한 전문적인 요약을 부탁드립니다."와 같이 정중한 문체를 사용합니다.
4-1 프롬프트 템플릿 (PromptTemplate)
PromptTemplate은 단일 문장 또는 간단한 명령을 입력하여 단일 문장 또는 간단한 응답을 생성하는 데 사용되는 프롬프트를 구성할 수 있는 문자열 템플릿입니다. Python의 문자열 포맷팅을 사용하여 동적으로 특정한 위치에 입력 값을 포함시킬 수 있습니다.
1) 구성요소
LLM 모델에 입력할 프롬프트를 구성할 때 "지시", "예시", "맥락", "질문" 과 같은 다양한 구성요소들을 조합할 수 있습니다. 다양한 시나리오에서 필요한 구성요소들을 조합하여 적용합니다.
구분 | 내용 |
지시 | 언어 모델에게 어떤 작업을 수행하도록 요청하는 구체적인 지시. |
예시 | 요청된 작업을 수행하는 방법에 대한 하나 이상의 예시. |
맥락 | 특정 작업을 수행하기 위한 추가적인 맥락 |
질문 | 어떤 답변을 요구하는 구체적인 질문. |
2) 프롬프트 템플릿 간의 결합
PromptTemplate 클래스는 문자열을 기반으로 프롬프트 템플릿을 생성하고, + 연산자를 사용하여 직접 결합하는 동작을 지원합니다. PromptTemplate 인스턴스 간의 직접적인 결합뿐만 아니라, 이들 인스턴스와 문자열로 이루어진 템플릿을 결합하여 새로운 PromptTemplate 인스턴스를 생성하는 것도 가능합니다.
문자열 + 문자열
PromptTemplate + PromptTemplate
PromptTemplate + 문자열
# 'name'과 'age'라는 두 개의 변수를 사용하는 프롬프트 템플릿을 정의
template_text = "안녕하세요, 제 이름은 {name}이고, 나이는 {age}살입니다."
# PromptTemplate 인스턴스를 생성
prompt_template = PromptTemplate.from_template(template_text)
# 문자열 템플릿 결합 (PromptTemplate + PromptTemplate + 문자열)
combined_prompt = (
prompt_template
+ PromptTemplate.from_template("\n\n아버지를 아버지라 부를 수 없습니다.")
+ "\n\n{language}로 번역해주세요."
)
combined_prompt
3) 챗 프롬프트 템플릿 (ChatPromptTemplate)
ChatPromptTemplate은 대화형 상황에서 여러 메시지 입력을 기반으로 단일 메시지 응답을 생성하는 데 사용됩니다. 이는 대화형 모델이나 챗봇 개발에 주로 사용됩니다. 입력은 여러 메시지를 원소로 갖는 리스트로 구성되며, 각 메시지는 역할(role)과 내용(content)으로 구성됩니다.
Message 유형
- SystemMessage: 시스템의 기능을 설명합니다.
- HumanMessage: 사용자의 질문을 나타냅니다.
- AIMessage: AI 모델의 응답을 제공합니다.
- FunctionMessage: 특정 함수 호출의 결과를 나타냅니다.
- ToolMessage: 도구 호출의 결과를 나타냅니다.
System의 기능을 정의한 뒤 사용자 입력을 받는 튜플형태의 대화형 프롬프트
chat_prompt = ChatPromptTemplate.from_messages([
("system", "이 시스템은 천문학 질문에 답변할 수 있습니다."),
("user", "{user_input}"),
])
messages = chat_prompt.format_messages(user_input="태양계에서 가장 큰 행성은 무엇인가요?")
messages
'AI * ML' 카테고리의 다른 글
LangChain 기본 - 체인(Chains) (0) | 2024.07.03 |
---|---|
LangChain 기본 - RAG에 대해 (0) | 2024.06.30 |
LangChain 시작하기 - Agent에 대해서 (0) | 2024.06.29 |
LangChain 시작하기 - 대화내용을 Context로 가지는 Retriever 설정 (0) | 2024.06.23 |
LangChain 시작하기 - Retrieval 를 통한 컨텍스트 정의하기 (0) | 2024.06.21 |