인프런 커뮤니티 질문&답변
멀티턴, MemorySaver,MessagesState 질문 입니다
해결된 질문
작성
·
164
0
안녕하세요 강의 보다가 헷갈리는 부분이 있어서 질문드립니다
질문1. 3.3 LangGraph에서 도구(tool) 활용 방법
아래 agent 함수는 여러번 호출되는데 리턴하는 부분에서 새로운 배열을 만드는것 처럼 보이지만 add_messages에 의해 자동으로 누적되어 멀티턴 대화가 된다고 이해하면 맞을까요?
def agent(state: MessagesState) -> MessagesState:
"""
에이전트 함수는 주어진 상태에서 메시지를 가져와
LLM과 도구를 사용하여 응답 메시지를 생성합니다.
Args:
state (MessagesState): 메시지 상태를 포함하는 state.
Returns:
MessagesState: 응답 메시지를 포함하는 새로운 state.
"""
# 상태에서 메시지를 추출합니다.
messages = state['messages']
# LLM과 도구를 사용하여 메시지를 처리하고 응답을 생성합니다.
response = llm_with_tools.invoke(messages)
# 응답 메시지를 새로운 상태로 반환합니다.
return {'messages': [response]}
질문2. 3.5 Agent의 히스토리를 관리하는 방법
MemorySaver()의 목적은 주피터 노트북 각 블록을 사용하는데 있어 그 전에 실행해서 얻은 message를 메모리에 저장후 다음 요청 (update_query)에 반영하기 위해 사용된게 맞을까요?
퀴즈
강의에서 언급된 Anthropic의 정의에 따르면, 워크플로우와 '진정한 에이전트'의 핵심적인 차이점은 무엇일까요?
외부 도구 사용 가능 여부
LLM이 다음 행동을 동적으로 결정하는지 여부
여러 단계를 거쳐 작업을 완료하는지 여부
사용자 피드백을 받을 수 있는지 여부
답변 2
1
안녕하세요! 좋은 질문 감사합니다. 다행히 패키지 이슈는 해결하셨군요, 답변을 드려보자면 모두 이해하신 바가 맞습니다.
언뜻 보면 매 호출 시
{'messages': [response]}로 새로운 리스트를 만드는 것처럼 보입니다. 하지만 LangGraph에서add_messages의 역할이 상태(state)의 누적 관리이기 때문에, 실제로는 이 새로운 메시지가 기존 상태에 자동으로 누적됩니다.MemorySaver()의 주된 목적은 LangGraph에서 생성된 대화 히스토리를 메모리에 저장해두고, 주피터 노트북 환경에서 각 블록을 실행할 때마다 이전에 쌓인 히스토리를 유지하여 활용하기 위함입니다.구체적으로,
주피터 노트북은 코드 블록이 독립적으로 실행될 수 있습니다. 따라서 이전 실행 결과가 다음 코드 실행에서 유지되지 않을 수 있습니다.
이런 상황에서
MemorySaver()는 상태(state)를 저장해두고, 이후 새로운 요청(update_query)을 처리할 때 기존의 대화 내용을 누적하여 context로 반영할 수 있도록 해줍니다.결과적으로, 각 요청마다 대화의 맥락을 유지한 채로 멀티턴 대화를 계속 이어갈 수 있게 해줍니다.
1
안녕하세요, 인프런 AI 인턴입니다. znznwkdrns님. 강의를 시청하시며 질문해 주신 부분에 대해 답변 드리겠습니다.
질문1. 멀티턴 대화 이해
주어진 agent 함수는 MessagesState 객체를 사용하여 멀티턴 대화를 구현합니다. MessagesState 를 통해 이전 대화 기록을 유지하면서 새로운 메시지를 추가할 수 있습니다. 전달된 코드를 보면:
return {'messages': [response]}
이 부분에서는 단순히 새로운 메시지를 배열로 만들어 반환하는 것처럼 보일 수 있습니다. 그러나 add_messages와 같은 메서드가 있다면, 메시지가 자동으로 누적되어 멀티턴 대화가 가능합니다. 기본적으로 MessagesState라고 명명된 객체는 지속적인 상태 관리 기능을 제공하며, 전체 대화 기록을 관리하게 됩니다. 그래서 새 응답을 추가할 때 과거 메시지를 손실하지 않도록 구현되어 있습니다.
질문2. MemorySaver의 목적
MemorySaver는 주로 대화의 지속성을 마련하기 위해 사용됩니다. 주피터 노트북에서 각 셀 블록을 실행할 때 이전 셀에서의 결과나 메시지를 메모리에 저장하고, 이를 후속 처리에서 재사용하도록 돕습니다. 즉, MemorySaver()는 에이전트 상태를 초기화하거나 업그레이드하여 지속성을 주기 위한 하나의 도구로 사용됩니다.
- 상태 유지: 이전의 메시지가 새 메시지와 혼합될 수 있도록 유지합니다.
- 업데이트 기능: 새로운 쿼리 요청 시에 이전의 대화 기록이 반영되며 보다 컨텍스트적으로 풍부한 응답을 생성할 수 있도록 합니다.
이렇게 함으로써, 각 요청과 응답이 독립된 것이 아닌, 전체적인 맥락을 유지하는 대화형 AI 시스템을 구현할 수 있습니다.
유사한 논의 및 참고 자료
기존에 관련 논의가 있었던 게시물을 찾아보십시오. 이들은 비슷한 주제를 다루고 있으며 추가적인 학습에 도움이 될 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





답변 감사합니다 ~~