dev.to

Building an Open-Source Support Tool That Turns Your Docs into Reusable Knowledge

문서와 지원 답변을 재사용 지식으로 바꾸는 오픈소스 도구

answerLoops는 Discord, Slack, GitHub 등에서 들어오는 지원 질문을 모아 지식베이스를 참고한 답변 초안을 만듭니다. 문서에 없는 답변을 검토해 지식베이스에 추가하고 검색 결과를 확인하는 흐름도 제공합니다. 자동 답변은 기본적으로 꺼져 있습니다.

에디터 노트

수동 입력 답변이 저장 즉시 게시되고 검색된다는 점은 운영자가 지식의 정확성과 최신성을 관리해야 하는 부담을 분명히 드러냅니다. 원문은 답변을 추가하기 전 공개해도 되는 내용인지 확인하라고 안내하며, Notion 가져오기에는 별도 검토와 게시 단계가 있습니다. 반면 수동 입력 양식에는 초안 단계가 없습니다. 검색된 문서와 생성 답변을 따로 점검하는 방식은 답변이 틀렸을 때 원인을 좁히는 데 도움이 됩니다. 다만 검색 결과 확인은 답변의 정확성을 검증하지 않으며, 사용량 집계도 문서가 참고 자료로 제공됐다는 사실만 기록합니다. 댓글의 노후 문서 가중치 제안과 문서 출처 추적 질문은 이 관리 흐름의 남은 쟁점을 짚습니다. 원문에는 문서별 제품 버전 관리나 답변 출처를 추적해 문서를 내리는 기능이 제시되지 않았습니다.

AI 요약

CopilotKit 커뮤니티에서 Discord, GitHub, Slack 질문에 답하던 Nathan Tarbert는 답변과 팀의 지식을 재사용하는 오픈소스 도구 answerLoops를 만들고 있습니다. 이 도구는 여러 지원 채널의 질문을 한 대시보드에 모으고, 지식베이스를 참고해 답변 초안을 준비합니다. 티켓 처리에는 Mastra 에이전트가 초안을 작성하고 별도 에이전트가 답변의 신뢰도와 질문에 충분히 답했는지를 평가합니다. 자동 답변은 기본 설정에서 꺼져 있습니다. 관리자가 켜더라도 설정한 조건을 통과한 답변만 자동 전송하고, 나머지는 사람의 검토를 기다립니다.

웹사이트용 채팅 위젯은 CopilotKit으로 만들었으며 Mastra 지원 에이전트와 연결됩니다. 게시된 지식베이스 문서를 참고해 답변하고, 단계별 안내, 빠른 답변, 강조 문구, 링크 카드, 연락 옵션을 지원합니다. 답변 품질은 검색되는 지식에 달려 있으므로 answerLoops는 문서를 가져오는 기능뿐 아니라 지식을 추가하고 검토하는 절차도 제공합니다.

지식베이스에 답변 추가하기

관리자나 소유자는 질문과 답변을 직접 입력해 문서를 추가할 수 있습니다. 저장한 문서는 게시와 색인 작업을 거쳐 이후 질문에서 참고 자료로 검색됩니다. 이 입력 양식에는 초안 단계가 없으므로, 고객에게 공개해도 되는 답변을 작성해야 합니다. 문서를 추가해도 모델을 재학습하지 않습니다. 관련 질문이 들어왔을 때 에이전트가 검색할 참고 자료가 늘어납니다.

기존 자료는 문서 URL이나 사이트 크롤링, PDF·DOCX·Markdown·텍스트·CSV 파일, GitHub의 Markdown·MDX 파일, Notion 페이지와 데이터베이스에서 가져올 수 있습니다. Notion 자료는 공개 답변에 쓰기 전에 검토하도록 미게시 상태로 들어옵니다. 동기화 뒤에도 게시 여부는 유지됩니다.

티켓을 지식으로 바꾸기

해결한 지원 질문과 답변은 Promote to KB 기능으로 지식베이스 문서로 전환할 수 있습니다. 작성자는 원래 대화에만 맞는 계정별 정보가 들어 있지 않은지 확인하고, 다른 사용자에게도 적용되는 설명으로 다듬어야 합니다. 웹사이트 위젯은 해결된 티켓 원문이 아니라 게시된 지식베이스 문서를 검색하므로, 승격한 답변을 공유 지식베이스에 게시해야 위젯이 찾을 수 있습니다.

지식으로 답하지 못한 질문은 Review 탭에 모입니다. 쓸 만한 답변 초안이 있으면 검토의 시작점으로 제공하고, 없으면 답변이 없는 항목으로 표시합니다. 관리자는 질문과 답변을 수정한 뒤 승인해 지식베이스에 넣거나 거부할 수 있습니다. 승인 전에는 고객 대상 검색 결과에 포함되지 않습니다. 같은 질문이 다시 들어오면 별도 항목을 만들지 않고 횟수를 올리며, 자주 들어온 질문을 먼저 보여줍니다. 이 검토 대기열은 호스팅 요금제 중 Pro 이상에서 제공됩니다.

Knowledge Gaps 페이지에서는 신뢰도가 낮은 답변, 사람의 대응이 필요한 티켓, 관련 지식베이스 문서가 없는 해결 티켓을 확인합니다. 반복 질문은 횟수와 함께 묶여 표시됩니다. 티켓의 + KB 버튼을 누르면 질문과 기존 답변을 채운 수동 입력 양식이 열리고, 문서를 추가하면 티켓과 연결됩니다.

검색 결과와 사용량 확인

Knowledge coverage 탭은 문서를 출처별로 나누고 게시 상태와 검색 가능 여부를 보여줍니다. Try a customer question 입력란에서는 웹사이트 위젯과 같은 검색을 실행해 어떤 문서가 일치하는지, 또는 질문을 다루는 문서가 없는지 확인합니다. 작성자는 원래 질문과 몇 가지 변형을 입력해 새 문서가 검색되는지 확인할 수 있습니다. 이 검사는 검색 결과를 확인할 뿐 생성된 답변의 정확성을 보장하지는 않습니다. 답변이 검색 자료를 제대로 사용하고 질문에 답했는지는 별도로 검토해야 합니다. 일치하는 문서가 없으면 제품과 맞지 않을 수 있는 일반 지식으로 에이전트가 답할 수 있습니다.

문서 사용량은 답변이 실제로 생성될 때 해당 문서가 참고 자료로 제공됐는지를 셉니다. 웹사이트 답변과 티켓 초안이 포함되지만, 답변에 문서 내용을 그대로 인용했다는 뜻은 아닙니다. 검색과 시뮬레이션은 사용량에 반영되지 않습니다.

구현 구성

Mastra는 티켓 답변 초안과 웹사이트 대화 에이전트를 실행하며 채팅 에이전트의 대화 메모리도 담당합니다. CopilotKit은 사용자 정의 채팅 위젯의 기반입니다. answerLoops는 여기에 자료 가져오기, 미답변 질문 검토, 문서 게시, 티켓 관리 절차를 더합니다. 개발자는 GitHub 저장소와 설정 문서를 통해 코드를 살펴보거나 직접 실행할 수 있습니다.

dev.to 반응

  • @james0123 — 이걸 이제 발견했는데 흥미롭네요. AI 비서를 문서에 연결했다면 올바른 정보를 찾는지 어떻게 확인하는지 궁금합니다.
    • @nathan_tarbert — 중요한 점 하나는 지식베이스에 올바른 정보를 넣는 것입니다. 실제로 들어온 질문을 골라 어떤 문서가 검색되는지 확인합니다. 생성된 답변이 그럴듯하게 들리는지만 보지는 않습니다. answerLoops의 Knowledge coverage 탭은 웹사이트 위젯과 같은 검색을 실행해 일치하는 문서나 답변 범위가 없는 질문을 보여줍니다. 그런 다음 생성된 답변이 그 정보를 올바르게 사용하고 실제로 질문에 답하는지 따로 검토합니다. 빠진 내용이 있으면 지식베이스에 추가하고 질문을 다시 시험합니다.
    • @fliin_0788 — 그러면 플랫폼에서 누군가 지식 소스에 직접 추가할 수 있나요?
    • @nathan_tarbert — 맞습니다. 팀의 제품 전문가가 회의 기록의 메모를 추가하거나 직접 입력할 수 있습니다. 문서 참고 주소도 남겼습니다.
  • @luis_prott — AI가 엉터리 답을 내는 게 늘 걱정입니다. 잘못된 AI 답변을 고치면 다음 사람에게도 그 수정이 도움이 되도록 하는 방법이 있나요?
    • @nathan_tarbert — answerLoops에서는 자동 답변이 기본적으로 꺼져 있습니다. 일부 연동이나 GitHub 저장소에서 자동 답변을 켜기 전에 지식베이스를 기준으로 초안을 검토하고 실제 커뮤니티 질문을 어떻게 처리하는지 확인하겠습니다. 답변이 정확하다고 신뢰하는 과정이 중요합니다. 지식을 참고하는 답변은 한 에이전트가 초안을 쓰고 두 번째 에이전트가 신뢰도와 질문에 충분히 답했는지를 평가합니다. 기본 임곗값은 0.8이며 두 조건을 모두 통과해야 합니다. 그렇지 않으면 사람의 검토로 넘어갑니다. 점수가 정확성을 보장하지는 않습니다. Knowledge coverage 탭으로 검색되는 정보를 확인하고 빠진 내용을 고친 뒤 답변을 검토하겠습니다.
    • @luis_prott — 한번 써볼 만하겠네요. 직접 호스팅할 수 있나요?
    • @nathan_tarbert — 네. 직접 호스팅할 수 있고 원하는 LLM을 가져올 수 있으며 로컬 모델도 쓸 수 있습니다.
  • @morgan-123 — 공유해줘서 고맙습니다. Discord를 연결하고 지원 질문에 답하기 시작하려면 얼마나 어렵나요? 지원 질문은 Discord에서 오는데 팀이 아주 작아서 소스 코드에서 답을 찾아야 하면 시간이 많이 듭니다.
    • @nathan_tarbert — Discord 연결은 한 번 클릭으로 끝나도록 설계했습니다. 인증한 뒤 봇을 추가할 서버를 고르고 응답을 듣고 보낼 채널을 선택하면 됩니다. 사용해 본 뒤 의견을 들려주시면 좋겠습니다.
  • @andrew_osada — 로컬 LLM도 지원하나요? 지원한다면 권장하나요?
    • @nathan_tarbert — 로컬 LLM을 사용할 수 있습니다. 다만 가벼운 소형 모델은 답변 품질이 다를 수 있으니 먼저 조사해보겠습니다.
  • @steven0121 — 한동안 이런 도구가 필요했는데 공유해줘서 정말 고맙습니다.
    • @nathan_tarbert — 의견 고맙습니다, Steve. 정말 감사합니다.
  • @zender_h_97834 — 좋네요. 꼭 확인해보겠습니다. 기여도 하고 싶습니다.
    • @nathan_tarbert — 고맙습니다, Zender. GitHub 이슈에 도움이 필요하면 알려주세요. 도움이 된다면 이슈에 프런트엔드부터 백엔드까지 표시해뒀습니다.
  • @hajusef_908 — Circle을 지원하는 점이 좋네요. 꼭 써보겠습니다. 직접 호스팅할 수 있나요?
    • @nathan_tarbert — 의견 고맙습니다. 오픈소스라 직접 호스팅할 수 있고 무료로 쓸 수 있습니다. 유료 기능은 없습니다.
  • @mudassirworks — 수동 입력 양식에 초안 단계가 없다는 점이 기억에 남았습니다. 직접 쓴 답 하나가 틀리면 곧바로 검색 대상이 되고 위젯이 계속 자신 있게 인용할 수 있는데 아무도 알아차리지 못할 수 있습니다. 비슷한 지식베이스에서 저희를 괴롭힌 문제는 정보의 노후화였습니다. 각 문서에 작성 당시 제품 버전을 표시하고 검색할 때 오래된 문서의 가중치를 낮췄더니 자신 있게 내놓는 오래된 답변이 대부분 사라졌습니다. answerLoops는 어떤 문서가 답변의 출처였는지 기록해서 잘못된 문서를 추적하고 내릴 수 있나요?

원문: dev.to / 번역·요약: Trawling