HITL 챗봇 개발: PocketFlow로 AI 웹 앱 구현
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

인공지능 웹 앱 개발: HITL 챗봇 구현 (Part 1)

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

인공지능

대상자

- 대상: AI 웹 앱 개발에 관심 있는 Python 개발자

- 난이도: 중급~고급 (AI 워크플로우 설계 및 Python 프레임워크 사용 경험 필요)

핵심 요약

  • HITL(Human-in-the-Loop) 패턴을 통해 AI 출력의 품질을 인간이 직접 검토할 수 있는 챗봇 구현
  • PocketFlow라는 100줄의 경량 프레임워크를 사용해 AI 워크플로우를 모듈화 및 확장 가능하게 설계
  • Node-Flow 아키텍처를 기반으로 AI 호출, 사용자 승인, 결과 전송 등의 작업을 분리 및 연결

섹션별 세부 요약

1. HITL 챗봇의 개념 및 필요성

  • AI가 생성한 콘텐츠(예: 유머, 코딩 답변)의 적절성과 품질을 인간이 검토하는 HITL 패턴 설명
  • AI 출력 검토가 필요한 주요 시나리오: 유머 생성, 코딩 도움, 콘텐츠 필터링 등
  • 사용자 승인 없이 AI가 직접 출력하는 경우 발생할 수 있는 오류 예시 (예: 부적절한 유머)

2. Plain Python으로 구현한 문제점

  • 🍝 Spaghetti Code: 단순 while/if 구조로 복잡한 워크플로우 구현 시 코드 가독성 및 유지보수성 저하
  • 🧱 모듈화 실패: 입력 처리, AI 호출, 승인, 결과 전송 등의 로직이 서로 섞여 재사용성 부족
  • 🕸️ 확장성 제한: 새로운 스텝 추가(예: 부적절한 단어 필터링) 시 기존 구조 재구성 필요

3. PocketFlow 프레임워크 소개

  • 100줄의 경량 프레임워크로 AI 워크플로우를 모듈화확장 가능하게 설계
  • Node-Flow 아키텍처:

- Node: 특정 작업에 특화된 컴포넌트 (예: AI 호출, 승인 요청, 결과 전송)

- Shared Store: 모든 Node 간 공유되는 데이터 저장소 (예: shared_store 딕셔너리)

- Flow: Node 간 작업 순서 및 조건에 따른 실행 관리자

  • Node 클래스 구조:
  • class Node:
        def prep(self, shared): pass
        def exec(self, prep_res): pass
        def post(self, shared, prep_res, exec_res): pass
        def run(self, shared): p=self.prep(shared); e=self.exec(p); return self.post(shared,p,e)
  • Flow 실행 흐름:
  1. prep()exec()post() 순서로 Node 실행
  2. shared_store를 통해 Node 간 데이터 공유
  3. Flow 객체가 successors 맵을 통해 다음 Node로 전이 (예: "user_approves"SendResponseNode)

4. HITL 챗봇 예제 및 실행 흐름

  • AI 생성 → 사용자 승인 → 결과 전송의 기본 흐름:
  • user_topic_request = "Tell me a joke about cats."
    ai_suggested_joke = call_llm_for_joke(user_topic_request)
    approval = input(f"AI suggests: '{ai_suggested_joke}'. Tell this joke? (y/n): ")
    if approval.lower() == 'y':
        print(f"To Audience: {ai_suggested_joke}")
    else:
        print("Human said: Nope! That joke isn't hitting the mark.")
  • 예시 시나리오:

- AI: "Why did the chicken cross the playground? To get to the other slide!"

- 사용자 승인 → 출력

- AI: "Why did the tomato turn red? Because it saw the salad dressing! But also, all vegetables are boring."

- 사용자 거부 → 재생성 → "What do you call a sad strawberry? A blueberry!"

결론

  • PocketFlow를 사용하면 복잡한 AI 워크플로우를 모듈화하여 확장 및 재사용 가능하게 설계 가능
  • Node-Flow 아키텍처를 통해 AI 호출, 사용자 승인, 결과 전송 등의 작업을 분리 및 조건에 따라 실행 순서를 관리
  • HITL 패턴은 AI 출력 품질 관리사용자 참여도 향상에 효과적임 (예: 유머 생성 시 부적절한 콘텐츠 필터링)