Skip to content

1.2.0 (2025. 02. 13)

Compare
Choose a tag to compare
@cjeongmin cjeongmin released this 13 Feb 09:09
· 19 commits to main since this release

Release 1.2.0 (2025.02.13)

Note

  • AI 기능의 성능을 개선하여 응답을 개선했습니다.
  • 사용자가 보다 원하는 결과가 나올 수 있도록 유도할 수 있는 기능을 추가했습니다.
  • 질문 개선 기능에 이어, 답변 개선 기능을 추가하였습니다.
  • 추가로, 사용자가 악의적인 행동으로 AI 기능을 연속하여 사용하는 것을 방지하는 기능이 추가되었습니다.
  • 마지막으로 질문/답변 축약 기능을 삭제하는 것으로 결정되어 해당 기능을 제거하는 작업이 진행되었습니다.

개선 사항

AI 기능 성능 개선

질문 개선하기 기능의 응답을 개선할 필요가 있었습니다. 또한, 사용자가 악의적인 입력을 하는 것에 대해서 추가적인 대책이 필요했습니다.

프롬프트 엔지니어링만을 이용해서는 눈에 띄게 개선되지 않아, 다른 방법을 추가하기로 결정했습니다.

튜닝을 이용한다면 기존보다 응답이 개선될 것이라고 판단하였고 악의적인 입력에 대해서 완전한 해결을 할 순 없겠지만, 비슷한 입력에 대해서 응답 결과를 데이터로 추가하여 튜닝한다면, 기존보다 악의적인 입력에 대해서 강인해질 수 있다고 판단하였습니다.

튜닝을 위해 데이터셋이 필요해졌고, 이를 위해 데이터셋을 만들었습니다. 학습 데이터를 직접 생성하여 추가하고 이를 GPT를 이용하여 데이터셋을 확장하고, 클로바 스튜디오의 데이터 확장 기능을 이용하여 학습 데이터를 생성했습니다.

Important

현재 모델은 인위적으로 생성된 데이터를 통해 학습하였지만, 현재는 사용자의 AI 기능을 사용하고 해당 응답을 채택한 결과를 데이터베이스에 저장하고 있습니다. 이후 모델을 개선할 때 사용할 수 있을 것입니다.

이후, 모델을 데이터셋을 이용해서 튜닝을 진행하고 해당 모델을 이용하여 응답을 생성하도록 수정 작업을 거쳤습니다.

아래 문서에서 확인할 수 있는 것처럼 원치 않은 응답을 내놓던 질문에서도 정상적으로 질문을 개선하여 응답을 생성하는 것을 확인할 수 있습니다. (기존엔 많은 응답이 잘못되었으나 이후 모든 응답이 개선되었습니다)

추가적으로 더 좋은 응답을 받을 수 있도록, 질문에 대한 맥락을 이해하도록 수정되었습니다.

Important

세션 전체에 대해 맥락을 이해하는 것은 아닙니다.

프롬프트 데이터베이스 추가 (PR #72)

기존엔 모델에게 넘겨지는 프롬프트 내용을 서버에서 상수로 저장하고 있었습니다.

프롬프트의 변경이 필요할 때 서버가 다시 배포될 필요가 있었고, 이는 개발하는 환경에서도, 실제로 배포된 환경에서도 변경이 필요할 때 유연하게 대응할 수 없었고, 부정적인 개발자 경험을 제공했습니다.

따라서, 프롬프트 내용을 데이터베이스에 추가하여 서버에서 해당 내용을 불러와서 사용하는 방식으로 개선하여, 변경이 필요할 땐 데이터베이스를 수정하는 방식으로 서버의 변경 없이 프롬프트 내용을 변경할 수 있게 개선되었습니다.

현재는 매번 데이터베이스에서 불러오고 있지만, 프롬프트를 불러오는 행위가 자주 일어날 것이 분명하기에 캐싱을 추가하는 작업이 필요합니다.

AI 기능 응답 결과 저장 (PR #72, #77)

AI가 제공한 개선된 질문과 답변을 데이터베이스에 저장할 수 있도록 하였습니다. 이때 사용자의 accept와 reject 여부도 함께 저장하여 차후 ai를 개선하는데 사용할 수 있도록 하였습니다.

사용자의 피드백을 추가하여 재요청할 수 있는 기능이 추가됨에 따라 데이터베이스에 어떤 정보까지 저장해야하는지에 대한 고민을 하였습니다.

기본적으로 튜닝의 목적은 사용자의 경험을 높이고, 토큰 발생 비용을 줄이는 것이라고 생각하여, 사용자의 피드백이 반영되지 않은 AI의 최초 답변만을 저장하는 것으로 결정하였습니다.

추가된 기능

재요청시 사용자 피드백 추가 (PR #81, #83)

질문을 개선하거나 답변을 개선할 때, 응답이 원치 않는 수준의 응답을 받을 수 있습니다.

이를 해결하기 위해 응답 결과에 대해 피드백을 전달하는 기능을 추가했습니다.

2025-02-13.15.26.05.mov

해당 기능을 통해서, 사용자는 응답 결과에 대해 피드백을 통해서 보다 원하는 개선 결과를 받을 수 있습니다.

답변 개선 기능 추가 (PR #86, #89)

기존의 질문 개선 기능에 이어 답변 개선 기능을 만들었습니다. 질문 개선은 사용자의 질문만을 입력으로 받고, 해당 질문을 명확하고, 다채롭게 하는 것에 초점이 맞춰져 있었습니다. 반면 답변 개선은 사용자의 질문과 답변을 모두 받고, 질문을 통해 답변의 맥락을 파악한 뒤, 이를 통해 답변을 개선합니다. 아래와 같은 상황에서 답변 개선 기능은 큰 효과를 볼 수 있습니다.

예시)

사용자 질문 : 코딩테스트에서 Go와 파이썬 중 무엇을 사용하는 것이 좋을까요?

호스트 답변 : 파이썬 → 자료구조 많음

개선된 답변 : 파이썬이 많은 자료구조를 지원하기 때문에 코딩테스트에 더 적합합니다.

위와 같이 질문을 통해 맥락을 이용하고, 이해한 맥락을 통해 호스트의 답변을 보다 더 명확하게 작성할 수 있도록 합니다.

2025-02-13.17.52.40.mov

사용자의 악의적인 요청 방지 (PR #76)

AI의 토큰 비용을 줄이고자 사용자로부터의 악의적인 요청을 방지하도록 하였습니다. 악의적인 요청을 2가지로 정의하였습니다.

  • 매우 많은 입력을 보내는 경우
  • 짧은 시간안에 여러 요청을 보내는 경우

이를 위해 프론트에서 뿐만 아니라 백엔드에서도 사용자의 입력이 500자 이상일 경우 에러를 던질 수 있도록 하였습니다.

또한 저희 서비스는 세션 기반 인증을 사용하므로 각 사용자마다 고유한 세션토큰을 가지게 됩니다. 이를 활용하여 3초안에 같은 토큰을 가진 사용자가 AI 기능을 요청하면 에러를 던질 수 있도록 하였습니다.

삭제된 기능

질문/답변 축약 기능 (PR #83)

개선된 답변과 질문을 사용자의 요청을 담아 재요청할 수 있는 기능이 추가됨에 따라 기존에 기획했던 질문과 답변의 축약 기능을 삭제하게 되었습니다.

사용자가 메시지를 담아 재요청을 보낼 경우, 챗 gpt 처럼 기존 맥락을 유지하는 것이 개선에 도움이 될 것이라고 생각하였습니다. 그러나 사용자가 재요청을 계속할 경우 맥락이 너무 길어지는 문제가 있을 것이라고 생각하였습니다.

따라서 사용자의 원본 글 + 사용자의 요청 메시지 + 이전 AI의 답변 총 3가지를 전달하는 것으로 하였습니다.


What's Changed

  • feat(be): create prompt result insertion API by @wlgh1553 in #72
  • feat(be): implement ai request-restriction guard by @shl0501 in #76
  • feat(fe): resend with requirements (UI), integrate the history API, and add a Popover component by @cjeongmin in #77
  • feat: add question retry API by @wlgh1553 in #81
  • feat(fe): integrate question improvement retry API, update Popover component, and remove question shortening feature by @cjeongmin in #83
  • feat(be): content length validation by @wlgh1553 in #84
  • feat(be): add reply improve and retry API by @wlgh1553 in #86
  • fix(be): update history prompt type by @wlgh1553 in #87
  • feat(fe): integrate improve reply api by @cjeongmin in #89

Full Changelog: v1.1.0...v1.2.0