영리의 테크블로그

해커톤 준비 / Human In The Loop(HITL) 란? 본문

dev/구름톤 유니브

해커톤 준비 / Human In The Loop(HITL) 란?

영리0 2025. 6. 29. 21:17

 

이번 해커톤에서 백엔드/AI 파트를 맡아 쉬운말 번역기 라는 서비스의 흐름을 설계해보았다.

이 글은 langgraph 로 '문서 분기 - ocr - 쉬운말 변환 - tts' 를 어떻게 한 파이프라인으로 묶었는지 정리한 글이다.

 

백엔드 파이프라인

 

  • auth/ratelimit : fastapi 로 구현 / 파일 업로드, jwt 인증, websocket 브릿지
  • worker : 분기, 재시도, 스트림 처리
  • s3 : 이미지,음성 저장
  • db : 작업 메타데이터, 사용자 로그 저장

그래프 구조 짜기

세부 노드 설명

  • load doc : S3 등 이미지 서버에서 발급
  • ocr snippit : OCR
  • classfiy doc : OCR 내용 공적/사적 판별
  • private : 로그인 리턴
  • public : 다음 노드로 이동
  • easy translate : LLM 스트림 호출 -> 토큰 스트림 yeild -> websocket 전송
  • error : 서버 오류일시 재시도 클라이언트 오류일시 휴먼인더루프 실행
  • tts : 비동기로? 미정임
  • return : 최종상태 push 

 

Human In The Loop (휴먼인더루프)

Human In The Loop (HITL) 란 자동화된 LLM 워크플로우 중간에 사람을 끼워 넣어 오류리스크를 최소화하는 장치이다.

LangGraph 에서는 이를 위해 그래프 진행을 일시 중단하고 사람 입력을 받아 재시동할 수 있는 기능을 제공한다.

 

LangGraph 가 제공하는 HITL 메커니즘

https://langchain-ai.github.io/langgraph/concepts/human_in_the_loop/

 

Overview

hil human-in-the-loop overview Human-in-the-loop To review, edit, and approve tool calls in an agent or workflow, use LangGraph's human-in-the-loop features to enable human intervention at any point in a workflow. This is especially useful in large languag

langchain-ai.github.io

 

기능 설명 코드
그래프 중단 노드에서 interrupt() 호출 → RUNNING → INTERRUPTED 상태 return interrupt(data=my_payload)
재시작 외부 서비스(UI·FastAPI)에서 사용자 입력 수집 → graph.resume(id, Command(...)) python graph.resume(job_id, Command(update=patch, goto="next_node"))
부모 그래프 점프 하위 서브그래프에서 상위 노드로 이동 Command(graph=Command.PARENT, goto="human_review")
상태 패치 입력값·교정내용을 update={...} 로 주입 수정된 OCR·번역 텍스트 등

 

 

무한루프 방지 패턴 예시

@node
async def classify_doc(state):
    outcome, conf = await llm_classify(state.snippet)
    # ❶ 확신도 낮음 → interrupt
    if conf < 0.5:
        return interrupt({ "snippet": state.snippet,
                           "issue": "low_confidence" })
    # ❷ 판별 결과가 'unknown' → human_review로 점프
    if outcome == "unknown":
        return Command(goto="human_review", graph=Command.PARENT)
    # ❸ 정상 분기
    state.doc_type = outcome
    return state

 

'dev > 구름톤 유니브' 카테고리의 다른 글

[구름톤 유니브] 1. ERD 설계 및 JPA 복습  (0) 2025.05.04