Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- expo go 오류
- 자바공부
- 크로마DB
- 네스트시큐리티
- AI
- 이미지처리
- expo 안드로이드
- expo 버전 오류
- rnn gnsfus
- expo 51 버전
- 스프링 공부
- expo 아이폰
- 랭체인 툴
- langchain react agent
- jotai
- 리액트 네이티브 오류
- vllmmcp
- langgraph mcp
- 타입스크립트상태관리
- react
- langgraph
- VectorDB
- langchain tools
- langchain
- comfyui
- 상태관리
- expo 아이폰 오류
- 리액트 네이티브
- nestjs시큐리티
- expo 51 오류
Archives
- Today
- Total
영리의 테크블로그
해커톤 준비 / Human In The Loop(HITL) 란? 본문
이번 해커톤에서 백엔드/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 |
|---|