작성
·
41
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()
답변 2
0
안녕하세요! 좋은 질문 감사합니다. 계속 실행해도 빈값이 들어가는게 맞습니다. configurable로 thread를 관리해주지 않으면 여러번 실행해도 독립된 실행으로 보기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다. sangin1.park님.
LangGraph와 관련한 메시지 요약 처리에 대해 질문 주신 것에 대해 안내드리겠습니다. 주어진 코드를 살펴보면, agent
함수는 state 내의 메시지와 요약 정보(summary)를 사용하여 응답을 생성합니다.
요약(summary) 초기화:
summary = state['summary']
는 처음에는 빈 값 또는 초기 값이 들어가기는 맞습니다. 이 말은, 에이전트가 처음 작동할 때는 이전 메시지의 요약 정보가 없음을 의미합니다.연속 질문에 요약 정보 적용:
graph.get_state(config).values['summary']
와 같은 방법을 통해 해결할 수 있습니다.summary
를 적절히 유지하고, 새로운 대화 시작 시 이를 불러오는 코드 형태로 작성하면, 요약이 이미 있는 경우에 시스템 메시지로 추가하여 대화에 맥락을 부여할 수 있습니다.아래 URL에서 유사한 구현과 설명을 살펴보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.