아동 언어발달 챗봇 만들기 도전!

소개

아동 언어발달에 대한 질문에 자동으로 응답해주는 카카오톡 챗봇을 만들었습니다. 저는 현재 아동 대상의 언어치료 분야에서 DTx 효과성 검증을 개인 연구로 진행하고 있고, 곧 대규모 실험을 진행해야 하는 상황입니다. 혼자서 실험 참여자 분들의 다양한 질문에 답을 하고 관리하는 일이 쉽지 않을 것으로 예상하고 있고, 이 부분의 해결 가능성을 탐색해보고자 하였습니다.

진행 방법

  • 사용 도구:

    • Dify: 지식 기반(Q&A 문서) 업로드 및 채팅 플로우 설계 도구로 사용했습니다.

    • Claude code: 응답처리 로직을 Android 장치에 배포하는 데 사용했습니다.

      • 챗봇 시스템의 응답 처리 로직은 스터디장님께서 공유해주신 코드를 그대로 사용했습니다.

    • 메신저봇R: 카카오톡 메시지를 수신하고 응답을 전달하는 Android용 메신저 자동응답 앱입니다.

  • 동작 방식:

    • 'Dify연결'을 입력하면 30분 동안 봇에게 질문할 수 있습니다.

    • 카카오톡에 질문을 입력합니다.
      예: "2세 아동의 언어발달을 돕기 위해 부모가 해야 할 것?"

    • 메신저봇R이 카카오톡 알림을 감지하고, Dify의 지식 기반에서 관련 정보를 검색하여, 질문에 대한 답변을 생성합니다.

    • 생성된 답변이 메신저봇R을 통해 다시 카카오톡에 전송됩니다.

  • 진행 과정에서 겪은 문제와 해결책:

    • 업로드한 지식에서 답변하지 않는 문제 - Dify 채팅 플로우에 '지식 검색' 노드를 추가하고 LLM 노드에 '컨텍스트'를 추가하였습니다.

      프로세스 단계를 보여주는 흐름도
      한국의 LMM 앱 스크린 샷
    • 메신저봇R이 실행되지 않는 문제 - 메모리 재설정, 안되면 재설치 해보라고 조언 주셨는데 제 경우는 폰을 껐다가 켰더니 해결되었습니다.

    • 배포 성공 후 응답을 하지 않는 문제 - 알고보니 Dify 채팅 플로우를 [게시하기] 하지 않아서 생긴 문제였습니다.

    • 초기에 응답 메시지의 포맷이 좀 이상했었는데, 현우님 코드가 커서에서 줄바꿈이 되지 않고 보여서, 가독성을 높이기 위해 클코에서 지시했던 프롬프트로 인해 클로가 '맘대로' 코드를 수정해서 생긴 문제였습니다. 😭

  • 이 문제들을 모두 극복하고 드디어 성공한 화면입니다.

    한국어 문자 메시지의 스크린 샷
  • 클로드 코드 커스텀 커멘트 생성으로 간편한 배포 (진경님의 발표 참고)

    • 처음에 복잡한 명령어 체계를 알려줘서 간단하게 수정해보았습니다.

      • node .claude/commands/deploy-bot.js

    • claude code의 plan mode에서 질문했고, 4가지 제안 중 claude code에 적합한 방법은 npm 스크립트라고 claude가 제안해서 2번 방법으로 생성했습니다.

> 더 간단하게 만들 수 있어?

● 네, 더 간단하게 만들 수 있는 여러 방법을 제안하겠습니다.
  ⎿  User rejected Claude's plan:
     ╭──────────────────────────────────────────────────╮
     │ 커스텀 명령어를 더 간단하게 사용하도록 개선:     │
     │                                                  │
     │ 1. 배치 파일 생성 (가장 간단)                    │
     │   - deploy.bat 생성: 단순히 deploy 입력으로 실행 │
     │   - d.bat 생성: 더 짧게 d 입력만으로 실행        │
     │ 2. package.json에 npm 스크립트 추가              │
     │   - npm run deploy: npm 명령으로 실행            │
     │   - npm run d: 짧은 별칭                         │
     │ 3. PowerShell 별칭 설정 (선택사항)               │
     │   - PowerShell 프로필에 별칭 추가                │
     │   - deploy-bot 명령어로 어디서나 실행            │
     │ 4. 자동 감지 기능 강화                           │
     │   - 가장 최근 수정된 봇 파일 자동 선택           │
     │   - 현재 디렉토리 기반 자동 감지                 │
     │                                                  │
     │ 실행 방법 비교:                                  │
     │ - 현재: node .claude/commands/deploy-bot.js      │
     │ - 개선 후: deploy 또는 d 또는 npm run deploy     │
     ╰──────────────────────────────────────────────────╯
● ✅ npm 명령어 설정 완료!

  이제 다음과 같은 간단한 명령어를 사용할 수 있습니다:

  📱 사용 가능한 명령어:

  # 현재 열린/최근 수정된 봇 파일 자동 배포
  npm run deploy

  # 더 짧은 명령어 (같은 기능)
  npm run d

  # 특정 봇 직접 배포
  npm run deploy:dify    # DifyBot 배포
  npm run deploy:per     # PerBot 배포

  실행 예시:

  npm run deploy

  이제 긴 경로를 입력할 필요 없이 간단하게 봇을 배포할 수 있습니다!        
  • 추가 실험 - Dify 점수 임계값 조정 (0 → 0.5)

    • 점수 임계값은 '검색 결과의 최소 유사도 점수'이며, 값이 높을수록 더 관련성 높은 결과만 반환한다고 합니다.

    • 초기 설정값을 0으로 두었을때와 0.5로 조정했을 때 답변이 달라지고, 수치를 높였을 때 조금 더 체계적이고 전문적인 답변을 주는 것 같습니다.

      한국어가있는 한국 앱의 스크린 샷
질문: 난독증은 어떻게 확인해?
점수 임계값 = 0 일때 답변
---
💬 난독증을 확인하기 위해서는 전문가에게 진단을 받는 것이 가장 확실한 방법입니다. 일반적으로 언어와 읽기 쓰기 능력에 있어서 동료나 동년배에 비해 뚜렷하게 뒤떨어지는 경우에 난독증 의심을 할 수 있습니다. 

경험적으로, 아이들이 읽기와 쓰기를 배우는 초기 단계에서 약간의 문제는 정상적인 경우가 많지만, 계속해서 독서나 철자에 어려움을 겪거나, 단어를 이해하고 기억하는데 문제가 있다면 난독증이 있을 수 있습니다. 

그러나, 난독증은 아이의 지능이나 노력과는 무관한 문제입니다. 오히려, 아이들은 일반적으로 보통의 학습 방법으로는 어려움을 겪지만, 특별한 학습 전략과 지원을 통해 성공적으로 학습할 수 있습니다. 

따라서 아이가 읽기와 쓰기에 어려움을 겪는다면, 가능한 한 빨리 전문가의 도움을 받는 것이 좋습니다. 이를 통해 아이에게 가장 적합한 학습 전략을 찾아, 아이의 학습 능력을 최대한 발휘할 수 있도록 도울 수 있습니다.
점수 임계값 = 0.5 일때 답변
---
💬 난독증을 확인하는 방법은 몇 가지 단계를 거칩니다.

1. 초기 관찰: 부모나 교사가 아이의 학습 진행 상황을 주시하며 읽기나 쓰기에 어려움을 보이는지 관찰합니다. 아이가 읽는데 오랜 시간이 걸리거나, 단어를 자주 놓치거나 잘못 읽는 경우, 난독증의 가능성을 고려해볼 수 있습니다.

2. 전문가 진단: 위와 같은 증상이 발견되면, 아이를 심리학자, 언어치료사, 또는 교육 전문가에게 보내어 평가를 받습니다. 그들은 표준화된 테스트를 통해 아이의 읽기, 쓰기, 철자, 그리고 언어 이해 능력을 평가합니다.

3. 추가 평가: 난독증은 다른 학습 장애와 함께 나타나는 경우가 많기 때문에, 전문가들은 종종 ADHD(주의력결핍 과다행동장애)나 공황장애 등 다른 잠재적인 문제들도 평가합니다.

4. 결과 분석: 모든 평가가 완료되면, 전문가들은 아이의 전반적인 능력과 테스트 점수를 비교하여 난독증 여부를 판단합니다.

5. 지속적인 모니터링: 난독증은 일시적인 문제가 아니므로, 아이의 학습 진행 상황을 지속적으로 모니터링하며 필요한 지원을 제공합니다.

이러한 과정을 통해 난독증을 확인하게 됩니다. 하지만 난독증 진단은 항상 전문가에 의해 이루어져야 하며, 부모나 교사가 독단적으로 판단하여 아이를 불필요한 스트레스에 노출시키는 것은 바람직하지 않습니다.

결과와 배운 점

세 번째로 코드를 배포해보니 이제 겨우 프로세스를 따라하는 게 가능해진 것 같습니다.

앞으로 봇의 말투도 바꿔보고 싶고, 다른 사람과 함께도 사용해보고 싶고, 개인들이 사용해볼 수 있게 오픈하는 방법도 알아보고 싶습니다.

지식기반 RAG 챗봇의 경우 무엇보다 믿을 만한 데이터 기반으로 만들어져야 할 것 같고, 정확한 답변을 줄 수 있도록 지식을 체계화하는 작업이 중요할 것 같다는 생각이 들었습니다.

도움 받은 문서와 고마우신 분들

  • 대한소아청소년과학회 - 언어발달 : https://www.pediatrics.or.kr/bbs/?code=infantcare&category=I&gubun=B

  • 토요일 모각에서 가르쳐주신 스터디장님, 스터디원분들, 특히 옆자리에 계셨던 JUN님, 레오님, 진경님 감사드려요. 🙏👍

  • 스터디장님께서 공유해주시는 자료와 코드가 없다면 따라하기도 불가능할 것 같아요.

2
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요