반응형
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가지
반응형
'IT' 카테고리의 다른 글
| 맥북 파일 정리가 10분이면 끝나는 세컨드 브레인 태그 활용법 (1) | 2025.07.25 |
|---|---|
| 맥북 캘린더 일정 자동으로 만들기 단축어 앱 200% 활용법 (5) | 2025.07.25 |
| 챗지피티 프롬프트 디버깅으로 AI 응답 오류 해결하는 방법 3가지 (3) | 2025.07.25 |
| 챗지피티 프롬프트에 조건 여러 개 넣었더니 충돌한다면? 해결법 3가지 (1) | 2025.07.25 |
| Things 3 태그만으로 GTD 완벽하게 정착시킨 방법 (2) | 2025.07.24 |