인공지능 웹 앱 개발: 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)
prep()
→exec()
→post()
순서로 Node 실행shared_store
를 통해 Node 간 데이터 공유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 출력 품질 관리와 사용자 참여도 향상에 효과적임 (예: 유머 생성 시 부적절한 콘텐츠 필터링)