강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

znznwkdrns님의 프로필 이미지
znznwkdrns

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

3.5 Agent의 히스토리를 관리하는 방법

멀티턴, MemorySaver,MessagesState 질문 입니다

해결된 질문

작성

·

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

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다. 다행히 패키지 이슈는 해결하셨군요, 답변을 드려보자면 모두 이해하신 바가 맞습니다.

  1. 언뜻 보면 매 호출 시 {'messages': [response]}로 새로운 리스트를 만드는 것처럼 보입니다. 하지만 LangGraph에서 add_messages의 역할이 상태(state)의 누적 관리이기 때문에, 실제로는 이 새로운 메시지가 기존 상태에 자동으로 누적됩니다.

     

  2. MemorySaver()의 주된 목적은 LangGraph에서 생성된 대화 히스토리를 메모리에 저장해두고, 주피터 노트북 환경에서 각 블록을 실행할 때마다 이전에 쌓인 히스토리를 유지하여 활용하기 위함입니다.

    구체적으로,

    • 주피터 노트북은 코드 블록이 독립적으로 실행될 수 있습니다. 따라서 이전 실행 결과가 다음 코드 실행에서 유지되지 않을 수 있습니다.

    • 이런 상황에서 MemorySaver()는 상태(state)를 저장해두고, 이후 새로운 요청(update_query)을 처리할 때 기존의 대화 내용을 누적하여 context로 반영할 수 있도록 해줍니다.

    • 결과적으로, 각 요청마다 대화의 맥락을 유지한 채로 멀티턴 대화를 계속 이어갈 수 있게 해줍니다.

     

znznwkdrns님의 프로필 이미지
znznwkdrns
질문자

답변 감사합니다 ~~

1

안녕하세요, 인프런 AI 인턴입니다. znznwkdrns님. 강의를 시청하시며 질문해 주신 부분에 대해 답변 드리겠습니다.

질문1. 멀티턴 대화 이해

주어진 agent 함수는 MessagesState 객체를 사용하여 멀티턴 대화를 구현합니다. MessagesState 를 통해 이전 대화 기록을 유지하면서 새로운 메시지를 추가할 수 있습니다. 전달된 코드를 보면:

return {'messages': [response]}

이 부분에서는 단순히 새로운 메시지를 배열로 만들어 반환하는 것처럼 보일 수 있습니다. 그러나 add_messages와 같은 메서드가 있다면, 메시지가 자동으로 누적되어 멀티턴 대화가 가능합니다. 기본적으로 MessagesState라고 명명된 객체는 지속적인 상태 관리 기능을 제공하며, 전체 대화 기록을 관리하게 됩니다. 그래서 새 응답을 추가할 때 과거 메시지를 손실하지 않도록 구현되어 있습니다.

질문2. MemorySaver의 목적

MemorySaver는 주로 대화의 지속성을 마련하기 위해 사용됩니다. 주피터 노트북에서 각 셀 블록을 실행할 때 이전 셀에서의 결과나 메시지를 메모리에 저장하고, 이를 후속 처리에서 재사용하도록 돕습니다. 즉, MemorySaver()는 에이전트 상태를 초기화하거나 업그레이드하여 지속성을 주기 위한 하나의 도구로 사용됩니다.

  1. 상태 유지: 이전의 메시지가 새 메시지와 혼합될 수 있도록 유지합니다.
  2. 업데이트 기능: 새로운 쿼리 요청 시에 이전의 대화 기록이 반영되며 보다 컨텍스트적으로 풍부한 응답을 생성할 수 있도록 합니다.

이렇게 함으로써, 각 요청과 응답이 독립된 것이 아닌, 전체적인 맥락을 유지하는 대화형 AI 시스템을 구현할 수 있습니다.

유사한 논의 및 참고 자료

기존에 관련 논의가 있었던 게시물을 찾아보십시오. 이들은 비슷한 주제를 다루고 있으며 추가적인 학습에 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

znznwkdrns님의 프로필 이미지
znznwkdrns

작성한 질문수

질문하기