보험사, 금융사, 사내 메뉴얼 등 문서를 참조하는 챗봇에서 RAG가 사용되는 경우가 많은데요,
다시 말해, 좋은 챗봇을 구축하는 일 또한 RAG개발에 수반되는 업무입니다.
이번 포스팅에서는 Rule Base 로 챗봇을 구축한 경험을 공유하고,
최근 AI Agent 개발에 쓰이는 LangGraph 를 간단하게 소개합니다.
(튜토리얼 코드는 없습니다.)
챗봇을 개발할 때, 공통적으로 요구받은 사항은 다음과 같습니다.
위 요구조건에 따라 if문을 사용하여 직접 코딩할 수도 있지만
채팅을 쉽게 구현할 수 있도록 돕는 스크립트나 프레임워크를 사용하면 더 쉽게 챗봇을 개발할 수 있습니다.
저는 텍스트 챗봇 개발에 Rivescript 를, 음성 챗봇에 JSGF 를 사용했습니다.
(음성 챗봇 관련 포스팅 : https://velog.io/@judy_choi/글또-음성-명령어-인식-라이브러리-소개-JSGF-Voice2Json-Rhasspy)
RiveScript와 JSGF (Java Speech Grammar Format)는 둘 다 자연어 처리에 사용되지만, 목적과 방식이 다릅니다.
다음은 각 스크립트 및 문법을 ChatGPT 가 정리 및 비교해 준 결과입니다.
요소 | RiveScript 📝 | JSGF (Java Speech Grammar Format) 🎤 |
---|---|---|
기능 | 패턴 기반 챗봇 스크립트 | 음성 인식을 위한 문법 정의 |
방식 | 정규식 + 룰 기반 | BNF(Backus-Naur Form) 문법 |
주요 역할 | 텍스트 기반 대화 응답 | 음성 인식 시스템의 명령 처리 |
언어 지원 | Python, JS, Java 등 | Java, CMU Sphinx, Kaldi, Rhasspy 등 |
인터넷 필요 여부 | 필요 없음 | 필요 없음 (음성 인식 엔진 필요) |
사용 예시 | 텍스트 챗봇, FAQ | 음성 명령어 정의 (예: "Turn on the light") |
✅ 역할:
✅ 예제 (RiveScript)
+ hello bot
- Hello, human!
+ my name is *
- Nice to meet you, <star>!
✔ +
→ 사용자의 입력 패턴
✔ -
→ 챗봇의 응답
✔ <star>
→ 와일드카드 (변수를 저장)
✅ 역할:
✅ 예제 (JSGF)
#JSGF V1.0;
grammar lights;
public <command> = (turn on | switch on | activate) the (light | lamp);
✔ grammar lights;
→ 문법의 이름
✔ public <command>
→ 공개된 명령어 정의
✔ (turn on | switch on | activate)
→ 가능한 입력 패턴
✔ (light | lamp)
→ "light" 또는 "lamp" 인식
비교 항목 | RiveScript 📝 | JSGF 🎤 |
---|---|---|
주요 목적 | 텍스트 챗봇 제작 | 음성 인식용 문법 정의 |
사용 환경 | 텍스트 기반 | 음성 인식 엔진과 함께 사용 |
입력 방식 | 정규식 기반 | BNF 문법 기반 |
응용 분야 | 고객지원 챗봇, 게임 NPC | 스마트홈, 음성 명령 제어 |
✔ 텍스트 챗봇을 만들고 싶다면 → RiveScript
✔ 음성 인식 시스템을 구축하고 싶다면 → JSGF
즉, RiveScript는 대화형 응답을 위한 스크립트, JSGF는 음성 인식 엔진을 위한 문법입니다! 🚀
개인적으로 rivescript 를 이용할 때에는 명령어가 들어왔을 때 매칭되는 함수를 호출할 때 편리했고,
JSGF는 미리 intent, entity, slot 을 지정해 두고
정해진 명령어가 들어왔을 때 각각의 intent, entity, slot 을 매칭시켜 추출할 때 편리했습니다.
만약 대화 내용을 기억해야 할 경우에는 rivescript 와JSGF 모두 메모리 기능을 따로 지원하지 않으므로
Redis 또는 RDBMS 를 연동해야 합니다.
최근에는 LangGraph 를 이용해 AI Agent 를 개발합니다.
기존 챗봇의 경우 FAQ 및 고객센터용 챗봇처럼 정해진 질문과 답변이 있고
패턴 매칭 방식을 이용해 가볍고 빠르게 예측 가능한 응답을 제공하였으나
최근에는 LangGraph 를 이용해 자율적이고 지능적인 의사결정이 가능한 챗봇 (주어진 목표를 스스로 해결)을 개발할 수 있습니다.
아래는 AI Agent 와 일반 챗봇(기존) 을 비교한 ChatGPT 답변입니다.
비교 항목 | 일반 챗봇 🤖 | AI Agent 🧠 |
---|---|---|
작동 방식 | 정해진 규칙, 스크립트 기반 | 자율적 의사결정, AI 기반 |
자연어 이해 (NLU) | 제한적 (정해진 패턴만 이해) | 강력한 이해 능력 (LLM 활용) |
상황 적응력 | 낮음 (예상 질문만 대응 가능) | 높음 (새로운 상황에 적응 가능) |
멀티태스킹 | 단일 태스크 수행 | 여러 개의 작업을 동시에 수행 가능 |
의사결정 능력 | 없음 (단순한 응답만 수행) | 있음 (자율적으로 해결책 찾음) |
상태 기억 | 제한적 (이전 대화 기억 어려움) | 강력한 메모리 기능 (장기 기억 가능) |
API 연동 | 단순한 API 호출 | 복잡한 API 조합 및 활용 가능 |
사용 사례 | FAQ 챗봇, 고객센터 봇 | AI 비서, 자동화된 상담사, 연구 보조 |
✅ 규칙 기반 (Rule-Based) 챗봇
✔ 예제 (RiveScript)
+ hello
- Hi there! How can I help you?
📌 "hello"라는 입력이 들어오면 항상 같은 응답을 반환
✅ 기본적인 API 연동 가능
✔ 작동 방식
사용자 입력 → 정해진 패턴 매칭 → 미리 정의된 응답 제공
🚨 새로운 질문이 들어오면 대응 불가능!
✅ 자율적인 의사결정 (LLM 활용)
✅ 멀티에이전트 협력 가능
✔ 예제 (LangGraph)
from langgraph.graph import StateGraph
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="gpt-4")
class ChatState:
def __init__(self, messages=None):
self.messages = messages or []
def ai_agent(state: ChatState):
response = llm(state.messages)
return ChatState(messages=state.messages + [response])
graph = StateGraph(ChatState)
graph.add_node("ai_agent", ai_agent)
graph.set_entry_point("ai_agent")
graph.set_finish_point("ai_agent")
state = ChatState(messages=["Can you summarize today's news?"])
result = graph.invoke(state)
print(result.messages[-1].content)
📌 자율적으로 질문을 이해하고 답변 생성 가능!
📌 기존 챗봇과 달리 API 호출, 문서 요약 등 다양한 작업 수행 가능
사용 사례 | 일반 챗봇 🤖 | AI Agent 🧠 |
---|---|---|
FAQ 챗봇 | 가능 (고정된 응답 제공) | 가능 (더 자연스러운 대화 가능) |
고객 지원 | 제한적 (간단한 질문 응답) | 복잡한 요청 처리 가능 |
AI 비서 | 불가능 | 가능 (작업 자동화, 일정 관리 등) |
문서 요약/검색 | 불가능 | 가능 (LLM 활용) |
자동화된 연구 분석 | 불가능 | 가능 (다양한 데이터 분석 및 학습) |
✅ 정해진 질문과 답변이 있는 챗봇 (FAQ, 고객센터)
✅ 가벼운 시스템을 원할 때
✅ 빠르고 예측 가능한 응답이 필요할 때
✅ 예제: RiveScript, Dialogflow(룰 기반 모드)
✅ 복잡한 자연어 이해 및 응답이 필요할 때
✅ 새로운 질문에도 대응할 수 있어야 할 때
✅ 여러 작업을 수행하는 AI가 필요할 때 (예: AI 비서, 자동화 챗봇)
✅ 예제: LangGraph, AutoGPT, ChatGPT API
1️⃣ FAQ 챗봇, 간단한 고객지원 챗봇 → 일반 챗봇 (RiveScript, Dialogflow 등)
2️⃣ AI 비서, 연구 보조, 복잡한 대화 관리 → AI Agent (LangGraph, AutoGPT 등)
즉, 단순한 패턴 매칭 챗봇이라면 일반 챗봇,
자율적인 AI 역할 수행이 필요하다면 AI Agent가 더 적합합니다! 🚀