fabagent / agents /rag /learn.py
hee_!J
feat: μžκ°€ν•™μŠ΅Β·FAISS RAGΒ·μ •λŸ‰μ‹€ν—˜ + 배포 μ€€λΉ„
159b5df
Raw
History Blame Contribute Delete
2.52 kB
"""μžκ°€ ν•™μŠ΅ 루프 - 운영자 승인 μ‹œ 뢄석 κ²°κ³Όλ₯Ό μΈμ‹œλ˜νŠΈ DB에 μžλ™ 기둝
승인된 뢄석을 INC-AUTO-{date}-{alarm_id}.md둜 μ €μž₯ν•˜λ©΄ RAG 검색 λŒ€μƒμ— ν¬ν•¨λ˜μ–΄
ν–₯ν›„ μœ μ‚¬ μ•ŒλžŒμ˜ 원인 뢄석/λŒ€μ‘ ꢌ고 정확도가 μ μ§„μ μœΌλ‘œ ν–₯상됨
PDF κΈ°νšμ„œ "μžκ°€ ν•™μŠ΅ 루프 - 운영자 승인 κ²°κ³Όκ°€ μΈμ‹œλ˜νŠΈ DB에 μ¦‰μ‹œ 반영" λŒ€μ‘ ν•­λͺ©
"""
from datetime import datetime
from pathlib import Path
from agents.rag.store import KNOWLEDGE_DIR
from core.schema import TierData
def record_incident(alarm: dict, tier_data: TierData, work_order_id: str) -> Path:
"""승인된 뢄석을 μΈμ‹œλ˜νŠΈ .md둜 μ €μž₯, μ €μž₯된 경둜 λ°˜ν™˜"""
date = datetime.now().strftime("%Y-%m-%d")
doc_id = f"INC-AUTO-{date}-{alarm['id']}"
path = KNOWLEDGE_DIR / f"{doc_id}.md"
path.write_text(_render_doc(doc_id, alarm, tier_data, work_order_id), encoding="utf-8")
return path
def _render_doc(doc_id: str, alarm: dict, td: TierData, work_order: str) -> str:
now = datetime.now().strftime("%Y-%m-%d %H:%M")
t1, t2, t3, t4 = td["tier1"], td["tier2"], td["tier3"], td["tier4"]
causes_md = "\n".join(
f"{i+1}. {c['name']} ({c['pct']}%) - {c['evidence']}"
for i, c in enumerate(t2["causes"])
)
deps_md = ", ".join(
f"{d['stage']}({d['delta']}, {d['tag']})" for d in t3["dependencies"]
)
impact_md = ", ".join(
f"{l['label']} {l['lots']} lot/{l['wafers']}μž₯" for l in t3["impact_lots"]
)
def actions(items):
return "\n".join(
f"- {a['text']}" + (f" ({a['meta']})" if a.get("meta") else "")
for a in items
)
return f"""# {doc_id} - {alarm['title']} μžλ™ 기둝
## λΆ„λ₯˜
- μœ ν˜•: μžλ™ ν•™μŠ΅ μΈμ‹œλ˜νŠΈ (운영자 승인 기반)
- 곡정: {alarm['title']}
- lot: {alarm['lot_id']}
- λ°œμƒ μ•Œλ¦Ό: {alarm['time']}
- 기둝 μ‹œκ°: {now}
- μž‘μ—…μ§€μ‹œμ„œ: {work_order}
## Tier 1 이상 탐지
- 이상 점수: {t1['score']}
- κΈ°μ—¬ μ„Όμ„œ Top: {', '.join(f['name'] for f in t1['features'])}
- 영ν–₯ lot: {t1['lot']['id']} ({t1['lot']['wafers']}μž₯)
## Tier 2 μΆ”μ • 원인
{causes_md}
## Tier 3 영ν–₯ 평가
- μ˜ˆμƒ 수율 손싀: {t3['yield_loss']} %p
- 곡정 μ˜μ‘΄μ„±: {deps_md}
- 영ν–₯ WIP: {impact_md}
## Tier 4 채택 ꢌ고
### μ¦‰μ‹œ 쑰치
{actions(t4['immediate'])}
### 쀑μž₯κΈ° 쑰치
{actions(t4['longterm'])}
## 운영자 κ²°μ •
- ꢌ고 채택: 전체 승인
- μž‘μ—…μ§€μ‹œμ„œ λ°œν–‰: {work_order}
"""