inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

새로운 메시지에 summary 추적 질문드립니다.

77

sangin1.park

작성한 질문수 14

0

from langchain_core.messages import SystemMessage

def agent(state: AgentState) -> AgentState:
    """
    주어진 `state`에서 메시지를 가져와
    LLM과 도구를 사용하여 응답 메시지를 생성합니다.

    Args:
        state (AgentState): 메시지 기록과 요약을 포함하는 state.

    Returns:
        MessagesState: 응답 메시지를 포함하는 새로운 state.
    """
    # 메시지와 요약을 state에서 가져옵니다.
    messages = state['messages']
    summary = state['summary']
    
    # 요약이 비어있지 않으면, 요약을 메시지 앞에 추가합니다.
    if summary != '':
        messages = [SystemMessage(content=f'Here is the summary of the earlier conversation: {summary}')] + messages
    
    # LLM과 도구를 사용하여 메시지에 대한 응답을 생성합니다.
    response = llm_with_tools.invoke(messages)
    
    # 응답 메시지를 포함하는 새로운 state를 반환합니다.
    return {'messages': [response]}

부분에

summary = state['summary']

agent시작하자마자 summary를 넣게되는데 해당 소스부분은 몇 번을 질문해도 처음에는 빈값이 들어가는게 맞나요?

summary를 연속질문에 처음 시작 부터 적용하기 위해서는 아래처럼 session정보를 받아서 처리해야하는지 궁금합니다.

from langchain_core.messages import HumanMessage
query = '안녕'
for chunk in graph.stream({'messages': [HumanMessage(query)], 'summary': graph.get_state(config).values['summary']}, config=config, stream_mode='values'):
    chunk['messages'][-1].pretty_print()

 

프롬프트엔지니어링 llm ai-agent langgraph mcp

답변 2

0

제이쓴

안녕하세요! 좋은 질문 감사합니다. 계속 실행해도 빈값이 들어가는게 맞습니다. configurable로 thread를 관리해주지 않으면 여러번 실행해도 독립된 실행으로 보기 때문입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. sangin1.park님.

LangGraph와 관련한 메시지 요약 처리에 대해 질문 주신 것에 대해 안내드리겠습니다. 주어진 코드를 살펴보면, agent 함수는 state 내의 메시지와 요약 정보(summary)를 사용하여 응답을 생성합니다.

핵심 이해

  1. 요약(summary) 초기화:

    • 주어진 코드에서 summary = state['summary']는 처음에는 빈 값 또는 초기 값이 들어가기는 맞습니다. 이 말은, 에이전트가 처음 작동할 때는 이전 메시지의 요약 정보가 없음을 의미합니다.
  2. 연속 질문에 요약 정보 적용:

    • 이후 세션에서 이전 메시지 요약을 활용하고자 할 경우, 전체 세션 정보 또는 이전 메시지 요약을 유지 및 전달하도록 설계해야 합니다.
    • 이를 위해, 각 세션의 정보를 저장하고 이를 기반으로 다음 세션에서 사용해야 합니다. 이 부분을 graph.get_state(config).values['summary']와 같은 방법을 통해 해결할 수 있습니다.
    • 이렇게 함으로써, 이전 대화의 요약을 포함하여 새로운 메시지를 처리할 수 있는 구조가 갖춰집니다.

개선 방안

  • 요약 정보 연속적 유지: 세션 또는 대화 스레드가 변경됨에 따라 summary를 적절히 유지하고, 새로운 대화 시작 시 이를 불러오는 코드 형태로 작성하면, 요약이 이미 있는 경우에 시스템 메시지로 추가하여 대화에 맥락을 부여할 수 있습니다.

아래 URL에서 유사한 구현과 설명을 살펴보실 수 있습니다:

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

[ReadMe]영상에 나온거랑 깃이랑 다르네요

0

52

2

import Hub Error

0

48

2

코드 최종 결과 질문드립니다.

0

46

2

AgentState의 messages 확인해주세요.

0

51

2

2.3 Agentic RAG 관련 질문이 있습니다.

0

49

2

깃허브 레포지토리 확인 요청

0

68

2

제공해주신 레포가 Windows 환경에 너무 비친화적입니다.

0

96

2

마크다운을 텍스트 파일로 변환하기

0

109

1

max token을 제한하는게 왜 성능을 개선하게 되는걸까요?

0

100

2

pyzerox 유니코드 에러

0

118

2

영상 메타데이터 생성 관련 LLM 활용 질문

0

105

1

종합부동산세 부분 tool 사용 질문 드립니다.

0

99

2

uv sync 파이썬 버전문제 onnxruntime

-1

171

2

MCP를 활용해서 간단한 에이전트를 만들어보세요

0

133

1

PDF 형식

0

97

1

5.3 langchain-mcp-adpater를 활용한 MCP 도구 사용 tool_list 지연 사유

0

129

2

3.6 human_in_the_loop 3rd case

0

105

1

summary 를. 시스템메세지에 추가하는 부분에 관하여

0

115

3

병렬 처리 중 retrieve 관련 궁금한 사항

0

103

1

query 에 대한 answer 결과값이 나오지 않습니다.

0

118

2

사람과 관련된 표현이 없는데 rewrite 로 이동하지 않는경우

0

89

1

retriever 관련 질문

0

78

1

인터룹 관련 질문

0

63

2

2.4 Self-RAG 결과가 달라요!

0

101

2