feat: 이벤트 로깅 시스템 추가 및 주요 컴포넌트 로깅 통합

This commit is contained in:
2025-08-28 12:24:55 +09:00
parent f0ddc5aebe
commit 4f3611e45d
9 changed files with 306 additions and 7 deletions

View File

@@ -9,6 +9,7 @@ from langchain.tools import Tool
from langchain.memory import ConversationBufferMemory
from web_scraper import WebScraper
from google_drive_uploader import GoogleDriveUploader, SimpleDriveSaver
from event_logger import get_logger, LangChainEventsHandler
class AIAgent:
def __init__(self, config_path='./config.json'):
@@ -85,6 +86,9 @@ class AIAgent:
memory=self.memory,
verbose=True
)
# 콜백 핸들러 구성 (이벤트 로깅)
logger = get_logger()
self.callback_handler = LangChainEventsHandler(logger) if logger else None
def load_model(self):
"""
@@ -349,9 +353,15 @@ class AIAgent:
주제별로 웹 검색 → 스크래핑 → 요약 → 저장까지 수행
반환: [{ topic, response }]
"""
from event_logger import get_logger
logger = get_logger()
results = []
for topic in topics:
if logger:
logger.log_event("topic_start", topic=topic)
urls = self._search_urls(topic, k=5)
if logger:
logger.log_event("search_done", topic=topic, url_count=len(urls))
collected = []
for u in urls[:5]:
data = self.web_scraper.scrape_website(u)
@@ -372,11 +382,18 @@ class AIAgent:
자료:
{snippet}
"""
summary = self.llm(prompt)
# LangChain 0.1+: __call__ deprecated → use invoke
if logger:
logger.log_event("llm_summary_start", topic=topic)
summary = self.llm.invoke(prompt)
if logger:
logger.log_event("llm_summary_end", topic=topic)
except Exception as e:
summary = f"요약 실패: {e}"
results.append({"topic": topic, "response": summary})
if logger:
logger.log_event("topic_done", topic=topic)
return results
@@ -432,7 +449,10 @@ class AIAgent:
AI 에이전트를 실행합니다.
"""
try:
response = self.agent.run(task_description)
if self.callback_handler:
response = self.agent.run(task_description, callbacks=[self.callback_handler])
else:
response = self.agent.run(task_description)
return response
except Exception as e:
print(f"에이전트 실행 실패: {e}")
@@ -459,7 +479,14 @@ class AIAgent:
"""
try:
response = self.llm(prompt)
# LangChain 0.1+: __call__ deprecated → use invoke
from event_logger import get_logger
logger = get_logger()
if logger:
logger.log_event("llm_topics_start", count=num_topics)
response = self.llm.invoke(prompt)
if logger:
logger.log_event("llm_topics_end", count=num_topics)
# 응답에서 주제들을 추출 (줄 단위로 분리)
topics = [line.strip() for line in response.split('\n') if line.strip() and not line.startswith(('1.', '2.', '3.', '-'))]
# 최대 num_topics개 반환