feat: Phase 3 구현 — 완전 자동화, 준공도서, Vision L3, 발주처 포털
EVMS 완전 자동화: - 공기 지연 AI 예측 (SPI 기반 준공일 예측) - 기성청구 가능 금액 자동 산출 - 매일 자정 EVMS 스냅샷 자동 생성 (APScheduler) - 매일 07:00 GONGSA 아침 브리핑 자동 생성 준공도서 패키지: - 준공 요약 + 품질시험 목록 + 검측 이력 + 인허가 현황 → ZIP 번들 - 준공 준비 체크리스트 API - 4종 HTML 템플릿 (WeasyPrint PDF 출력) Vision AI Level 3: - 설계 도면 vs 현장 사진 비교 보조 판독 (Claude Vision) - 철근 배근, 거푸집 치수 1차 분석 설계도서 파싱: - PDF 이미지/텍스트에서 공종·수량·규격 자동 추출 - Pandoc HWP 출력 지원 발주처 전용 포털: - 토큰 기반 읽기 전용 API - 공사 현황 대시보드, 공정률 추이 차트 에이전트 협업 고도화: - 협업 시나리오 (concrete_pour, excavation, weekly_report) - GONGSA→PUMJIL→ANJEON 순차 처리 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@ from app.deps import CurrentUser, DB
|
||||
from app.models.agent import AgentConversation, AgentMessage, AgentType, ConversationStatus
|
||||
from app.models.project import Project
|
||||
from app.services.agents.router import get_agent, route_by_keyword
|
||||
from app.services.agents.collaboration import run_scenario, SCENARIO_AGENTS
|
||||
|
||||
router = APIRouter(prefix="/projects/{project_id}/agents", tags=["AI 에이전트"])
|
||||
|
||||
@@ -267,6 +268,32 @@ async def morning_briefing(
|
||||
return msg
|
||||
|
||||
|
||||
@router.post("/scenario/{scenario_name}")
|
||||
async def run_collaboration_scenario(
|
||||
project_id: uuid.UUID,
|
||||
scenario_name: str,
|
||||
db: DB,
|
||||
current_user: CurrentUser,
|
||||
):
|
||||
"""
|
||||
에이전트 협업 시나리오 실행 (Phase 3).
|
||||
복수 에이전트가 순차적으로 하나의 현장 상황을 처리합니다.
|
||||
|
||||
사용 가능 시나리오:
|
||||
- concrete_pour: 콘크리트 타설 (GONGSA → PUMJIL → ANJEON)
|
||||
- excavation: 굴착 작업 (GONGSA → ANJEON → PUMJIL)
|
||||
- weekly_report: 주간 보고 (GONGSA → PUMJIL → GUMU)
|
||||
"""
|
||||
if scenario_name not in SCENARIO_AGENTS:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"알 수 없는 시나리오. 가능한 값: {list(SCENARIO_AGENTS.keys())}",
|
||||
)
|
||||
await _get_project_or_404(project_id, db)
|
||||
results = await run_scenario(db, project_id, current_user.id, scenario_name)
|
||||
return {"scenario": scenario_name, "steps": results}
|
||||
|
||||
|
||||
@router.delete("/{conv_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_conversation(
|
||||
project_id: uuid.UUID, conv_id: uuid.UUID, db: DB, current_user: CurrentUser
|
||||
|
||||
Reference in New Issue
Block a user