Release 1.3.0 (2025.02.20)
Note
- AI 기능 성능을 개선했습니다.
- LLM 응답 생성시 스트림 방식을 통한 사용자 경험 개선을 진행했습니다.
- 토큰 기반의 악의적인 요청 차단과 함께 IP 기반 정책을 추가했습니다.
- 비속어 탐지 기능을 추가했습니다.
개선 사항
스트림 방식 전환 (PR #98, #103)
클라우드 서비스에서 제공되는 LLM 모델을 이용하여 응답을 생성시 완성된 응답을 받기까지 지연시간이 오래 걸려, 사용자 경험이 저하되는 문제가 있습니다.
클라우드 서비스에서 토큰 단위로 데이터를 받을 수 있기에, 해당 방법으로 전환하여 사용자가 응답을 받아보는 첫 시점을 이전보다 개선했습니다.
2025-02-18.20.26.19.mov
질문/답변 개선 모델 튜닝
튜닝을 했음에도 불구하고 개선된 질문과 답변이 만족스럽지 않은 경우가 있어 성능을 더 높이고자 학습 데이터셋을 추가하고 프롬프트 문장을 개선하였습니다.
질문과 답변을 개선하는 과정에서 발생한 문제는 다음과 같았습니다.
1번 문제의 경우 프롬프트 문장에 다음과 같은 문장을 추가하여 해결하였습니다.
[사용자 질문 입력]
최종적으로 재작성된 질문만 출력해 주세요.
정중하고 공손한 어투와 존댓말을 사용하여 재작성해주세요.
2번 문제의 경우 데이터 셋을 400개에서 1000개로 늘려 성능을 높이는 작업을 하였습니다.
IP 기반 악의적인 요청 차단 (PR #107)
AI 기능에 소모되는 토큰을 줄이기 위해 사용자가 AI 기능 요청을 악의적으로 계속해서 보내는 경우를 막았습니다.
기존에는 서비스에서 제공하는 세션토큰을 기반으로 사용자의 무분별한 요청을 막았습니다. (PR #76)
그러나 Ask-It 서비스는 토큰의 무제한 발급이 가능하기 때문에 토큰을 바꿔가며 요청을 보낼 경우 제대로 차단하기 어려울 수 있어 사용자의 IP 를 기반으로도 요청을 차단할 수 있게 하였습니다.
따라서 사용자의 토큰과 IP 를 캐싱한 뒤, 3초 이내에 같은 토큰이나 IP 가 포함된 요청이 발생할 경우 해당 요청을 반환할 수 있도록 하였습니다.
추가된 기능
비속어 탐지 기능
여러 실험적인 도전을 진행하다가 BERT 모델이 GPU 없는 인스턴스 서버에서 동작하는데 큰 무리가 없음을 확인하였습니다.
비속어 탐지 기능 자체는 모델의 성능이 뛰어나지 않더라도 실험적으로 도전해볼 수 있을 것 같다고 판단하여 해당 기능을 추가했습니다.
classifier server (PR #92, #94)
BERT 모델을 fine tuning 을 진행하여 공격적인 문장과 그렇지 않은 문장들을 분류할 수 있는 모델로 학습하였습니다.
해당 모델을 사용할 수 있는 API 서버를 추가하여, 문장들을 입력으로 주면, 문장을 분류하여 확률과 함께 응답으로 제공하도록 개발했습니다.
입력 | 출력 |
---|---|
![]() |
![]() |
배치 작업을 통한 비속어 필터링 (PR #101)
classifier 서버를 활용하여 채팅의 비속어를 필터링 기능을 만들었습니다. 다만, 채팅 50개에 30초 가량의 검사 시간이 걸리기 때문에 매 채팅이 생성될 때마다 classifier 서버로 검사를 진행하게 되면 서버 전체의 블로킹 우려가 있었습니다. 이러한 특징을 고려하여 비속어 필터 작업을 배치 작업으로 구현했습니다.
매 분 당 50개의 채팅 검사를 진행할 수 있도록 하였습니다. classifier 서버를 토대로 비속어 여부를 검사하고 그 결과를 DB에 저장한 뒤, 비속어 채팅 리스트들을 브로드캐스트하여 사용자들의 화면에 실시간으로 반영될 수 있도록 하였습니다.
필터링 작업에 대한 프론트엔드 작업 (PR #96)
클라이언트에서는 부적절한 표현이 담겨 있는 채팅이라면 해당 채팅을 다른 문장으로 변경하여 표시하도록 변경했습니다.
또한, 필터링 기능을 토글로 제공하여 사용자가 가시여부를 결정할 수 있도록 제공합니다.

What's Changed
- feat(be): add a classifier that determines whether question or reply have been improved by @cjeongmin in #92
- feat(be): add slang detection by @cjeongmin in #94
- feat(be): stream response by @shl0501 in #98
- fix(be): fix swagger by @shl0501 in #99
- feat(be): chatting filter by @wlgh1553 in #101
- fix(be): update socket server prisma schema by @wlgh1553 in #104
- feat(fe): add abuse chatting message filtering feature by @cjeongmin in #96
- feat(fe): add animated text component for AI features by @cjeongmin in #103
- fix(fe): adjust z-index of abuse message toggle button by @cjeongmin in #105
- feat(be): restrict request by using token and ip by @shl0501 in #107
- feat(be): improve abuse classifier model performance, implement input batch processing by @cjeongmin in #111
- fix(be): add history api in ai controller by @shl0501 in #112
- fix(be): fix ai controller code by @shl0501 in #113
- refactor(be): move chatting filter batch jobs from API server to Socket server by @wlgh1553 in #114
- style(fe): update cleanbot alert message by @wlgh1553 in #115
Full Changelog: v1.2.0...v1.3.0