본문 바로가기
IT

챗지피티와 긴 대화를 이어가는 기억 유도 프롬프트 활용법

by qwanjk 2025. 7. 25.
반응형

AI와 대화할 때 이전 내용을 기억하지 못해 답답한 경험이 있으신가요. ChatGPT나 Claude 같은 AI는 세션이 끝나면 대화 내용을 잊어버려요. 하지만 프롬프트 설계를 통해 마치 기억하는 것처럼 대화를 이어갈 수 있어요.

 

역할 명시로 시작하는 기본 구조

 

AI에게 명확한 역할을 부여하면 대화의 연속성이 크게 향상돼요. 다음과 같은 프롬프트로 시작해보세요.

너는 AI 비서로서, 이 프로젝트의 모든 정보를 기억하고 관리해줘.
초기 정보:
- 주제: 고객 데이터 분석 프로젝트
- 최근 요청: 월간 이탈률 리포트 작성
- 담당자: 김철수 팀장

아래는 이전 대화 내용입니다. 이 흐름을 바탕으로 답변해주세요.
---대화 기록 시작---
[2025-07-25] 프로젝트 시작, 데이터베이스 구축 논의
[2025-07-30] 첫 번째 분석 결과 공유, 이탈률 15% 확인
---대화 기록 끝---

 

이런 구조를 사용하면 AI가 맥락을 명확히 인식하고 일관된 답변을 제공해요.

 

macOS에서 LangChain으로 대화 기록 관리하기

 

Python과 LangChain을 활용하면 대화 히스토리를 자동으로 관리할 수 있어요. 먼저 터미널에서 필요한 패키지를 설치해요.

# macOS 터미널에서 실행
pip install langchain openai chromadb

 

다음은 대화 메모리를 관리하는 기본 코드예요.

from langchain.memory import ConversationBufferMemory
from langchain.llms import OpenAI
from langchain.chains import ConversationChain

# 메모리 초기화
memory = ConversationBufferMemory()

# LLM 설정
llm = OpenAI(temperature=0.7)

# 대화 체인 생성
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

# 첫 번째 대화
response1 = conversation.predict(input="안녕! 오늘 날씨 어때?")
print(response1)

# 두 번째 대화 - 이전 내용 기억
response2 = conversation.predict(input="방금 내가 뭐 물어봤지?")
print(response2)

 

반응형

 

중요 정보만 선별하는 요약 전략

 

대화가 길어지면 모든 내용을 저장하기 어려워요. 핵심만 추출해서 관리하는 방법이에요.

from langchain.memory import ConversationSummaryMemory

# 요약 메모리 사용
summary_memory = ConversationSummaryMemory(llm=llm)

# 긴 대화 저장
summary_memory.save_context(
    {"input": "프로젝트 진행 상황은 어때?"}, 
    {"output": "현재 데이터 수집 단계가 완료되었고, 분석 단계에 진입했습니다. 
    총 10만 건의 데이터 중 7만 건이 정제되었으며..."}
)

# 메모리에서 요약 확인
print(summary_memory.load_memory_variables({}))

 

벡터 데이터베이스로 장기 기억 구현

 

ChromaDB를 사용하면 대화 내용을 벡터화해서 저장하고 유사한 맥락을 검색할 수 있어요.

import chromadb
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

# ChromaDB 클라이언트 생성
client = chromadb.Client()

# 컬렉션 생성
collection = client.create_collection(name="conversation_history")

# 대화 내용 저장
conversations = [
    "프로젝트 시작일은 2025년 7월 25일입니다",
    "주요 목표는 고객 이탈률을 10% 감소시키는 것입니다",
    "현재 팀원은 5명이며, 개발 2명, 분석 3명으로 구성되어 있습니다"
]

# 벡터화해서 저장
for idx, conv in enumerate(conversations):
    collection.add(
        documents=[conv],
        metadatas=[{"date": f"2024-01-{15+idx}"}],
        ids=[f"conv_{idx}"]
    )

# 관련 대화 검색
results = collection.query(
    query_texts=["팀 구성은 어떻게 되나요?"],
    n_results=2
)
print(results['documents'])

 

단계별 프롬프트로 복잡한 대화 관리

 

복잡한 프로젝트에서는 단계별로 프롬프트를 구성하면 효과적이에요.

class ProjectMemoryManager:
    def __init__(self):
        self.project_info = {}
        self.conversation_history = []
        
    def create_prompt(self, current_query):
        prompt = f"""
        [프로젝트 정보]
        {self.format_project_info()}
        
        [최근 대화 요약]
        {self.get_recent_conversations(5)}
        
        [현재 질문]
        {current_query}
        
        위 정보를 바탕으로 답변해주세요. 단계별로 접근하세요:
        1. 과거 맥락 확인
        2. 현재 질문 분석
        3. 관련 정보 연결
        4. 구체적 답변 생성
        """
        return prompt
    
    def format_project_info(self):
        return "\n".join([f"- {k}: {v}" for k, v in self.project_info.items()])
    
    def get_recent_conversations(self, n):
        return "\n".join(self.conversation_history[-n:])

# 사용 예시
manager = ProjectMemoryManager()
manager.project_info = {
    "프로젝트명": "고객 분석 시스템",
    "시작일": "2025-07-25",
    "팀원수": "5명"
}

prompt = manager.create_prompt("현재 진행 상황은?")
print(prompt)

 

자동 요약과 핵심 정보 추출

 

대화가 진행될수록 중요한 정보만 골라내는 것이 필요해요. 자동 요약 시스템을 구현해보세요.

from datetime import datetime
import json

class ConversationSummarizer:
    def __init__(self, llm):
        self.llm = llm
        self.key_points = []
        
    def extract_key_info(self, conversation):
        prompt = f"""
        다음 대화에서 핵심 정보만 추출해주세요:
        {conversation}
        
        추출 형식:
        - 날짜/시간 정보
        - 중요 결정사항
        - 액션 아이템
        - 담당자 정보
        """
        
        summary = self.llm.predict(prompt)
        self.key_points.append({
            "timestamp": datetime.now(),
            "summary": summary
        })
        
    def save_to_file(self, filename):
        with open(filename, 'w') as f:
            json.dump(self.key_points, f, default=str, ensure_ascii=False)

# 사용 예시
summarizer = ConversationSummarizer(llm)
summarizer.extract_key_info("오늘 회의에서 프로젝트 마감일을 8월 말로 확정했습니다...")
summarizer.save_to_file("project_summary.json")

 

실시간 맥락 업데이트 시스템

 

대화 중에 실시간으로 맥락을 업데이트하고 관리하는 방법이에요.

class RealTimeContextManager:
    def __init__(self):
        self.context_window = []
        self.max_context_size = 10
        
    def update_context(self, user_input, ai_response):
        # 새로운 대화 추가
        self.context_window.append({
            "user": user_input,
            "ai": ai_response,
            "timestamp": datetime.now()
        })
        
        # 오래된 대화 제거
        if len(self.context_window) > self.max_context_size:
            self.context_window.pop(0)
            
    def get_context_prompt(self):
        context_str = ""
        for item in self.context_window:
            context_str += f"\n사용자: {item['user']}\nAI: {item['ai']}\n"
        return context_str

# 실제 사용
context_manager = RealTimeContextManager()

# 대화 진행
user_input = "프로젝트 예산은 얼마나 되나요?"
ai_response = "프로젝트 예산은 5천만원으로 책정되었습니다."
context_manager.update_context(user_input, ai_response)

# 다음 프롬프트에 맥락 포함
next_prompt = f"""
이전 대화 맥락:
{context_manager.get_context_prompt()}

새로운 질문: 예산 중에서 개발비는 얼마나 되나요?
"""

 

이런 방식으로 AI와의 대화에서 장기 기억을 시뮬레이션할 수 있어요. 프로젝트의 복잡도에 따라 적절한 방법을 선택해서 사용하면 훨씬 자연스러운 대화가 가능해져요.

 

 

2025.07.25 - [IT] - 챗지피티 프롬프트 디버깅으로 AI 응답 오류 해결하는 방법 3가지

 

반응형