Community생산성 & 협업github.com

langchain-ai/langgraph-human-in-the-loop

LangGraph에서 사람-루프 패턴 구현, 승인 일시 중지 또는 오류 처리를 위한 스킬입니다. interrupt(), Command(resume=...), 승인/검증 워크플로 및 4계층 오류 처리 전략을 다룹니다.

langgraph-human-in-the-loop란 무엇인가요?

이 스킬은 LangGraph 기반 AI 에이전트에서 인간-루프 패턴(Human-in-the-Loop)을 구현하는 방법을 상세히 제공합니다. 사용자 승인 대기, 오류 발생 시 중단 및 재개, 그리고 워크플로우 검증 단계를 포함하는 복잡한 시나리오를 처리합니다. `interrupt()` 함수와 `Command(resume=...)` 패턴을 사용하여 에이전트 실행을 일시 중지하고, 외부 입력을 기다린 후 재개하는 방식을 설명합니다. 또한 4계층 오류 처리 전략(재시도, 폴백, 오류 전파, 수동 개입)을 통해 예외 상황을 체계적으로 관리할 수 있습니다. 이 스킬은 LangGraph를 사용하는 모든 AI 에이전트(Claude Code, Cursor, Codex 등)에서 활용 가능하며, 에이전트의 안전성과 신뢰성을 높이는 데 필수적입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/langchain-ai/langchain-skills/tree/main/skills/langgraph-human-in-the-loop

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

langgraph-human-in-the-loop은(는) 무엇을 하나요?

이 스킬은 LangGraph에서 사람-루프 패턴, 승인 일시 중지 또는 오류 처리를 구현할 때 호출하세요. interrupt(), Command(resume=...), 승인/검증 워크플로 및 4계층 오류 처리 전략을 다룹니다.

개요

LangGraph의 사람-루프(Human-in-the-Loop) 패턴은 에이전트가 결정을 내리기 전에 사람의 승인을 받거나, 오류 발생 시 수동 개입을 허용합니다. 이는 중요한 워크플로우에서 안전성과 신뢰성을 보장합니다.

핵심 개념

interrupt()

  • 목적: 에이전트 실행을 일시 중지하고 사람의 입력을 기다립니다.
  • 사용법: interrupt()를 호출하면 현재 상태가 저장되고 실행이 중단됩니다.
  • 재개: Command(resume=...)를 사용하여 중단된 지점부터 재개합니다.

Command(resume=...)

  • 목적: 중단된 실행에 대한 응답을 제공합니다.
  • 사용법: Command(resume={"approved": true})와 같이 재개 데이터를 전달합니다.
  • 동작: 제공된 데이터는 interrupt() 호출 지점에서 반환됩니다.

승인 워크플로

  1. 중단 지점 설정: 워크플로우에서 승인이 필요한 지점에 interrupt()를 삽입합니다.

    from langgraph.types import interrupt
    
    approval = interrupt("이 작업을 승인하시겠습니까?")
    
  2. 재개 명령 보내기: 사용자 또는 외부 시스템이 Command(resume=...)를 보냅니다.

    from langgraph.types import Command
    
    command = Command(resume={"approved": True})
    
  3. 결과 처리: 재개 데이터를 기반으로 워크플로우를 계속 진행합니다.

    if approval.get("approved"):
        # 승인된 작업 수행
        pass
    else:
        # 거부 처리
        pass
    

4계층 오류 처리 전략

LangGraph는 다음 계층으로 오류를 관리합니다:

계층 1: 재시도

  • 설명: 일시적인 오류(네트워크 문제 등)에 대해 자동 재시도합니다.
  • 설정: @tool 데코레이터에 retry 매개변수를 사용합니다.

계층 2: 폴백

  • 설명: 재시도 실패 시 대체 동작을 정의합니다.
  • 사용법: fallback 매개변수를 사용하여 대체 함수를 지정합니다.

계층 3: 오류 전파

  • 설명: 처리할 수 없는 오류는 상위 핸들러로 전파됩니다.
  • 동작: 에이전트 실행이 중단되고 interrupt()가 호출됩니다.

계층 4: 수동 개입

  • 설명: 오류가 발생하면 사람이 직접 개입하여 문제를 해결합니다.
  • 방법: Command(resume=...)를 사용하여 수정된 데이터를 제공합니다.

예제 코드

from langgraph.graph import StateGraph
from langgraph.types import interrupt, Command

class AgentState:
    data: dict
    approval: dict

# 승인 노드
def require_approval(state: AgentState):
    approval = interrupt("승인 필요: 데이터 검증")
    return {"approval": approval}

# 실행 노드
def execute_task(state: AgentState):
    if state.approval.get("approved"):
        # 작업 실행
        print("작업 실행됨")
    else:
        print("작업 거부됨")
    return {}

# 그래프 구성
builder = StateGraph(AgentState)
builder.add_node("require_approval", require_approval)
builder.add_node("execute_task", execute_task)
builder.add_edge("require_approval", "execute_task")
graph = builder.compile()

# 실행 및 재개
graph.invoke({"data": {}})
# 중단 후 재개 명령
graph.invoke(Command(resume={"approved": True}))

주의 사항

  • interrupt()는 async 함수 내에서도 사용할 수 있습니다.
  • 재개 데이터는 반드시 JSON 직렬화 가능해야 합니다.
  • 오류 처리 전략은 프로젝트 요구사항에 맞게 조정하세요.
  • 이 스킬은 Claude Code, Cursor, Codex 등 LangGraph를 지원하는 모든 플랫폼에서 동일하게 작동합니다.

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

langchain-ai/deep-agents-core

INVOKE THIS SKILL when building ANY Deep Agents application. Covers create_deep_agent(), harness architecture, SKILL.md format, and configuration options.

langchain-ai/deep-agents-memory

INVOKE THIS SKILL when your Deep Agent needs memory, persistence, or filesystem access. Covers StateBackend (ephemeral), StoreBackend (persistent), FilesystemMiddleware, and CompositeBackend for routing.

langchain-ai/deep-agents-orchestration

INVOKE THIS SKILL when using subagents, task planning, or human approval in Deep Agents. Covers SubAgentMiddleware, TodoList for planning, and HITL interrupts.

langchain-ai/framework-selection

INVOKE THIS SKILL at the START of any LangChain/LangGraph/Deep Agents project, before writing any agent code. Determines which framework layer is right for the task: LangChain, LangGraph, Deep Agents, or a combination. Must be consulted before other agent skills.

langchain-ai/langchain-dependencies

INVOKE THIS SKILL when setting up a new project or when asked about package versions, installation, or dependency management for LangChain, LangGraph, LangSmith, or Deep Agents. Covers required packages, minimum versions, environment requirements, versioning best practices, and common community tool packages for both Python and TypeScript.

langchain-ai/langchain-fundamentals

Create LangChain agents with create_agent, define tools, and use middleware for human-in-the-loop and error handling.

langchain-ai/langchain-middleware

INVOKE THIS SKILL when you need human-in-the-loop approval, custom middleware, or structured output. Covers HumanInTheLoopMiddleware for human approval of dangerous tool calls, creating custom middleware with hooks, Command resume patterns, and structured output with Pydantic/Zod.

langchain-ai/langchain-rag

INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).

langchain-ai/langgraph-fundamentals

INVOKE THIS SKILL when writing ANY LangGraph code. Covers StateGraph, state schemas, nodes, edges, Command, Send, invoke, streaming, and error handling.

langchain-ai/langgraph-persistence

INVOKE THIS SKILL when your LangGraph needs to persist state, remember conversations, travel through history, or configure subgraph checkpointer scoping. Covers checkpointers, thread_id, time travel, Store, and subgraph persistence modes.

langchain-ai/swarm

Dispatches many independent items in parallel: create a table, fan out to subagents, aggregate results. One row = one unit of work.

관련 스킬