IT 세계의 후아
[AI]LangChain 이론&실습(2) 본문
※ 프롬프트
사용자와 언어 모델 간의 대화 속 질문/요청 형태의 입력문
→ 프롬프트 템플릿 중요
※ 작성 원칙
- 명확성&구체성: 질문이 모호해서는 안 됨
- 배경 정보 포함: 문맥을 이해할 수 있도록 정보 제공 → Hallucination↓ 응답 관련도↑
- 간결성: 불필요한 정보 B, 최대한 간결하게 G
- 열린 질문: 예/아니오 B, 많은 정보를 제공받을 수 있도록 열린 질문 G
- 명확한 목표: 얻고자 하는 정보/결과를 정확하게 정의
- 언어/문체: 맥락에 적합하게
※ 프롬프트 템플릿(PromptTemplate)
단일문장 or 간단한 명령 == 문자열 기반
"langchain_core.prompts" 모듈의 "PromptTemplate" 클래스 사용
PromptTemplate
from langchain_core.prompts import PromptTemplate
text = "안녕하세요, 제 이름은 {name}이고, 나이는 {age}살입니다."
prom_temp = PromptTemplate.from_template(text) # PromptTemplate 인스턴스
print(prom_temp.format(name = '홍길동', age = 30))
PromptTemplate + PromptTemplate
여러 개의 프롬프트 템플릿을 결합하여 format을 만들 수 있음
# 프롬프트 템플릿 결합
prom_temp2 = (
prom_temp
+ PromptTemplate.from_template("\n아버지를 아버지라 부를 수 없습니다.")
+ "위의 문장을 \n{language}로 번역해주세요"
)
print(prom_temp2.format(name = '홍길동', age = 30, language = '중국어'))
체인까지 만들어보면 최종적으로 다음과 같은 코드가 됨
from langchain.chat_models import ChatOpenAI # from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
llm = ChatOpenAI(model = "gpt-3.5-turbo-0125")
chain = prom_temp2 | llm | StrOutputParser()
chain.invoke({"name": '홍길동', "age": 30, "language": '중국어'})
※ 챗 프롬프트 템플릿(ChatPromptTemplate)
대화 상황에서 여러 메시지 기반 단일 메시지 응답을 생성 → 대화형 모델/챗봇 개발
입력: 여러 메시지를 원소로 갖는 리스트
메시지: role & content로 구성
ㄴMessage 유형: System/Human/AI/Function/Tool
1. ChatPromptTemplate.from_messages 형식
전달된 메시지 기반으로 프롬프트 구성
# ChatPromptTemplate
# 2-튜플 형태의 메시지 리스트(역할, 내용)
from langchain_core.prompts import ChatPromptTemplate
chat_prom = ChatPromptTemplate.from_messages([
("system", "이 시스템은 음식 질문에 답변할 수 있습니다."),
("user", "{user_input}"),
])
messages = chat_prom.format_messages(user_input = "대한민국 음식 중 조리과정이 3분 이내인 요리는 무엇이 있나요?")
# messages
from langchain_core.output_parsers import StrOutputParser
chain = chat_prom | llm | StrOutputParser()
chain.invoke({"user_input": "대한민국 음식 중 조리과정이 3분 이내인 요리는 무엇이 있나요?"})
2. MessagePromptTemplate 형식
메시지 리스트의 Role( System/Human/AI/Function/Tool)과 Content를 명확하게 표현
[SystemMessage(content='이 시스템은 음식 질문에 답변할 수 있습니다.'),
HumanMessage(content='대한민국 음식 중 조리과정이 3분 이내인 요리는 무엇이 있나요?')]
# MessagePromptTemplate
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate
chat_prom2 = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template("이 시스템은 음식 질문에 답변할 수 있습니다."),
HumanMessagePromptTemplate.from_template("{user_input}"),
])
chain2 = chat_prom2 | llm | StrOutputParser()
chain2.invoke({"user_input": "대한민국 음식 중 조리과정이 3분 이내인 요리는 무엇이 있나요?"})
cf)
https://blog.naver.com/htk1019/223413412145
https://aws.amazon.com/ko/what-is/langchain/
https://www.samsungsds.com/kr/insights/what-is-langchain.html
'Coding > Study' 카테고리의 다른 글
[error]ValidationError: 1 validation error for ChatOpenAI (0) | 2024.08.01 |
---|---|
[AI]LangChain 기본 이론&실습(3) (0) | 2024.07.31 |
[error]ModuleNotFoundError: No module named 'langchain_community' / 'langchain_openai' (0) | 2024.07.31 |
[AI]Langchain-openAI API 받아오기 (0) | 2024.07.30 |
[AI]LangChain 기본 이론&실습(1) (0) | 2024.07.30 |