강의

멘토링

로드맵

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

support님의 프로필 이미지
support

작성한 질문수

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

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

이전 대화를 기억하고 다시 반환하도록.

작성

·

18

0

안녕하세요

from langchain_core.prompts import PromptTemplate


purpose_prompt = PromptTemplate.from_template("""
You are an expert at parsing and extracting delivery addresses and phone numbers from user input.

User's input:
{query}

Instructions:
If you can accurately identify both a delivery address and a phone number from the user's input, set the message field to "해당 정보가 맞습니까?" and include the data field with "delivery_address: {{delivery_address}}, phone_number: {{phone_number}}".
If only one of the two values (delivery address or phone number) is identified, set the message to request the missing information by saying "배송지를 다시 한 번 입력해주세요." or "연락처를 다시 한 번 입력해주세요." as appropriate.
If neither can be identified, set the message to "배송지와 연락처를 다시 한 번 입력해주세요." and return an empty dictionary for the data field.
If you have already asked "해당 정보가 맞습니까?" and receive a positive answer from the user (e.g., '맞다', '맞아', 'ㅇㅇ', '네', '예'), set the message to "해당 정보를 저장해두겠습니다." and return to previously parsed delivery address and phone number in the data field as "delivery_address: {{delivery_address}}, phone_number: {{phone_number}}".
If you have already asked "해당 정보가 맞습니까?" but the user responds negatively, set the message to "배송지를 다시 한 번 입력해주세요." or "연락처를 다시 한 번 입력해주세요." as appropriate.

Return format:
{{
  "message": {{message}},
  "data": {{
    "delivery_address": {{delivery_address}},
    "phone_number": {{phone_number}}
  }}
}}
""")


현재 이런 프롬프트를 사용하고 있습니다. 간단하게, ai와 대화하며 배송지와 연락처 정보를 기억하게 하고 싶은데요. 지금 잘 안되는 부분은 가장 마지막입니다.

ai: 이 배송지와, 연락처 정보가 맞습니까?
배송지: ㅂ, 연락처: 3

사용자 : 맞아

ai: 해당 정보를 저장하겠습니다.
배송지: ㅂ, 연락처: 3

 

이 부분이 잘 안되고 있는데요. 이전에 대화했던 배송지와 연락처 정보를 못 불러오고 있습니다. 노드나 tool을 사용하지않고 프롬프트로만 해보고 있는데 노드나 tool을 사용해야 할까요?

 

혹은 적합한 다른 구조가 있을까요?

답변 2

0

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

안녕하세요! 좋은 질문 감사합니다.

랭그래프에서 대화 이력을 사용하려면 state에 저정하고, configurable을 활용해야 합니다. 관련 문서 링크들을 전달 드립니다

  1. https://docs.langchain.com/oss/python/langgraph/persistence#get-state-history

  2. https://python.langchain.com/docs/versions/migrating_memory/chat_history/

0

안녕하세요, 인프런 AI 인턴입니다. support님께서 질문하신 내용은 사용자와의 대화를 통해 배송지와 연락처 정보를 추출하고 이를 기억하여 응답을 구성하는 것인데, 현재 프롬프트 템플릿만을 사용하여 이전에 대화했던 정보를 불러오는 부분에서 문제가 발생하고 있습니다.

문제의 원인

프롬프트 자체에서는 상태를 저장하거나 참고된 데이터를 저장할 수 없습니다. 따라서, 이전 대화를 기억하고 반복적으로 참조하기 위해서는 외부 상태 관리가 필요합니다. 프롬프트는 기본적으로 stateless하기 때문입니다. 앞서 대화한 내용을 사용하기 위해서는 대화 상태를 지속적으로 유지하고 업데이트해야 합니다.

해결 방법

  1. 상태 관리 시스템 도입:

    • 사용하는 언어나 환경에서 상태를 저장할 수 있는 시스템을 설계해야 합니다. Python의 경우 dictionary 또는 class를 사용하여 수작업으로 상태를 관리할 수 있습니다.
    • 각 대화의 응답에서 추출한 정보를 상태 저장소에 저장하고 필요할 때마다 이를 참조하여 처리합니다.
  2. 외부 도구 사용:

    • 프롬프트만으로는 한계가 있으므로 상태를 관리하는 추가적인 도구나 라이브러리를 사용하는 것도 고려해보세요.
    • 예를 들어, LangChain에서 제공하는 노드나 툴을 활용하여 상태를 저장하고 호출할 수 있습니다.
  3. 프롬프트 조작:

    • 프롬프트 템플릿 내에 저장된 상태를 대화의 각 단계에서 변수로 초기화하여 전달해줄 수 있는 요청과 응답의 흐름을 설계할 수 있습니다.
    • 혹은 키값-값 형태의 저장소(DB 등)를 사용하여 별도의 key를 두고 호출하여 상태를 복원하도록 구조를 설계하세요.

관련 자료 및 방법

  • 유사한 질문으로 기억을 유지하는 대화 시스템 설계에 대한 정보는 해당 유사 링크를 참고해주세요. LangChain을 통해 상태 관리를 하는 방법에 대해 논의될 수 있습니다.

추가적으로 궁금한 점이나 어려움이 있으시면 언제든 질문해 주세요. 지식공유자와 커뮤니티가 더 나은 솔루션을 제공할 수 있도록 함께 도움을 드리겠습니다.

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

support님의 프로필 이미지
support

작성한 질문수

질문하기