픽셀에서 처방까지: LangGraph로 자율 의료 예약 에이전트 구축

발행: (2026년 5월 23일 AM 10:15 GMT+9)
7 분 소요
원문: Dev.to

출처: Dev.to

우리는 모두 그런 경험을 해봤습니다. 혈액 검사 결과를 받고 “알라닌 아미노전이효소” 옆에 무서운 빨간 화살표가 표시되면 바로 WebMD의 무한 루프에 빠지게 되죠. 그런데 AI가 결과를 설명하는 데 그치지 않고 실제로 무언가를 해준다면 어떨까요?

AI 에이전트 세계에서는 단순 챗봇을 넘어 에이전시 워크플로우 시대로 진입하고 있습니다. 오늘은 LangGraph, Playwright, OpenAI Functions를 활용해 프로덕션 수준의 헬스케어 에이전트를 구축합니다. 이 에이전트는 단순히 대화만 하는 것이 아니라 실험실 보고서를 분석하고, 이상 징후를 식별하며, 자동으로 예약 포털을 탐색해 적절한 전문의와의 약속을 잡아줍니다.

자율 헬스케어 에이전트와 브라우저 자동화를 활용하면 진단 데이터와 임상 행동 사이의 격차를 메울 수 있습니다. 이러한 패턴이 기업 수준으로 어떻게 확장되는지 궁금하다면, 이번 구현에 큰 영감을 준 WellAlly Tech Blog의 고급 아키텍처 가이드를 꼭 확인해 보세요.

선형 체인과 달리 헬스케어 워크플로우는 루프와 조건문이 얽혀 있습니다. 검사 보고서가 정상이라면 에이전트는 작업을 중단하고, 이상이 발견되면 의사를 찾아야 합니다. 그래서 LangGraph가 완벽한 도구가 됩니다—에이전트 로직을 상태 머신으로 정의할 수 있기 때문이죠.

graph TD
    A[Start: Receive Lab Report] --> B{Analyze Report}
    B -- No Anomalies --> C[Notify User: All Clear]
    B -- Abnormal Indicators Found --> D[Search Specialist Database]
    D --> E[Check Availability]
    E -- Found Slot --> F[Execute Booking via Playwright]
    E -- No Slot --> G[Retry/Backoff]
    F --> H[Confirm Appointment to User]
    C --> I[End]
    H --> I

이 고급 튜토리얼을 따라하려면 다음이 필요합니다.

  • LangGraph: 상태 기반 오케스트레이션을 위해
  • OpenAI GPT‑4o: 추론 및 함수 호출을 위해
  • Playwright: 예약 프로세스 자동화를 위해
  • Python 3.10+

단계 1: 에이전트 상태 정의

LangGraph에서 State는 그래프의 모든 노드가 읽고 쓸 수 있는 공유 메모리입니다.

from typing import TypedDict, List, Annotated
from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    report_text: str
    anomalies: List[str]
    specialist_type: str
    appointment_status: str
    requires_action: bool

우리는 OpenAI의 함수 호출을 이용해 원시 의료 텍스트에서 구조화된 데이터를 추출합니다. LLM이 환자가 의사를 만나야 하는지 판단하도록 합니다.

import openai

def analyze_report_node(state: AgentState):
    # System prompt to identify medical anomalies
    prompt = f"Analyze this lab report: {state['report_text']}. Identify abnormalities."

    # In a real scenario, use structured output/Pydantic
    response = openai.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        functions=[{
            "name": "report_findings",
            "parameters": {
                "type": "object",
                "properties": {
                    "anomalies": {"type": "array", "items": {"type": "string"}},
                    "specialist": {"type": "string"}
                }
            }
        }]
    )

    # Update state
    findings = response.choices[0].message.function_call.arguments
    return {
        "anomalies": findings['anomalies'],
        "specialist_type": findings['specialist'],
        "requires_action": len(findings['anomalies']) > 0
    }

레거시 병원 포털에 API가 없을 때는 Playwright를 사용합니다. 이 노드는 사람처럼 예약 시스템을 클릭하는 과정을 시뮬레이션합니다.

from playwright.sync_api import sync_playwright

def book_appointment_node(state: AgentState):
    if not state["requires_action"]:
        return {"appointment_status": "No appointment needed."}

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto("https://hospital-portal.example.com/booking")

        # Select department based on specialist_type extracted by LLM
        page.select_option("#dept-select", label=state["specialist_type"])
        page.click("#find-first-available")

        # Finalize booking
        page.click("button:has-text('Confirm')")
        booking_ref = page.inner_text("#confirmation-id")

        browser.close()
        return {"appointment_status": f"Booked! Ref: {booking_ref}"}

이제 노드들을 연결합니다. conditional_edge가 바로 이 “에이전시”를 가능하게 합니다.

workflow = StateGraph(AgentState)

# Add Nodes
workflow.add_node("analyzer", analyze_report_node)
workflow.add_node("booker", book_appointment_node)

# Set Entry Point
workflow.set_entry_point("analyzer")

# Logic: If anomalies found -> book, else -> END
workflow.add_conditional_edges(
    "analyzer",
    lambda x: "booker" if x["requires_action"] else END
)

workflow.add_edge("booker", END)

# Compile
app = workflow.compile()

헬스테크 에이전트를 구축하는 것은 멋진 코드만을 의미하지 않습니다. 신뢰성과 안전성이 핵심이죠. 취미 프로젝트에서 프로덕션 시스템으로 전환할 때는 HIPAA 준수, “Human‑in‑the‑loop”(HITL) 체크포인트, 프롬프트 버전 관리 등을 반드시 고려해야 합니다.

기업 수준의 에이전시 패턴과 “예약 가능한 슬롯이 없음” 혹은 “다중 에이전트 합의”와 같은 의료 AI 특수 상황을 다루는 방법에 대해 깊이 있게 알고 싶다면 WellAlly Tech Blog의 종합 가이드를 확인해 보세요. 생명(또는 일정)이 걸린 상황에서도 실패하지 않는 견고한 AI 시스템을 만드는 인사이트가 가득합니다.

우리가 만든 시스템은 다음을 수행합니다.

  • 복잡한 의료 데이터를 이해합니다.
  • 의료 개입의 필요성을 논리적으로 판단합니다.
  • 실제 웹 인터페이스를 탐색해 행동합니다.

이것이 LangGraph와 Playwright를 결합했을 때의 힘입니다. 이제 우리는 더 이상 “챗봇”을 만드는 것이 아니라, 엔드‑투‑엔드 워크플로우를 수행할 수 있는 디지털 직원(디지털 직원)을 만들

0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.