From 1ecbf19f665ebd291ac048fd0132320560d600d6 Mon Sep 17 00:00:00 2001 From: kappa Date: Thu, 5 Feb 2026 12:25:57 +0900 Subject: [PATCH] feat: integrate smart context in AI response generation - Add import for getSmartContext from conversation-storage service - Modify generateAIResponse to use smart context (recent 20 + keyword-related 10 messages) - Keep existing getAllSummaries for archived profile system - Use smart context (max 30 messages) when available, fallback to legacy buffer (10 messages) - Maintain backward compatibility with existing conversation system Co-Authored-By: Claude Opus 4.5 --- src/summary-service.ts | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/summary-service.ts b/src/summary-service.ts index 2463055..9f46bfc 100644 --- a/src/summary-service.ts +++ b/src/summary-service.ts @@ -1,5 +1,6 @@ import { Env, BufferedMessage, Summary, ConversationContext, WorkersAITextGenerationOutput, WorkersAITextGenerationInput } from './types'; import { createLogger } from './utils/logger'; +import { getSmartContext } from './services/conversation-storage'; const logger = createLogger('summary-service'); @@ -361,11 +362,17 @@ export async function generateAIResponse( userMessage: string, telegramUserId?: string ): Promise { - const context = await getConversationContext(env.DB, userId, chatId); + // 1. 스마트 컨텍스트 조회 (새 시스템 - 최근 20개 + 키워드 관련 10개, 중복 제거) + const smartMessages = telegramUserId + ? await getSmartContext(env.DB, telegramUserId, userMessage) + : []; + + // 2. 기존 요약 조회 (아카이브된 프로필용) + const summaries = await getAllSummaries(env.DB, userId, chatId); // 모든 요약 통합 (최신순 → 오래된순으로 정렬하여 시간순 표시) - const integratedProfile = context.summaries.length > 0 - ? context.summaries + const integratedProfile = summaries.length > 0 + ? summaries .slice() .reverse() // 오래된 것부터 표시 .map((s) => `[v${s.generation}] ${s.summary}`) @@ -379,7 +386,7 @@ export async function generateAIResponse( const systemPrompt = `당신은 친절하고 유능한 AI 어시스턴트입니다. ${integratedProfile ? ` -## 사용자 프로필 (${context.summaries.length}개 버전 통합) +## 사용자 프로필 (${summaries.length}개 버전 통합) ${integratedProfile} 위 프로필들을 종합하여 사용자의 관심사, 맥락, 변화를 이해하고 개인화된 응답을 제공하세요. @@ -412,10 +419,16 @@ ${memoriesSection} - manage_deposit, manage_domain, manage_server, manage_troubleshoot, suggest_domains 도구 결과는 그대로 전달하세요. - 도구 결과에 "__DIRECT__" 마커가 포함되어 있으면 해설이나 추가 설명 없이 결과를 그대로 전달하세요. 앞뒤로 텍스트를 추가하지 마세요.`; - const recentContext = context.recentMessages.slice(-10).map((m) => ({ - role: m.role === 'user' ? 'user' as const : 'assistant' as const, - content: m.message, - })); + // 3. recentContext를 스마트 컨텍스트로 교체 (최대 30개) + const recentContext = smartMessages.length > 0 + ? smartMessages.slice(-30).map((m) => ({ + role: m.role === 'user' ? 'user' as const : 'assistant' as const, + content: m.content, + })) + : (await getConversationContext(env.DB, userId, chatId)).recentMessages.slice(-10).map((m) => ({ + role: m.role === 'user' ? 'user' as const : 'assistant' as const, + content: m.message, + })); // OpenAI 사용 (설정된 경우) if (env.OPENAI_API_KEY) {