REZ: 기업을 위한 에이전트 기반 고객 서비스
요약
본 글은 기업의 고객 지원을 자동화하는 에이전트 REZ를 소개합니다. REZ는 웹사이트 URL만 입력받아 자체 크롤링으로 정보를 학습하고, 구조화된 지식 기반(Sanity)에 내용을 저장합니다. 이를 통해 24시간 출처가 명확한 답변을 제공하며, 모르는 정보는 사람이 검토하도록 이메일로 전달하여 정확성을 높입니다.
핵심 포인트
- 웹사이트 크롤링 및 학습을 통한 고객 지원 자동화
- Sanity 기반의 구조화된 지식 관리 시스템 활용
- 답변 출처 명시와 불확실한 내용은 사람에게 위임
이 제출물은 Sanity Challenge, Path One: 실제 콘텐츠를 조회하는 에이전트 배포하기에 대한 것입니다.
제가 만든 것
[
저는 기업을 위한 고객 지원 에이전트인 REZ를 만들었습니다.
온라인에서 무언가를 판매한다면, 이 과정은 익숙할 겁니다. 매일 같은 질문들이 받은 편지함으로 쏟아져 들어옵니다. "제 주문은 어디에 있나요?", "이걸 반품할 수 있나요?", "캐나다로 배송하나요?" 그래서 직접 답변하거나 하루 종일 받은 편지함을 지키는 사람에게 돈을 지불해야 합니다. 짜증나는 부분은 그 답변들이 이미 웹사이트에 있다는 것입니다.
그래서 저는 웹사이트를 읽어주고, sanity가 구동하는 구조화된 지식 기반(structured knowledge base)에 정보를 관리해주는 에이전트를 만들었습니다.
사용자가 웹사이트 링크를 붙여 넣기만 하면 됩니다. REZ는 페이지들을 읽고 사용자의 제품, 가격 및 정책을 학습합니다. 그런 다음 사이트에 추가할 수 있는 코드 한 줄을 제공합니다. 이 코드를 통해 채팅 버블(chat bubble)이 밤낮으로 고객에게 답변하며, 모든 답변은 출처가 된 페이지를 보여줍니다.
REZ는 모르는 것이 있을 때는 지어내지 않습니다. 환불, 불만 사항 등 확신하지 못하는 것은 고객의 세부 정보를 받아 팀원들에게 전체 대화 내용을 이메일로 보냅니다.
기업에게 이것이 의미하는 바는 다음과 같습니다:
- 반복적인 이메일 감소, 따라서 팀은 실제로 사람이 필요한 문제에 시간을 할애할 수 있습니다.
- 고객들은 월요일을 기다릴 필요 없이 새벽 3시에도 답변을 받습니다.
- REZ가 제공하는 모든 답변을 읽고 편집할 수 있습니다.
- 지어낸 답변이 없습니다. 사이트에 없는 내용은 REZ가 그렇게 말하고 사용자에게 전달합니다.
데모
실시간 앱: https://rezagent.vercel.app
코드
GitHub logo Temitope15 / REZ
REZ는 사용자의 비즈니스를 학습하고 밤낮으로 고객에게 답변합니다. 처리할 수 없는 모든 것은 사용자에게 바로 전달됩니다.
REZ
REZ는 비즈니스가 하나의 스크립트 태그로 설치하는 고객 지원 에이전트입니다. 웹사이트 URL을 제공하면 다음 작업을 수행합니다:
- 자체 크롤러(sitemap + 링크, robots.txt 준수)를 사용하여 사이트를 읽습니다. 빈 JavaScript 셸 형태로 도착하는 페이지는 headless Chrome에서 렌더링되므로 React/Vue/Angular 사이트도 작동합니다.
- Gemini를 사용하여 작고 단일 주제의 답변을 구조화된 Sanity 문서로 추출합니다. 모든 답변은 출처 URL을 유지합니다. 두 페이지가 의견이 다를 경우, 비즈니스가 검토하도록 해당 답변에 플래그가 지정됩니다.
- 추출된 문서를 기반으로 Sanity Context Knowledge Base를 구축하고 이를 Context MCP 엔드포인트를 통해 에이전트에 제공합니다.
- 임베디 가능한 위젯에서 고객에게 답변하며, 출처를 인용하고 추측하는 것을 거부합니다.
- 해결할 수 없는 모든 것은 에스컬레이션합니다: Sanity의 티켓 문서와 대화 기록 및 초안 답변이 포함된 비즈니스 이메일(SMTP)을 보냅니다.
- 보고: 도구 호출을 포함한 모든 대화는 Sanity Context에 저장됩니다.
제가 Sanity를 사용한 방법
REZ가 웹사이트를 읽을 때, 단순히 페이지들을 어딘가에 쏟아붓지 않습니다. 각 페이지를 하나의 주제로 작은 답변들로 분해하여, 해당 페이지와 함께 모든 답변을 Sanity의 문서로 저장합니다. Death Wish Coffee 사이트의 15개 페이지는
이 부분이 제가 가장 마음에 드는 부분입니다. 지식 기반(Knowledge Base)이 원본 웹사이트가 아닌 제 문서에서 구축되기 때문에, 소유자가 통제권을 유지할 수 있습니다. 그들은 대시보드에서 답변을 편집하고 '편집 반영(Push edits)' 버튼을 누르면 에이전트가 새로운 답변을 알게 됩니다. 답변을 비활성화하면 에이전트는 더 이상 그것을 사용하지 않습니다. Sanity는 또한 41개의 답변을 반품, 배송, 구독과 같은 주제별로 자체적으로 분류했습니다.
고객이 질문을 하면, 에이전트는 Context MCP 도구를 사용합니다. initial_context를 호출하여 지식 기반이 무엇을 다루는지 확인하고, knowledge_base_search를 사용하여 적절한 주제를 찾으며, knowledge_base_read를 사용하여 전체 답변을 읽습니다. 그런 다음 몇 문장으로 답하고 출처를 명시합니다. 저는 답변이 없는 경우에 대비하여 저만의 도구인 escalate_to_human을 추가했습니다.
모든 것이 @sanity/client 코드를 통해 이루어지므로, 비즈니스가 양식을 통해 가입하면 제가 아무것도 건드리지 않아도 작동하는 지식 기반을 얻게 됩니다. 또한 모든 대화는 Sanity Insights에 저장되어 소유자가 REZ가 어떤 질문에 어려움을 겪었는지, 그리고 다음에 무엇을 추가해야 하는지 확인할 수 있습니다.
단순 키워드 검색은 '커피를 반품할 수 있나요?'라는 질문에 전체 도움말 페이지로 답변할 것입니다. 하지만 REZ는 적용되는 하나의 규칙(커피는 반품할 수 없다는 예외 포함)으로 답변하고, 어디서 찾았는지 알려줍니다.
아직 구현되지 않은 기능: 무료 플랜은 두 개의 지식 기반을 허용하므로, 추가 비즈니스는 더 단순한 검색 방식으로 돌아가야 합니다. 팀이 에스컬레이션에 응답할 때, 답변은 채팅으로 다시 들어오는 것이 아니라 이메일로 전송됩니다.
Sanity 프로젝트 상세 정보
- 프로젝트 ID:
wtwf6oam - 데이터셋(Dataset):
production(공개). 아티클 찾아보기 - 지식 기반(Knowledge Base): Death Wish Coffee 지원 (
kb9xFlYaxFwv),knowledgeArticle문서를 데이터셋 소스로 사용 - Context MCP 엔드포인트:
rez - 문서 유형(Document types):
business,sourcePage,knowledgeArticle,ticket}<tool_call|>jsonjsonThe user wants me to continue translating a technical blog post segment. I must adhere strictly to the provided rules: 100% information preservation, keeping professional terms with English acronyms/names (e.g., Knowledge Base), maintaining the original structure and tone, and outputting only a JSON object. The title should be kept as it was previously translated.json```json[{
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기