※ 제수기 시리즈는 '제발수업을기억하자'의 의미를 담고 있으며, 틀린 정보가 담길 수 있습니다.
일자 : 2024-12-17
컨디션 : 😣
어제 오후에 정신이 혼미해서 집중을 잘 못했는데 다행히도 강사님이 hands-on 하면서 다시 설명을 해주고 계신다.
.env 파일에 넣어둔 LANGCHAIN_API_KEY 를 끌어와야 하므로
from dotenv import load_dotenv
load_dotenv()
이 코드를 실행시키는 거다.
Prompt -> LLM -> Output Parser
chain = prompt_template | model | output_parser # 랭체인만의 표현식이다.
# response = output_parser.invoke(model.invoke(prompt_template.invoke({'question': '포켓몬스터 중에 누가 제일 강해?'})))
response = chain.invoke({'question': '포켓몬스터 중에 누가 제일 강해?'})
print(response)
챗봇은 내용이 이어지는 게 중요하다.
기억을 못하니까 저렇게 AIMessage를 직접 넣어줘서 내용을 기억하게 할 수 있다.
LCEL에서 대화형 애플리케이션을 구축할 때, 이전 메시지의 기록을 관리하고 이를 활용할 수 있다.
InMemoryHistory 클래스를 사용하여 메시지 기록을 저장하고, RunnableWithMessageHistory 클래스를 사용하여 이전 메시지를 활용할 수 있다.
session_id는 왜 필요할까?
사용자가 앱에 와서 LLM이랑 채팅을 한다고 했을 때, 여러명이 할텐데 각각의 대화내역이 분리돼야 하니까 sotre 딕셔너리는 a의 대화내역 b의 대화내역 이렇게 따로 관리를 한다. 그래서 이런 구조가 된 것. 그래서 sesstion_id를 호출해서 사용한다. 라고 이해하면 된다.
저기 위에 add_messages(self, messages) 여기에 있는 messages에 AIMessage, HumanMessage, SystemMessage 등 다 들어간다고 보면 된다.
RunnableWithMessageHistory에서 / 앞은 포인트? 방식 * 키워드 방식이라는 뜻
사용자별 다른 세션 아이디와 스토어 만들어주고, 아래처럼 대화내용을 반복해서 사람, 로봇 반복해서 나올 수 있게 했다. 재밌다.
💥그런데 이제 isinstance가 뭐하는 메소드인지 모르겠다. 찾아보자.
https://docs.python.org/ko/3/library/functions.html#isinstance
챗 GPT한테 부탁한 해석