Files
telegram-bot-workers/MEMORY_FEATURE.md
kappa 860e36a688 feat: add memory system and troubleshoot agent
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>
2026-01-27 14:28:22 +09:00

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.ts
    • saveMemory(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.ts
    • Memory 인터페이스 추가
    • 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 도구 사용 안내 추가

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

  1. D1 마이그레이션 실행 (로컬 테스트)
wrangler d1 execute telegram-conversations --local --file=migrations/003_add_user_memories.sql
  1. 프로덕션 배포 (⚠️ 주의: 스키마 변경)
wrangler d1 execute telegram-conversations --file=migrations/003_add_user_memories.sql
  1. TypeScript 검증
npx tsc --noEmit
  1. 로컬 테스트
npm run dev
  1. 배포
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)