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