ai_analyzer.py
μ€λͺ
λ° κ°μ μ μ:
if "μ΄μ μμ" in ai_text or "λ¬Έμ κ° μ" in ai_text or "νΉμ΄μ¬ν μ" in ai_text: 쑰건문μμ νΉμ ν€μλκ° ν¬ν¨λμμ λ {"high": 0, "medium": 0, "low": 0}μ λ°ννλλ‘ μ€μ λμ΄ μμ΅λλ€. μ΄λ μλλ λμμΌ μ μμΌλ, μλ₯Ό λ€μ΄ ai_textκ° "μ΄μ μμμ
λλ€." λλ "λ¬Έμ κ° μμ΅λλ€." κ°μ ννμΌ κ²½μ° λ¬Έμ κ° μμμ μ νν νλ¨ν μ μμ§λ§, μΌλΆ ν
μ€νΈκ° μ΄ κΈμμ΄μ ν¬ν¨νλ©΄μ μλμΉ μκ² λ°νκ°μ΄ 0μ΄ λλ κ²½μ°κ° μμ μ μμ΅λλ€.
κ°μ μ μ: λ μ νν ν¨ν΄ λ§€μΉ λλ μμ°μ΄ μ²λ¦¬λ₯Ό ν΅ν΄ 'μμ'μ΄λΌλ λ¨μ΄μ ν¬ν¨ μ¬λΆλ₯Ό νλ¨νμ¬, μμ ν μΌμΉνλμ§ νμΈνκ±°λ, λ¬Έλ§₯ λΆμ ν νλ¨μ΄ νμν©λλ€.
λΌμΈ λ²νΈ: 40
ai_text = result["choices"][0]["message"]["content"] κ³Ό ai_text = result["content"][0]["text"]λ‘ λΆκΈ° μ²λ¦¬κ° λλ λΆλΆμ
λλ€. λ§μ½ λ νλκ° μκ³ , fallback κ°μ΄ "[AI λΆμ μ€ν¨] μ μ μλ μλ΅ νμ"μΌλ‘ μ€μ λμ΄ μμ§λ§, μ΄ κ²½μ°μλ μλ΅μ΄ λΉμ μμ μΈ κ²½μ°μλ μ²λ¦¬κ° μ΄λ €μΈ μ μμ΅λλ€.ai_text.count("[μ]"), ai_text.count("[μ€]"), ai_text.count("[ν]")λ κ°κ° μ 체 λ¬Έμμ΄μ μννλ©° μΉ΄μ΄νΈλ₯Ό μννλ―λ‘, μ
λ ₯ λ¬Έμμ΄μ΄ λ§€μ° κΈΈ κ²½μ° λΆνμνκ² λ§μ μ°μ°μ΄ λ°μν μ μμ΅λλ€.for line in ai_text.split('\n'):μ μ¬μ©ν λ, ν μ€μ© κ²μ¬νλ κ΅¬μ‘°κ° λμ΄ μμΌλ―λ‘ ν¨μ¨μ μ΄λ―λ‘ μ΄ λΆλΆμ ν° λ¬Έμ κ° μμΌλ, λ¬Έμμ΄μ κΈΈμ΄κ° λ§€μ° ν΄ κ²½μ° λ£¨νμμμ μ²λ¦¬ μλλ₯Ό νμΈνλ κ²μ΄ μ’μ΅λλ€.μ€λͺ
λ° κ°μ μ μ:
import httpx, logging, reμ κ°μ΄ μ¬λ¬ λͺ¨λμ ν μ€μ importνλ κ²μ μ½λ 컨벀μ
μμλ κΆμ₯λμ§ μμ΅λλ€.
κ°μ μ μ: κ°κ°μ importλ₯Ό λ³λ λΌμΈμΌλ‘ λλμ΄ μ¬μ©νλ κ²μ΄ κ°λ
μ±κ³Ό μ μ§λ³΄μ μΈ‘λ©΄μμ λ μ’μ΅λλ€.
λΌμΈ λ²νΈ: 27
μ€λͺ
λ° κ°μ μ μ:
# OpenAI νΈν / Claude νμ λͺ¨λ μ§μ μ£Όμμ μ΄ν΄κ° λκΈ΄ νμ§λ§, μ€μ μ½λμ ꡬ쑰μ λ΄μ©μ λΆμνλ©΄ κ°κ°μ λΆκΈ° μ²λ¦¬λ₯Ό λͺ
ννκ² κ΅¬λΆν΄μ μμ±νλ κ²μ κΆμ₯ν©λλ€.
κ°μ μ μ: κ°κ°μ μλ΅ νμμ λν΄ μ‘°κ±΄λ¬Έμ μμ±ν λ, if isinstance(result, dict)μ κ°μ΄ νμ
체ν¬λ λΆλͺ
ν λ‘μ§ μ€κ³λ‘ νννλ κ²μ΄ μ’μ΅λλ€.
λΌμΈ λ²νΈ: 49
prompt = f"""...{error_info.get('stacktrace', '')}"""μμ stacktraceμ λ°μ΄ν°κ° λ§€μ° ν΄ κ²½μ° λ©μμ§κ° λ무 κΈΈμ΄μ§ μ μμ΅λλ€. AI λͺ¨λΈ μ
μ₯μμλ μ
λ ₯ ν ν° μ νμ΄ μμ μ μμ΄μ κΈ΄ μ€ννΈλ μ΄μ€κ° μ
λ ₯λλ μν©μμ λ¬Έμ κ° μκΈΈ κ°λ₯μ±μ΄ μμ΅λλ€.