Memory System: - Add category-based memory storage (company, tech, role, location, server) - Silent background saving via saveMemorySilently() - Category-based overwrite (same category replaces old memory) - Server-related pattern detection (AWS, GCP, k8s, traffic info) - Memory management tool (list, delete) Troubleshoot Agent: - Session-based troubleshooting conversation (KV, 1h TTL) - 20-year DevOps/SRE expert persona - Support for server/infra, domain/DNS, code/deploy, network, database issues - Internal tools: search_solution (Brave), lookup_docs (Context7) - Auto-trigger on error-related keywords - Session completion and cancellation support Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Memory Feature Implementation
Overview
사용자가 명시적으로 기억해달라고 요청한 정보를 저장하고 관리하는 기능입니다.
Files Created/Modified
1. Migration (NEW)
migrations/003_add_user_memories.sql- user_memories 테이블 생성
- user_id, content, created_at 컬럼
- 인덱스: idx_memories_user (user_id, created_at DESC)
2. Memory Service (NEW)
src/services/memory-service.tssaveMemory(db, userId, content)- 기억 저장getMemories(db, userId)- 모든 기억 조회 (최신순)deleteMemory(db, userId, memoryId)- ID로 삭제deleteMemoryByContent(db, userId, searchText)- LIKE 검색으로 삭제formatMemoriesForPrompt(memories)- 시스템 프롬프트용 포맷팅
3. Memory Tool (NEW)
src/tools/memory-tool.ts- Function Calling 도구 정의
- 키워드: 기억해줘, 기억해, 잊어줘, 지워줘, 내 기억, 저장된 정보, remember, forget
- Actions: save, list, delete
- 고정 형식 응답:
- save: "✅ 기억했습니다: {content}"
- list: "📋 저장된 기억 (N개)\n\n1. ... (ID: X)"
- delete: "✅ N개의 기억을 삭제했습니다:\n\n1. ..."
4. Types (MODIFIED)
src/types.tsMemory인터페이스 추가ManageMemoryArgs인터페이스 추가
5. Tools Index (MODIFIED)
src/tools/index.ts- manageMemoryTool import
- ManageMemoryArgsSchema 추가 (Zod validation)
- tools 배열에 manageMemoryTool 추가
- TOOL_CATEGORIES에 memory 카테고리 추가
- CATEGORY_PATTERNS에 memory 패턴 추가
- executeTool에 manage_memory 케이스 추가
6. Summary Service (MODIFIED)
src/summary-service.ts- generateAIResponse 함수 수정:
- getMemories 호출로 사용자 기억 조회
- formatMemoriesForPrompt로 포맷팅
- 시스템 프롬프트에 "사용자가 기억해달라고 한 정보" 섹션 추가
- manage_memory 도구 사용 안내 추가
- generateAIResponse 함수 수정:
Database Schema
CREATE TABLE IF NOT EXISTS user_memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE INDEX IF NOT EXISTS idx_memories_user ON user_memories(user_id, created_at DESC);
API Usage Examples
1. 기억 저장
사용자: "나는 Go 개발자야. 기억해줘." AI: manage_memory(action="save", content="Go 개발자") 응답: "✅ 기억했습니다: Go 개발자"
2. 기억 조회
사용자: "내가 뭐라고 했지?" AI: manage_memory(action="list") 응답:
📋 저장된 기억 (2개)
1. Go 개발자 (ID: 1)
2. 서울 거주 (ID: 2)
3. 기억 삭제 (ID)
사용자: "1번 지워줘" AI: manage_memory(action="delete", memory_id=1) 응답: "✅ 기억을 삭제했습니다 (ID: 1)"
4. 기억 삭제 (내용 검색)
사용자: "Go 관련된 거 잊어줘" AI: manage_memory(action="delete", content="Go") 응답:
✅ 1개의 기억을 삭제했습니다:
1. Go 개발자
System Prompt Integration
기억이 있는 경우 시스템 프롬프트에 다음과 같이 추가됩니다:
## 사용자가 기억해달라고 한 정보
- Go 개발자
- 서울 거주
- 반려견 이름은 뭉치
위 정보들은 사용자가 명시적으로 기억해달라고 요청한 중요한 정보입니다. 대화 시 이를 참고하세요.
Deployment Steps
- D1 마이그레이션 실행 (로컬 테스트)
wrangler d1 execute telegram-conversations --local --file=migrations/003_add_user_memories.sql
- 프로덕션 배포 (⚠️ 주의: 스키마 변경)
wrangler d1 execute telegram-conversations --file=migrations/003_add_user_memories.sql
- TypeScript 검증
npx tsc --noEmit
- 로컬 테스트
npm run dev
- 배포
npm run deploy
Testing Checklist
- "기억해줘" → save action 호출 확인
- "내 기억" → list action 호출 확인
- "잊어줘" → delete action 호출 확인
- 저장된 기억이 시스템 프롬프트에 포함되는지 확인
- AI가 기억된 정보를 참고하여 응답하는지 확인
- 삭제 시 해당 기억이 더 이상 프롬프트에 나타나지 않는지 확인
Performance Considerations
- 인덱스: user_id + created_at DESC 복합 인덱스로 조회 최적화
- 캐싱: getMemories는 매 AI 응답마다 호출되므로 향후 KV 캐싱 고려 가능
- 제한: content 최대 1000자 (Zod validation)
Future Enhancements
- 기억 수 제한 (사용자당 최대 N개)
- 기억 중요도/우선순위 설정
- 기억 카테고리/태그 기능
- 기억 검색 개선 (전문 검색, 유사도 검색)
- 기억 자동 만료 (TTL)