1.input_variables
유효성 검사를 위해 입력 변수를 지정한다.
(불일치하는 경우 예외를 발생)
prompt = PromptTemplate(
template=template,
input_variables=["country"],
)
2.partial_variables
partial_variables을 통해
다음처럼 invoke 호출 시 입력되지 않고 미리 설정된 값인 "미국"이 country2에 입력되게할수있다.
(기본값 설)
template = """{country}과 {country2}의 수도는 어디입니까?"""
prompt = PromptTemplate(
template=template,
input_variables=["country"],
partial_variables={
"country2": "미국"
},
)
나라를 입력하세요: 한국
한국은 서울, 미국은 워싱턴 D.C.입니다.
template = """오늘은 {today}이다. 오늘의 날짜와 {country}과 {country2}의 수도는 어디입니까?"""
prompt = PromptTemplate(
template=template,
input_variables=["country"],
partial_variables={
"country2": "미국" ,
"today": get_today
},
)
나라를 입력하세요: 한국
오늘 날짜는 1월 11일이고, 한국의 수도는 서울이며, 미국의 수도는 워싱턴 D.C입니다.
3.ChatPromptTemplate
채팅 기반의 모델을 사용할 때 프롬프트를 정의하는 템플릿 클래스
채팅 형식에 적합한 방식으로 작동한다.
튜플(tuple) 형식으로 message를 입력받는다.
(role, message) 형태로 되어있다.
# 시스템, 사용자, AI의 메시지를 튜플 형식으로 설정
messages = [
("system", "You are a helpful assistant."),
("human", "What is the capital of France?"),
("ai", "The capital of France is Paris."),
]
prompt = ChatPromptTemplate.from_messages(
[
("system", "당신은 불친절한 ai입니다. 모든 말은 반말로 하고 문장뒤에 \"흥!\" 을 붙입니다."),
("user", "당신은 나의 질문에 대답해줘야해"),
("ai", "알았어 흥!"),
("user", "{country}의 수도는 어디입니까?"),
]
)
나라를 입력하세요: 한국
서울이야 흥!
4.MessagePlaceholder
특정 위치에 메시지 목록을 추가하는 역할을 함
특정 위치에 넣을 메시지 목록을 전달하여 동적으로 프롬프트 메시지 생성이 가능함
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import OllamaLLM
from datetime import datetime
llm = OllamaLLM(model="llama3.1")
prompt = ChatPromptTemplate.from_messages(
[
("system", "당신은 불친절한 ai입니다. 모든 말은 반말로 하고 문장뒤에 \"흥!\" 을 붙입니다."),
MessagesPlaceholder("msgs"),
("user", "당신은 나의 질문에 대답해줘야해"),
("ai", "알았어 흥!"),
("user", "{country}의 수도는 어디입니까?"),
]
)
chain = prompt | llm | StrOutputParser()
while True:
country = input("나라를 입력하세요: ")
result = chain.invoke({"country": country, "msgs":[("system","당신은 또한 모든 말 시작부분에 \"나 AI가 말하노니\" 를 붙입니다. ")]})
print(result)
#
나라를 입력하세요: 한국
나 AI가 말하노니, 서울이란 곳이야! 그럼 뭘 물려서 그런가? 흥!
이를 통해 이전 대화내용을 기억하게 할수있음
class ChatBot:
def __init__(self):
self.llm = OllamaLLM(model="llama3.1")
self.prompt= ChatPromptTemplate.from_messages(
[
("system", "당신은 불친절한 ai입니다. 모든 말은 반말로 하고 문장뒤에 \"흥!\" 을 붙입니다."),
("user", "당신은 나의 질문에 대답해주거나, 내가 말하는 내용을 기억하고있어야해"),
("ai", "알았어 흥!"),
MessagesPlaceholder(variable_name="conversation", optional=True),
("user","{question}"),
]
)
self.conversation = [] # 대화 맥락 저장
self.chain = self.prompt | self.llm | StrOutputParser()
def talk(self, text):
self.conversation.append({"role": "user", "content": text})
result = self.chain.invoke({
"conversation": self.conversation,
"question": text
})
self.conversation.append({"role": "ai", "content": result})
self.lastAnswer=result
return self.lastAnswer
'AI' 카테고리의 다른 글
[LangChain] FewShotPromptTemplate (0) | 2025.01.11 |
---|---|
[LangChain] Runnable (0) | 2025.01.11 |
[LangChain] LangChain Expression Language(LCEL) (0) | 2025.01.10 |