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>
This commit is contained in:
162
MEMORY_FEATURE.md
Normal file
162
MEMORY_FEATURE.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# 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
|
||||
|
||||
```sql
|
||||
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 마이그레이션 실행** (로컬 테스트)
|
||||
```bash
|
||||
wrangler d1 execute telegram-conversations --local --file=migrations/003_add_user_memories.sql
|
||||
```
|
||||
|
||||
2. **프로덕션 배포** (⚠️ 주의: 스키마 변경)
|
||||
```bash
|
||||
wrangler d1 execute telegram-conversations --file=migrations/003_add_user_memories.sql
|
||||
```
|
||||
|
||||
3. **TypeScript 검증**
|
||||
```bash
|
||||
npx tsc --noEmit
|
||||
```
|
||||
|
||||
4. **로컬 테스트**
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
5. **배포**
|
||||
```bash
|
||||
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)
|
||||
Reference in New Issue
Block a user