13장 — 휴먼 인 더 루프

휴먼 인 더 루프(Human-in-the-Loop, HITL) 패턴은 에이전트를 개발하고 배포할 때 핵심이 되는 전략입니다. 판단력, 창의성, 섬세한 이해력 같은 인간 고유의 인지 능력과 AI의 연산 능력 그리고 효율성을 의도적으로 결합합니다.

이러한 전략적 통합은 단순한 선택지가 아니라 필수 요건인 경우가 많다. 특히 AI 시스템이 중요 의사결정 과정에 점점 더 깊숙이 관여하는 상황에서는 더욱 그러하다.

핵심 원칙은 AI가 윤리적 경계 안에서 동작하고, 안전 프로토콜을 준수하며, 목표를 최대한 효과적으로 달성하도록 하는 데 있습니다. 복잡성·모호성·큰 위험이 따르는 분야에서 특히 중요한데, AI가 오류를 범하거나 잘못 해석하면 그 영향이 상당할 수 있기 때문입니다.

HITL은 AI를 인간을 대체하는 존재가 아니라, 인간의 역량을 강화하는 도구로 본다. 최종 목표는 인간과 AI 에이전트가 각자의 고유한 강점을 활용해, 어느 한쪽만으로는 이룰 수 없는 결과를 함께 만들어 내는 협력 생태계를 구축하는 데 있다.

구현 방식은 다양합니다. 인간이 검증자나 검토자 역할을 맡아 AI의 출력을 검수하거나, 인간이 AI의 동작을 직접 이끌며 실시간으로 피드백을 주거나 교정하거나, 더 복잡한 구성에서는 인간이 AI와 파트너로서 협업해 대화나 공유 인터페이스를 통해 함께 문제를 풀기도 합니다.

패턴 개요 — 여섯 가지 구성 요소

요소 내용
인간의 감독 AI 에이전트의 성능과 출력을 모니터링하는 활동. 로그 검토나 실시간 대시보드 등을 통해 지침 준수 여부를 확인하고 바람직하지 않은 결과를 방지한다
개입과 교정 AI 에이전트가 오류나 모호한 상황에 직면했을 때 인간의 개입을 요청할 수 있는 메커니즘. 인간 운영자가 오류를 바로잡고 누락된 데이터를 제공하거나 에이전트를 안내하며, 이 과정이 향후 에이전트 개선에도 반영된다
학습을 위한 인간 피드백 수집된 피드백이 AI 모델 개선에 활용된다. 대표적으로 RLHF 같은 방법론에서는 인간의 선호가 에이전트의 학습 방향에 직접 영향을 미친다
의사결정 증강 AI 에이전트가 분석과 추천을 제공하고 최종 결정은 인간이 내리는 방식. 완전 자율 대신 AI가 생성한 인사이트로 인간의 의사결정을 강화한다
인간-에이전트 협업 일상적인 데이터 처리는 에이전트가 맡고, 창의적 문제 해결이나 복잡한 협상은 인간이 담당한다
상위 팀 이관 정책 에이전트가 작업을 인간 운영자에게 언제, 어떻게 이관해야 하는지를 정하는 프로토콜. 에이전트의 능력 범위를 벗어난 상황에서 오류를 방지한다

9장에서 본 RLHF가 여기서는 학습 방법이 아니라 인간 개입의 한 형태로 다시 등장합니다.

HITL을 도입하면 완전 자율이 불가능하거나 허용되지 않는 민감한 분야에서도 에이전트를 활용할 수 있고, 순환 구조(feedback loop)를 통해 시스템을 지속적으로 개선할 기반도 마련됩니다. 예시가 설득력 있습니다.

  • 금융: 대규모 기업 대출의 최종 승인에는 인간 대출 담당자가 경영진의 자질 같은 정성적 요소를 평가해야 한다.
  • 법률: 정의와 책임이라는 핵심 원칙에 따라, 양형처럼 복잡한 도덕적 추론이 필요한 중대한 결정에서는 인간 판사가 최종 권한을 보유해야 한다.

주의 사항 — 이 패턴의 정직한 한계

이 장에서 가장 값진 대목입니다. HITL은 여러 장점이 있지만 중요한 주의 사항도 있습니다.

① 확장성이 낮다

그중 가장 큰 것은 확장성이 낮다는 점이다. 인간의 감독은 높은 정확도를 제공하지만, 수백만 건의 작업을 사람이 처리할 수는 없으므로 근본적인 트레이드오프가 발생하기에, 대규모 처리에는 자동화를, 정확도가 필요한 곳에는 HITL을 결합하는 하이브리드 접근이 필요한 경우가 많다.

② 인간 운영자의 전문성에 크게 좌우된다

예를 들어 AI가 소프트웨어 코드를 생성할 수는 있지만 미묘한 오류를 정확히 찾아내고 올바른 수정 방향을 제시할 수 있는 것은 숙련된 개발자뿐이다. 이러한 전문성 요구는 HITL을 활용해 학습 데이터를 생성할 때도 마찬가지인데, 고품질 데이터를 만들어 내는 방식으로 AI를 교정하려면 어노테이터에게 별도의 훈련이 필요할 수 있다.

③ 개인정보 보호 문제가 생긴다

민감한 정보를 인간 운영자에게 노출하기 전에 철저히 비식별화해야 하는 경우가 많아 프로세스가 한층 복잡해집니다.

11장에서 자기 평가의 맹점을 짚었듯, 이 장은 사람을 넣는 것도 공짜가 아니라는 점을 짚습니다.

실제 적용과 활용 사례

사례 AI가 하는 일 → 사람이 맡는 지점  
콘텐츠 모더레이션 대량의 콘텐츠를 빠르게 필터링해 위반 사항(혐오 발언·스팸)을 찾아냄 → 모호하거나 경계선에 있는 콘텐츠는 인간 모더레이터에게 이관  
자율 주행 대부분의 주행 작업을 자체 수행 → 극단적 기상 조건, 이례적인 도로 상태 등에서는 인간 운전자에게 제어권을 넘김  
금융 사기 탐지 패턴 기반으로 의심스러운 거래를 표시 → 고위험이거나 모호한 경보는 인간 분석가가 추가 조사 후 최종 판단  
법률 문서 검토 수천 건의 문서를 빠르게 스캔·분류해 관련 조항이나 증거를 찾아냄 → 인간 법률 전문가가 정확성·맥락·법적 함의를 확인  
고객 지원(복잡한 문의) 일상적인 문의를 처리 → 문제가 너무 복잡하거나 감정적으로 민감하거나, AI가 공감까지 제공하기 어려우면 인간 담당자에게 넘김  
데이터 레이블링과 어노테이션 인간이 이미지·텍스트·오디오를 정확하게 레이블링해 AI가 학습하는 정답 데이터를 제공. 모델이 발전함에 따라 지속적으로 이루어지는 과정
생성형 AI 개선 마케팅 문구, 디자인 아이디어 등 창작 콘텐츠 생성 → 인간 편집자나 디자이너가 출력을 검토하고 개선  
자율 네트워크 KPI와 식별된 패턴으로 네트워크 문제와 트래픽 이상을 예측 → 고위험 경보 대응 같은 중대한 결정은 인간 분석가에게 이관  

휴먼 온 더 루프 — 정책은 사람이, 실행은 AI가

이 장에서 가장 실무적으로 쓸모 있는 변형입니다.

“휴먼 온 더 루프(Human-on-the-loop)” 는 이 패턴의 변형으로, 인간 전문가가 상위 정책을 정하면 즉각적인 조치는 AI가 맡아 그 정책을 실행하는 방식이다.

① 자동 금융 거래 시스템

인간 금융 전문가가 전반적인 투자 전략과 규칙을 설정합니다.

포트폴리오를 기술주 70%, 채권 30%로 유지하고,
한 기업에 5% 이상 투자하지 않으며,
매입가 대비 10% 이상 하락한 주식은 자동으로 매도한다.

이후 AI가 실시간으로 주식 시장을 모니터링하면서, 사전에 정한 조건이 충족될 때 즉시 거래를 실행합니다.

인간 운영자가 수립한 느리지만 전략적인 정책에 따라, AI가 즉각적이고 빠른 동작을 처리하는 구조다.

② 현대식 콜센터

인간 관리자가 고객 응대를 위한 상위 정책을 수립합니다.

'서비스 장애'를 언급하는 전화는 즉시 기술 지원 전문가에게 넘긴다.
고객의 목소리에서 강한 불만이 감지되면
인간 상담원에게 바로 연결해 준다고 안내한다.

AI 시스템이 초기 고객 응대를 담당하면서 고객의 요구를 실시간으로 듣고 해석하며, 관리자의 정책을 자율적으로 실행해 개별 건마다 인간이 개입할 필요 없이 전화를 즉시 넘기거나 이관을 제안합니다.

앞서 지적한 확장성 문제에 대한 답이 바로 이것입니다. 사람이 모든 건을 보는 대신 규칙을 정하는 자리로 이동하는 것입니다.

ADK 실습 — 이관 도구를 갖춘 지원 에이전트

이 기능은 ADK에만 있는 것이 아니며, 다른 주요 프레임워크에서도 유사한 기능을 도입했다. 예를 들어 LangChain도 이러한 상호작용을 구현하는 도구를 제공한다.

from google.adk.agents import Agent
from google.adk.tools.tool_context import ToolContext
from google.adk.callbacks import CallbackContext
from google.adk.models.llm import LlmRequest
from google.genai import types
from typing import Optional

# 도구 플레이스홀더(필요 시 실제 구현으로 교체)
def troubleshoot_issue(issue: str) -> dict:
    return {"status": "success", "report": f"Troubleshooting steps for {issue}."}

def create_ticket(issue_type: str, details: str) -> dict:
    return {"status": "success", "ticket_id": "TICKET123"}

def escalate_to_human(issue_type: str) -> dict:
    # 실제 시스템에서는 인간 담당자 대기열로 전달하는 처리가 들어간다
    return {"status": "success", "message": f"Escalated {issue_type} to a human specialist."}

technical_support_agent = Agent(
    name="technical_support_specialist",
    model="gemini-2.0-flash-exp",
    instruction="""
You are a technical support specialist for our electronics company.

FIRST, check if the user has a support history in state["customer_info"]["support_history"].
If they do, reference this history in your responses.

For technical issues:
1. Use the troubleshoot_issue tool to analyze the problem.
2. Guide the user through basic troubleshooting steps.
3. If the issue persists, use create_ticket to log the issue.

For complex issues beyond basic troubleshooting:
1. Use escalate_to_human to transfer to a human specialist.

Maintain a professional but empathetic tone. Acknowledge the
frustration technical issues can cause, while providing clear steps
toward resolution.
""",
    tools=[troubleshoot_issue, create_ticket, escalate_to_human]
)

escalate_to_human이 HITL 설계의 핵심 요소입니다. 복잡하거나 민감한 사안이 인간 전문가에게 전달되도록 합니다. 도구 목록에 이관 도구를 하나의 도구로 나란히 놓는 것이 요점입니다.

여기에 개인화를 위한 콜백이 더해집니다.

def personalization_callback(
        callback_context: CallbackContext, llm_request: LlmRequest
) -> Optional[LlmRequest]:
    """LLM 요청에 개인화 정보를 추가한다."""
    # 상태에서 고객 정보를 가져온다
    customer_info = callback_context.state.get("customer_info")
    if customer_info:
        customer_name = customer_info.get("name", "valued customer")
        customer_tier = customer_info.get("tier", "standard")
        recent_purchases = customer_info.get("recent_purchases", [])

        personalization_note = (
            f"\nIMPORTANT PERSONALIZATION:\n"
            f"Customer Name: {customer_name}\n"
            f"Customer Tier: {customer_tier}\n"
        )
        if recent_purchases:
            personalization_note += f"Recent Purchases: {', '.join(recent_purchases)}\n"

        if llm_request.contents:
            # 첫 번째 콘텐츠 앞에 시스템 메시지로 추가한다
            system_content = types.Content(
                role="system", parts=[types.Part(text=personalization_note)]
            )
            llm_request.contents.insert(0, system_content)

    return None   # 수정된 요청을 이어서 처리하도록 None을 반환한다

이 아키텍처의 핵심 특징은 전용 콜백 함수로 정교한 개인화를 구현한다는 점이다. LLM에게 요청을 보내기 전에 이 함수는 고객 이름, 등급, 구매 이력 등 고객별 데이터를 에이전트의 상태에서 동적으로 가져온다. 이 정보는 시스템 메시지로 프롬프트에 추가되어, 에이전트가 사용자의 이력을 바탕으로 맞춤형 응답을 하게 한다.

정리

휴먼 인 더 루프란 무엇인가

고도화된 LLM을 포함한 AI 시스템은 미묘한 판단, 윤리적 추론, 복잡하고 모호한 맥락을 깊이 이해해야 하는 작업에서 종종 한계를 보입니다. 완전 자율 AI를 고위험 환경에 배포하면 상당한 위험이 따르는데, 오류가 심각한 안전·재정·윤리적 문제로 이어질 수 있기 때문입니다. 따라서 중대한 의사결정 과정에서 자동화에만 의존하면 신중하지 못한 결과를 낳는 경우가 많으며, 시스템 전체의 성능과 신뢰를 떨어뜨릴 수 있습니다.

왜 사용하는가?

HITL 패턴은 AI 워크플로에 인간의 감독을 전략적으로 통합하여 이 문제를 해결하는 표준화된 접근법입니다. 연산량이 많은 작업과 데이터 처리는 AI가 맡고, 핵심적인 검증과 피드백·개입은 인간이 담당하는 서로 보완하는 협력 구조를 만듭니다. 이를 통해 AI의 행동이 인간의 가치와 안전 프로토콜에 부합하도록 하며, 인간의 피드백을 바탕으로 지속적으로 학습함으로써 시스템의 역량도 높아집니다.

언제 사용해야 하는가?

의료, 금융, 자율 시스템 등 오류가 심각한 안전·윤리·경제적 손실을 초래하는 분야에 AI를 배포할 때 이 패턴을 사용한다. 콘텐츠 모더레이션이나 복잡한 고객 지원 이관처럼 LLM만으로는 확실히 처리하기 어려운, 모호하고 미묘한 작업에도 반드시 필요하다. 레이블 데이터로 AI 모델을 지속적으로 개선하거나, 생성형 AI의 출력을 특정 품질 기준에 맞게 다듬고자 할 때 HITL을 활용한다.

핵심 정리

  • HITL은 AI 워크플로에 인간의 지능과 판단력을 통합한다.
  • 이 패턴은 복잡하거나 위험 부담이 큰 시나리오에서 안전성, 윤리성, 효과를 높이는 데 중요하다.
  • 핵심 요소로는 인간의 감독, 개입, 학습을 위한 피드백, 의사결정 증강이 있다.
  • 에이전트가 인간에게 작업을 넘겨야 할 시점을 판단하려면 상위 팀 이관 정책이 반드시 필요하다.
  • HITL을 통해 책임감 있는 AI 배포와 지속적인 개선이 가능하다.
  • 주요 단점은 태생적으로 확장성이 낮아 정확도와 처리량 사이에 트레이드오프가 생긴다는 점이며, 효과적으로 개입하려면 고도로 숙련된 도메인 전문가가 필요하다는 점이다.
  • 이 패턴을 구현하려면 데이터 생성을 위해 인간 운영자를 교육해야 하고, 민감 정보를 비식별화하여 개인정보를 보호해야 하는 등 운영상의 과제도 따른다.

마치며

에이전트 워크플로에 인간의 감독, 개입, 피드백을 통합하면 성능과 신뢰도를 크게 높일 수 있으며, 특히 복잡하고 민감한 분야에서 그 효과가 두드러집니다.

AI의 역량이 계속 발전하더라도 HITL은 책임감 있는 AI 개발의 초석으로 남는다. 지능형 시스템을 설계할 때 인간의 가치와 전문성이 중심에 자리 잡게 하기 때문이다.

참고 문헌