작성
·
17
0
안녕하세요 강사님, 강의 잘 보고 있습니다.
"n8n API와 Streamlit으로 만드는 이메일 작성 봇" 강의 중 9분 04초쯤 AI Agent 노드의 Memory(Simply Memory) 설정 부분에서 질문이 있습니다.
강의 초반에는 "When chat message received" 노드를 사용하셨는데, 이 경우 워크플로우가 지속적으로 실행되면서 세션이 유지되므로 AI Agent가 이전 대화 내용을 기억할 수 있습니다.
그런데 강의 후반부에서 "When chat message received" 노드를 "Webhook" 노드로 변경하셨습니다(Streamlit 사용을 위해). Webhook을 사용하면 사용자의 각 질문마다 워크플로우가 새롭게 실행되고, 실행이 끝나면 세션이 종료되는 것으로 알고 있습니다.
이런 구조에서는 Simple Memory가 각 Webhook 호출 간 대화 내용을 유지하지 못해, AI Agent가 이전 대화를 참고할 수 없는 것 아닌가요?
Webhook 방식에서도 대화 맥락을 유지하려면 Simple Memory 대신 Redis Chat Memory나 Postgres Chat Memory 같은 영구 저장소 기반 메모리를 사용해야 하는 것이 맞는지 궁금합니다.
감사합니다.
답변 1
0
안녕하세요, 좋은 질문 감사합니다.
결론부터 말씀드리자면 말씀하신 바가 맞습니다. webhook을 사용해서 llm을 호출하는 경우 이전 대화 내용을 알 수 없기 때문에, 다음 대화를 호출할 때 history를 같이 던져줘야 합니다.
코드에 보면
response = requests.post(
agent_api_url,
headers={'Authorization': agent_api_key},
json={
'message': prompt,
'session_id': st.session_state.session_id
}
)
위와 같은 방식으로 사용자가 입력한 내용만 넘겨주고 있는데요, 이전 대화를 참고해서 답변을 생성하게 하려면 session_state
에 담겨있는 messages
를 같이 request body에 담아서 넘겨주면 됩니다.
만약 채팅 이력을 계속 관리해서 이전 대화를 보여줘야하는 서비스라면 대화 이력을 영구저장해서 관리하는게 좋을텐데, 만약 이메일 작성과 같은 일회성 작업의 경우에는, 저라면 굳이 해당 내용을 영구저장하는 방향으로는 개발하지 않을 것 같습니다.
지극히 개인적인 생각이지만, 과거 이력을 관리하는 것보다 그냥 사용자에게 다시 질문을 하도록 유도하는 편이 유지보수도 편리한 것 같습니다 ㅎㅎ
앞으로도 질문 있으시면 편하게 올려주세요!
넵 답변 감사합니다ㅎㅎ