- 공부법의 정석으로 여겨져 왔던 일명 "엉덩이 학습법"의 비효율이 다른 나라 학생들과의 성취도 평가 비교에서 드러나고 있다.
- 따라서 그저 오랜 시간을 투자하는 방법이 아닌 실제 자신이 잘 학습하고 있는지 자문할 수 있는 능력인 "메타인지"의 함양이 대두되었다.
- 본 프로젝트는 글쓰기를 통해 효과적으로 메타인지를 향상시킬 수 있도록 AI챗봇의 도움을 받을 수 있는 글쓰기 플랫폼을 서비스하는 것을 목표로 한다.
- 챗봇
- 의도 분류: 챗봇에 입력된 문자열에서 사용자의 의도를 파악하여 자유대화와 링크 제공 중 적절한 서비스를 제공
- 링크 제공: 사용자가 주제에 대한 배경지식 보충을 요구했을 때 적절한 자료를 검색하여 링크를 제공
- 자유 대화: 사용자와 자유대화를 주고받지만, 글을 대신 적성해주지 않도록 제한
- 주제
- 카테고리 분류: 사용자가 입력한 주제의 카테고리를 서비스에서 제공하는 카테고리로 자동 분류
- 주제 추천 (최신 이슈 반영): 글의 주제를 자동 생성하여 추천 (주제 추천에 최신 이슈가 반영)
- 교정
- 제목 추천: 사용자가 작성한 글의 제목을 자동 생성
- 어색한 문장 찾기: 작성된 내용 중 어색한 문장을 찾아 수정을 제안
Tech | Purpose |
---|---|
OpenAI GPT-4 | 프롬프트 튜닝을 통해 다양한 역할을 수행할 수 있으며, GPT-3.5 Turbo에 비하여 신뢰할 수 있는 결과물을 보여줌 |
Google Bard | 최신 이슈 검색에 활용 |
Langchain | LLM을 쉽게 제어할 수 있도록 돕는 프레임워크 |
FastAPI | LLM API를 호출할 수 있도록 API서버를 구성 |
BeautifulSoup | 검색 결과를 크롤링하기 위해 사용 |
SQLite | 자체 모델을 훈련시킬 목적으로 데이터 수집 |
- 역할:
- 카테고리 분류: 사용자가 입력한 주제의 카테고리를 서비스에서 제공하는 카테고리로 자동 분류
- 자유대화: 사용자와 자유대화를 주고받지만, 글을 대신 적성해주지 않도록 제한
- 주제 추천에 최신 이슈 반영: 주제 추천에 최신 이슈가 반영될 수 있도록 함
- 역할:
- 메타인지 향상을 위한 질문 생성: 사용자가 자신이 작성하는 글의 내용을 잘 파악하고 있는지 되물을 수 있도록 질문한다
- 제목 추천: 사용자가 작성한 글의 제목을 자동 생성한다
- 어색한 문장 찾기: 작성된 내용 중 어색한 문장을 찾아 수정은 제안한다
- 역할:
- 주제 추천: 글의 주제를 자동 생성하여 추천한다
- 의도 분류: 챗봇에 입력된 문자열에서 사용자의 의도를 파악하여 자유대화와 링크 제공 중 적절한 서비스를 제공한다
- 링크 제공: 사용자가 주제에 대한 배경지식 보충을 요구했을 때 적절한 자료를 검색하여 링크를 제공한다
- Langchain을 이용한 "대화 내역 기억" 기능 구현
- 자체 모델 학습 데이터 수집을 위한 DB구축
- 기능별 프롬프트를 작성하고 의도한 결과가 출력되는지 확인했다.
- GPT-4의 경우 출력 양식(ex. Json 형식, 리스트 형식 등)을 예시로 제공하면 출력 양식에 맞춰 출력되는 것을 확인
- API 호출 밥법 정의
- 변수 자료형 정의
- 변수명 정의
- GPT-4에게 링크를 제공해달라는 요청을 했을 때, 언뜻 보면 요청을 잘 수행하는 것 처럼 보이지만, GPT-4는 그럴싸하게 보이는 링크를 "생성"할 뿐 실제로 확인해보면 존재하지 않는 페이지(404 ERROR)이다. (할루시네이션)
- 사용자가 어떤 정보를 필요로 할지 예상할 수 없고, 또한 제공되는 정보가 정확해야 글쓰기에 도움을 줄 수 있기 때문에 인터넷 검색을 통한 링크 제공이 필수였고 이 이슈를 해결해야 했다.
- 마이크로소프트의 Bing Chat이 인터넷 검색을 통해 정확한 링크를 제공하는 방식을 관찰하여 링크를 직접 생성하는 대신 적절한 검색어를 생성하여 검색 결과를 크롤링하는 방식으로 구현했다.
- 링크를 수집하던 중 한글로 이루어진 링크들이 수집 과정에서 변형되어 기능을 상실하는 이슈가 있었다.
- urllib의 unquote_plus()함수를 통해 url을 재가공하여 해결했다.
- 구현된 기능들의 API를 호출하여 사용할 수 있도록 FastAPI를 통해 API 서버를 구축했다
- API를 호출하여 사용하는 서버팀의 편의를 위해 API의 호출과 반환값의 양식을 수정하는 과정을 거쳤다.
- 서비스를 테스트하는 과정에서 주요한 이슈 중 하나는 서비스 비용에 돤한 것이었다.
- OpenAI의 API를 사용하여 서비스하는 방식은 사용자가 글 하나를 완성하는데 300 ~ 400원 정도가 부담될 것으로 예상했고, 서비스를 확대하면 이 비용은 상당한 부담이 될 것으로 보였다.
- 자체적인 LLM을 구축하여 서비스해야 하는 것이 장기적으로 유리하다는 판단을 했고, 당장 프로젝트에는 반영할 수 없더라도 데이터 수집에 대한 전략이 필요하다는데 의견이 모아졌다.
- 프롬프트, 사용자 입력, 대화 내역, 출력 등을 수집하고 DB에 저장하도록 했다.
- OpenAI의 API를 사용하며 프롬프트 작성 요령을 습득하는 기회였고, LLM을 이용한 서비스에서 겪을 수 있는 할루시네이션, 지연시간, 비용 등에 관해 생각해 볼 수 있었다.
- API 사용에 따른 비용 부담:
- 시연 영상을 녹화하며 사용자가 한 편의 글을 작성하는데 약 300~400원의 API비용이 부담되는 것으로 나타났다
- 사용자가 늘어날 경우 적잖은 비용 부담이 예상되기 때문에 수익모델을 고민해야 했고, 자체모델 구축 필요성을 느꼈다
- 길어지는 프롬프트와 늘어나는 지연시간
- 의도된 결과물을 도출하기 위해 프롬프트에 여러가지 요구사항과 제한사항을 반영해야 했고, 그에 따라 사용자가 결과를 받기 위해 기다려야 하는 시간이 늘어났다