agentic한 기능의 ai 로직

이주원·2025년 4월 25일

컴퓨터언어

목록 보기
30/50

  from typing import Dict, Any
  from loguru import logger
  from app.services.agentic.agentic_classifier import AgenticClassifier, AgenticType
  from app.services.agentic.agentic_response_generator import AgenticResponseGenerator
  from app.services.common.postprocessor import Postprocessor
  from app.services.common.preprocessor import translate_query


  class Agentic:
      """에이전트 클래스 - 워크플로우 관리"""

      def __init__(self):
          self.classifier = AgenticClassifier()
          self.response_generator = AgenticResponseGenerator()
          self.postprocessor = Postprocessor()
          logger.info("[에이전트] 초기화 완료")

      async def get_response(self, query: str, uid: str) -> Dict[str, Any]:
          """질의에 대한 응답을 생성합니다."""
          try:
              logger.info(f"[WORKFLOW] ====== Starting agentic workflow for user {uid} ======")
              logger.info(f"[WORKFLOW] Original query: {query}")

              # 1. 전처리 (언어 감지 및 번역)
              logger.info(f"[WORKFLOW] Step 1: Preprocessing (language detection and translation)")
              translation_result = await translate_query(query)
              source_lang = translation_result["lang_code"]
              english_query = translation_result["translated_query"]
              logger.info(f"[에이전트] 언어 감지 완료 - 소스 언어: {source_lang}, 영어 번역: {english_query}")

              # 2. 기능 분류
              logger.info(f"[WORKFLOW] Step 2: Classification")
              agentic_type = await self.classifier.classify(english_query)
              logger.info(f"[에이전트] 에이전틱 유형: {agentic_type.value}")

              # 3. 응답 생성
              logger.info(f"[WORKFLOW] Step 3: Response generation")
              result = await self.response_generator.generate_response(english_query, agentic_type, uid)
              logger.info("[에이전트] 응답 생성 완료")

              # 4. 후처리 (원문 언어로 번역)
              logger.info(f"[WORKFLOW] Step 4: Postprocessing (translation back to original language)")
              if source_lang != "en":
                  processed_response = await self.postprocessor.postprocess(result["response"], source_lang, "general")
                  result["response"] = processed_response["response"]
                  result["metadata"]["translated"] = True

              # 5. 응답 데이터 구성
              response_data = {
                  "response": result["response"],
                  "metadata": {
                      "query": query,
                      "english_query": english_query,
                      "source_lang": source_lang,
                      "agentic_type": agentic_type.value,
                      "uid": uid,
                      "state": result.get("metadata", {}).get("state", "general")
                  }
              }

              # 메타데이터에 추가 정보가 있으면 병합
              if "metadata" in result:
                  response_data["metadata"].update(result["metadata"])

              logger.info(f"[WORKFLOW] ====== Agentic workflow completed for user {uid} ======")
              return response_data

          except Exception as e:
              logger.error(f"응답 생성 중 오류 발생: {str(e)}")
              logger.error(f"[WORKFLOW] ====== Error in agentic workflow: {str(e)} ======")
              return {
                  "response": "죄송합니다. 응답을 생성하는 중에 오류가 발생했습니다.",
                  "metadata": {
                      "query": query,
                      "state": "error",
                      "uid": uid,
                      "error": str(e)
                  }
              } 
profile
뭐가될지 모름

0개의 댓글