Sign In
시원한 진홍 눈
Category
Empty
안녕하세요 강사님
Q1. 랭체인파트에서, 시스템 메시지는 고정하고 유저메시지를 가변적으로 해서 토큰을 줄인다. 가 어떤 뜻인지 알 수 있을까요? user prompt는 유저가 넣는 프롬프트지, 저희가 설정하는 게 아니지 않나요?

Q2. 아래 문제에서 이전 AI답변이 어떻게 처음부터 content에 떠있는건가요?

이전 대화를 포함한 메시지 리스트

messages_with_history = [
SystemMessage(content="당신은 친절한 여행 가이드입니다."),
HumanMessage(content="파리에서 꼭 가봐야 할 곳을 추천해주세요."),
AIMessage(
content="에펠탑, 루브르 박물관, 샹젤리제 거리를 추천드립니다."
), # 이전 AI 답변
HumanMessage(content="그 중에서 가장 먼저 가야할 곳은?"), # 후속 질문
]
response = llm.invoke(messages_with_history)
print(f"[답변]:\n{response.content}")
print(f"\n> AI는 이전 대화('파리 추천 장소')를 기억하고 답변합니다.")


1
👍
1
🍀
2
Sujin_Kang
안녕하세요! 답변 드립니다.
Q1. "시스템 메시지는 고정하고 유저 메시지를 가변적으로 해서 토큰을 줄인다"는 의미
프롬프트 캐싱(Prompt Caching)을 염두하고 설명한 내용입니다.
개발자 관점의 '유저 메시지'를 상세 설명드리면, 사용자가 직접 입력하는 것도 맞지만, 개발자는 그 입력을 받아서 HumanMessage(content=유저입력값) 형태로 LLM에게 전달합니다. 즉, 전체 프롬프트 구조는 개발자가 설계하는 것입니다.
토큰을 줄이는 원리는 OpenAI나 Anthropic 같은 모델들은 프롬프트 캐싱 기능을 제공합니다. 프롬프트의 앞부분(보통 시스템 메시지나 고정된 지침)이 변하지 않고 일정하게 유지되면, 모델은 이를 매번 새로 계산하지 않고 '캐시'된 데이터를 사용합니다.
이런 의미로 설명드린 것이었습니다.
Q2. 이전 AI 답변이 어떻게 처음부터 content에 들어가 있나요?
이 부분은 LLM의 'Stateless(상태 저장 안 함)' 특성 때문에 발생하는 수동 작업입니다. AI는 사실 기억력이 없습니다: LLM(GPT 등)은 한 번의 invoke 가 끝나면 앞의 내용을 모두 잊어버립니다.
붙여넣기된 코드에서 AIMessage(content="...")가 이미 들어있는 이유는, 제가 직접 "우리가 이전에 이런 대화를 나눴었지?"라고 AI에게 알려주기 위해 과거 내역을 리스트에 직접 추가한 것입니다. 수동으로 이전 메시지를 넣어줘야 하기 때문입니다.
정리하면, AI 가 이전대화를 스스로 기억하는 것이 아닌, 연속적인 대화를 위하여 사람이 직접 AI 답변 포함된 리스트에 쌓아 전달하는 과정입니다. 실제 서비스에서는 ChatMessageHistory 같은 클래스를 써서 이 과정을 자동으로 관리합니다.
답변이 도움이 되었으면 좋겠네요.
강의 수강 감사드립니다!
👍
2
See latest comments