랭체인을 활용하여 K드라마 유튜브 동영상으로 한국어교육 콘텐츠 제작하기 3: 효율 높이기

배경 및 목적

외국 사람들이 K 드라마를 좋아하는 점을 고려하여 K 드라마 제작사들이 유튜브에 올린 홍보용 드라마 영상 클립을 활용하여 한국어교육 콘텐츠를 제작해보기로 했습니다.

본 프로젝트의 목적 및 특징은 다음과 같습니다.

목적

  • 한국 드라마를 이용해서 한국어교육 자료를 LLM과 LangChain을 이용해서 생성

  • 효율적이고 체계적인 한국어교육 리소스 구축

  • 구축된 리소스를 활용해서 연계 활동방안 마련

특징

  • 데이터 수집 및 처리: YouTube에서 드라마 영상의 오디오와 대본을 추출

  • 다양한 학습 자료 생성: LLM을 활용하여 어휘/표현 목록, 문법 목록 등의 자료와 다양한 유형의 문제 자동 생성

  • LangChain 기반의 워크플로우: LLM과의 상호작용, 데이터 처리, 그리고 다양한 도구들을 효율적으로 연결하여 복잡한 작업을 자동화

  • 데이터의 체계적 관리: 옵시디언 볼트를 활용한 구조화된 데이터 저장 및 관리

  • 품질 관리: 자동 생성된 초안과 검토 완료된 최종 데이터의 분리 관리

  • 확장성: 새로운 드라마나 콘텐츠를 쉽게 추가하고 처리할 수 있는 구조 마련

참고 자료

기초 지식을 얻기 위해서 아래와 같은 랭체인과 관련된 기본서를 살펴보았습니다.

  • 타무라 하루카. (2024). 랭체인 완벽 입문 (최용 역). 위키북스.

  • 서지영. (2024). 랭체인으로 LLM 기반의 AI 서비스 개발하기. 길벗.

코딩 환경인 VSCode를 써보기 위해 아래 책을 살펴보았습니다.

  • 리브로웍스. (2024). 비주얼 스튜디오 코드 가이드 (김은철, 유세라 역.) 영진닷컴.

랭체인으로 교육 콘텐츠를 만들어볼 수 있겠다는 가능성을 확인한 허세임 스터디장님의 지피터스 포스팅입니다.

코딩 초보자인 제가 코딩 작업으로 프로젝트를 할 수 있겠다는 자신감을 준 멍멍님의 지피터스 포스팅입니다.

활용 툴

  • VSCode: 코딩 환경

  • Claude, ChatGPT: 코딩 및 프로젝트 도우미

  • Obsidian: 프로젝트 결과물을 보관하고 활용하는 툴

  • OpenAI의 GPT: API 방식으로 LLM 사용

  • LangChain: LLM과의 상호작용, 데이터 처리, 다양한 도구들의 효율적 사용

  • SpaCy: 일부 데이터 분석과 콘텐츠 생성 및 처리

  • 그 외

실행 과정

본 프로젝트의 실행 과정은 다음과 같이 3단계로 진행되었습니다.

  • 1단계: 기획하기

  • 2단계: 효과 확인하기

  • 3단계: 효율 높이기

1단계

1단계에서는 다음과 같은 질문에 답을 하면서 제가 랭체인을 이용해서 이 프로젝트를 할 수 있을지 기획해보았습니다.

  • 질문: 파이썬 코딩을 효율적으로 할 수 있는가?

    답변: Claude, ChatGPT의 도움을 받아 할 수 있다.

  • 질문: VS Code를 설치해서 코딩을 할 수 있는가?

    답변: 노트북에 VS Code 세팅해서 디지털 노마드 방식으로 언제든지 코딩을 할 수 있다.

  • 질문: LLM을 사용할 수 있는가?

    답변: OpenAI에 만들어둔 계정을 이용해서 GPT를 API 방식으로 불러올 수 있다.

  • 질문: 랭체인을 사용할 수 있는가?

    답변: Claude의 도움을 받아 랭체인을 사용하는 코드를 작성해서 사용할 수 있다.

  • 질문: 유튜브 동영상의 오디오 파일과 대본을 확보할 수 있는가?

    답변: 최소한 Yout 사이트를 이용해서 오디오 파일을, Daglo 사이트를 이용해서 대본을 확보할 수 있다. 코드를 통해 확보할 수도 있다.

사실 이 프로젝트의 기획 과정은 이와 같이 명시적인 질문에 답을 하는 과정이라기 보다는 일련의 사례를 접하면서 가능성을 다듬어 본 것입니다. 허세임 스터디장님과 멍멍님의 사례를 보면서 '아, 나도 해볼 수 있겠구나'라고 생각한 것이지요. 그래도 명시적으로 적어보면 구체적인 체크포인트를 정리할 수 있을 것 같아 적어보았습니다.

2단계

2단계는 프로젝트의 효과(effectiveness)를 확인하는 단계였습니다. 프로젝트의 효과는 다음과 같은 비교를 통해 확인할 수 있지 않을까 생각했습니다.

  • LLM을 이용해서 얻은 결과가 한국어교육 전문가들이 만들어내는 결과만큼 효과적인가?

  • LLM을 이용해서 얻은 결과를 한국어교육 전문가들이 활용했을 때 효율적인가?

첫 번째 항목은 LLM을 이용해서 원하는 결과(what)를 얻을 수 있는지(doing the right things)를 확인해보는 것이었습니다. 당연히 전문가만큼은 아니지만 대략 유사하거나 좀 부족한 결과를 만들어낼 수 있었습니다.

두 번째 항목은 LLM을 이용해서 만든 결과를 전문가들이 수정하거나 보완할 때 어느 정도 편리한가를 확인해보는 것이었습니다. 결과물의 형식과 인터페이스를 전문가가 사용하기 편하게 만들수록 효율성이 높아질 수 있겠다는 생각을 하게 되었습니다.

3단계

앞의 단계에서 프로젝트의 가능성과 효과를 확인했으니 이제는 관심과 애정을 갖고 프로젝트의 효율(efficiency)을 높이는 단계라고 생각했습니다. 적은 자원(시간, 비용, 노력 등)을 활용하여(how) 결과를 얻는(doing things right) 단계이지요.

이 단계에서는 자료 관련 여러 측면을 생각하면서 업무를 효율화할 수 있는 방안을 계속 찾아보고 있습니다. 필요한 부분을 위한 코딩 작업을 하면서요.

  • 자료의 분리: 확보 자료, 생성 자료, 검토해서 완성한 자료

  • 자료의 파악: 만들어진 자료들의 유무/상태 등을 쉽게 파악

  • 자료의 참조: 새로운 자료를 만들 때 기존 자료를 쉽게 참조

  • 자료의 활용: 기존/신규 필요에 따라 자료를 활용할 수 있도록 함

예를 들어, 다음과 같은 사항들이 있습니다. 코드를 추가하고 수정하면서 진행하는 사항들입니다.

  • 자료별 진행 단계의 결과물 모니터링

    • 오디오 파일 확보 및 정리 상태 확인하여 CSV 파일 업데이트

    • 오디오에 따른 스크립트가 추출되었는지, 완성되었는지 확인

    • 자료의 진행 단계 (활용할 자료, 생성 자료, 완성 자료) 체크하여 CSV 파일 업데이트

  • 자료별로 템플릿 사용

  • 자료별 진행 단계의 자동화

  • 옵시디언 볼트의 동기화를 통한 자료의 활용 가능성 확대

다음은 현재까지 정리해본 프로젝트의 폴더 구조입니다. 안정화가 될 때까지 계속 수정이 생길 것 같습니다.

KoreanDrama/

│

├── config/

│ └── settings.yaml # 프로젝트 설정 파일

│

├── data/ # 오디오 관련 폴더

│ ├── audio/ # 드라마 영상에서 추출한 오디오 파일

│ └── script_stt/ # 오디오에서 추출한 대본

│

├── generated/ # LLM을 이용해서 생성한 자료 폴더

│ ├── list_word/ # 대본에서 추출한 어휘와 표현 목록

│ ├── list_grammar/ # 대본에서 추출한 문법 목록

│ ├── question_word/ # 목록에서 추출한 어휘와 표현 문제

│ ├── question_grammar/ # 목록에서 추출한 문법 문제

│ ├── question_comprehension/ # 대본을 바탕으로 추출할 읽기 문제

│ └── template/ # 자료 생성을 위한 템플릿

│

├── KoreanDrama_vault/ # 옵시디언 볼트 (완성 자료 저장소)

│ ├── data/ # 완성된 자료 폴더

│ │ ├── script/ # 완성된 드라마 대본

│ │ ├── list_word/ # 완성된 어휘와 표현 목록

│ │ ├── list_grammar/ # 완성된 문법 목록

│ │ ├── question_word/ # 완성된 어휘 문제

│ │ ├── question_grammar/ # 완성된 문법 문제

│ │ └── question_comprehension/ # 완성된 읽기 문제

│ └── Resources/ # 기타 참고 자료

│

├── src/ # 소스 코드 폴더 (일부 예시)

│ ├── audio_from_youtube.py # 유튜브 동영상에서 mp3 추출

│ ├── script_from_youtube.py # 유튜브 동영상에서 대본 추출

│ ├── list_word.py # 대본에서 어휘/표현 목록 추출

│ ├── list_grammar.py # 대본에서 문법 목록 추출

│ ├── question_word.py # 어휘/표현 문제 생성

│ ├── question_grammar.py # 문법 문제 생성

│ ├── question_comprehension.py # 읽기 문제 생성

│ └── utils.py # 유틸리티 함수

│

├── notebooks/

│ └── analysis.ipynb # 데이터 분석용 주피터 노트북

│

├── datalist.csv # 작업 중인 데이터 목록 및 처리 현황

├── requirements.txt # 프로젝트 의존성 목록

└── README.md # 프로젝트 개요 및 사용 방법

이 그림을 보면 마치 프로젝트가 완료된 것 같아 보일 수도 있습니다만, 절대 그렇지 않습니다.ㅠㅠ 앞으로 적어도 일주일에 한 번씩 VS Code를 열어 프로젝트 폴더를 관심과 애정을 갖고 살펴보고, 개선해야 할 것입니다. 그럴려면 실제 업무와 연계될 수 있는 방법을 계속 찾아보아야 할 것이고요.

결과 및 인사이트

이 프로젝트를 통해 얻은 결과는 다음과 같습니다.

  • K드라마 동영상 대본과 그에 따른 콘텐츠 (어휘/문법 목록, 어휘/문법/읽기 문제)

  • 대본과 콘텐츠를 생산하는 파이썬 코드와 코딩 환경

이 프로젝트를 통해 얻은 인사이트는 다음과 같습니다.

  • 제가 코딩 작업을 통해 콘텐츠를 파악하고 생성할 수 있겠다는 자신감

  • 업무에 LLM을 적극 활용하는 것이 필요하겠다는 판단

  • LangChain과 같은 프레임워크를 이용해서 프로세스를 효율화하면 좋겠다는 경험

  • 이 프로젝트를 통해 얻은 지식과 기술을 다양하게 활용할 수 있겠다는 생각

제 포스팅의 경우 구체적인 코딩 사례를 포함하지 않았습니다. 제가 코딩을 했다가 보다는 Claude가 코딩을 했다고 보는 것이 맞아서요. 그러니 비전문가인 제가 코드를 설명하는 것은 영...^^ 저는 프로젝트의 프로세스를 기획하고 만들고 수정하면서 생성형 AI에게 계속 코드를 요청했습니다. 그렇게 해서 코드를 실행했고, 오류가 났을 때는 또 물어보면서 해결을 하였습니다. 그렇게 하다보니 코드 블록들의 역할이 눈에 들어오는 경우도 있었습니다. 어찌보면 이런 방식이 Top-down 방식의 코딩법이 아닐까 싶기는 하네요.

몇 번의 지피터스 프로그램과 모임에 참가하면서 생성형 AI 관련한 여러 소식와 노하우, 그리고 팁을 알게 되는 것이 제게 큰 도움이 됩니다. 그런 도움이 제가 프로젝트를 기획하거나 진행할 때 여러 면에서 도움을 주고 있습니다. 이번 프로젝트를 진행하면서도 그런 경험을 많이 했습니다. 고맙습니다!

4
지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만