from services.ai_service import ai_service from models.schemas import CodeExplanation from typing import List, Optional class CodeExplainer: """代码解释智能体""" def __init__(self): self.service = ai_service def explain(self, code: str, language: str, depth: str = "detailed") -> CodeExplanation: """解释代码""" explanation_text = self.service.generate_explanation(code, language, depth) return CodeExplanation( explanation=explanation_text, line_by_line=self._parse_line_explanations(explanation_text), key_concepts=self._extract_concepts(explanation_text), suggestions=self._extract_suggestions(explanation_text) ) def _parse_line_explanations(self, explanation: str) -> List[dict]: """解析逐行解释""" lines = explanation.split('\n') parsed = [] current_item = {} for line in lines: if line.strip().startswith(('第', 'Line', '行')): if current_item: parsed.append(current_item) current_item = {"line": line} elif current_item: current_item["explanation"] = current_item.get("explanation", "") + line + "\n" if current_item: parsed.append(current_item) return parsed if parsed else None def _extract_concepts(self, explanation: str) -> List[str]: """提取关键概念""" import re patterns = [ r'关键概念[::]\s*(.+?)(?:\n|$)', r'概念[::]\s*(.+?)(?:\n|$)', r'(?:concept|term|关键字)[s]*[::]\s*(.+?)(?:\n|$)' ] concepts = [] for pattern in patterns: matches = re.findall(pattern, explanation, re.IGNORECASE) concepts.extend(matches) return concepts if concepts else None def _extract_suggestions(self, explanation: str) -> List[str]: """提取建议""" import re pattern = r'(?:建议|tips?|提示|最佳实践)[::]\s*(.+?)(?:\n|$)' matches = re.findall(pattern, explanation, re.IGNORECASE) return matches if matches else None code_explainer = CodeExplainer()