Work Life

[비사이드 508 AI 포텐데이] 10일간의 챌린지 후기 2 및 실험 과정

삐롱K 2025. 8. 20. 17:48
728x90
반응형

1편에 이어.. 2편엔 AI 기능 구현에 대해 자세히 작성해보려고한다.

 

[비사이드 508 AI 포텐데이] 10일간의 챌린지 후기 1

508 AI 포텐데이❎NAVER Cloud | Notion🧿 프로그램 특징bside.notion.site 1️⃣ 포텐데이 참가 이유포텐데이는 10일간 불태우는 프로젝트 경진대회이다.서론이 길다...퇴사한지 벌써 반년이 지나가면서 사

wavetoai.com

 

1. 서비스 간단 소개

 

T성향이 ‘티’나는 사람을 위한 F 공감 시뮬레이션 챗봇 서비스

 

 

우리의 거리는 몇 미터? | Notion

한눈에 보기 👀

ubiquitous-blackberry-1d3.notion.site

*최종 산출물 노션페이지

여기서 서비스 소개서 및 프로토타입을 확인 할 수 있다.

 

나티나??

나티나?? has 5 repositories available. Follow their code on GitHub.

github.com

*깃허브

 

2. 나의 역할

AI 기능 구현 및 배포

 

AI 주요 기능은 다음과 같다.

- 상황 제시
- 사용자 쿼리에 대한 반응
- 그 후, 대화 이끄는 말 생성
- 사용자 쿼리에 대한 점수 제시 (0 또는 1)
- 사용자 쿼리 검증(부적절한 언어 필터링)
- 대화 기록을 기반으로 사용자에게 편지지 작성(일종의 피드백)
- TTS

자세한 내용은 AI 파트 깃허브 참고* https://github.com/besides-508-potenday/na-T-na-AI

 

1️⃣ 채팅

극 F 성향의 '투닥이'와 이야기를 나눈다. 대화의 시작은 간단한 인사말과 함께, 상황을 제시한다.
예) 친구가 약속을 매번 취소해서 서운해...ㅠㅠ

그리고 이 상황을 유지하면서 T 사용자가 답변하기 어렵게 마지막 대화까지 이끌어나간다.
처음에는 대화를 10턴으로 설정했는데, 감정적인 AI와 이야기를 나누는게 너무 정신적으로 힘들어서 5턴으로 줄였다...

사용 모델:  HCX-007 

 

[문제 정의 및 실험 과정]

문제1: 감정에 취약한 AI, 너무 찡찡거리고, 별거 아닌 것을 계속 언급한다.

해결 과정 및 실험 결과

  • 처음에는 200% 감정적인 캐릭터로 설정했다. T 사용자가 답변하기 어려워야하니까... 그런데 대화를 하면 할수록 내 수명이 줄어드는 것 같다... 갑자기 또 떠오르네..ㅎ
  • 그래서 너무 딥하게 들어가지는 않게 설정했다.
  • 하지만, 어쨋든 주어진 상황에 대해서 대화를 끝까지 이끌어야하기 때문에 찡찡거리는 느낌을 줄이기 어려운 건 어쩔 수 없다...
  • 사용자가 해결책을 주면, 공감하지 않는다고 서운해하고,,, 공감을 해주면 고맙지만 그래도 여전히 그 상황이 속상하고, 걱정이 된다는 말로 대화를 이끌어야한다.
  • 다른 방법이 있을까..?
    • 대화가 문제 상황에서 벗어나도 좋으니, 자유롭게 대화해보기 → 찡찡대는 건 여전하고, 더 심해졌다...
      어쨋든 사용자의 답변을 scoring 해야하기 때문에 그냥 평범한 대화(?)를 이어나가는 건 어렵다.

 

문제2: 모델의 창의력 부족 (만들어진 상황이 비슷비슷하고, 중복이 많다.)

해결 과정 및 실험 결과

1) hyper parameter tuning

  • temperature를 0.8 정도로 맞췄다.


2) few-shot learning

  • 적절한 예시를 제공하였다.

결론적으로는, 제대로 해결하지 못해서 마음에 들지 않았다. 매번 비슷한 상황이 나왔기 때문이다. 이제 외울지경...

 

문제3: 생성 속도 문제

해결 과정 및 실험 결과

1) 추론 과정 생략

  • 기본적으로 추론을 하도록 설정되어있다. 
  • thinking none 으로 변경
  • 다음과 같이 yaml 파일에 config를 여러개 설정해두었다.
DEFAULT_PARAMS:
  topP: 0.8
  topK: 0
  maxCompletionTokens: 512
  temperature: 0.7
  repetitionPenalty: 1.1
  seed: 0
  includeAiFilters: false
  thinking:
    effort: none
  • 실험 결과

TPS를 보면 초당 토큰 생성 숫자는 3배로 늘었다. 그리고 TTFT는 주로 warm-up 시간을 얼마나 단축시켰는지 측정하는건데 나는 API를 그냥 불러와서 쓰는거라 여기에 맞는 평가지표는 아닌 것 같다.

No reasoning Reasoning
[TPS] 57.496
[TTFT] 1.739
[promptTokens] 222
[completionTokens] 100
[totalTokens] 322
[memory_usage] 0.359375
[TPS] 157.224
[TTFT] 6.513
[promptTokens] 222
[completionTokens] 1024
[totalTokens] 1246
[memory_usage] 2.984375

 

2) 프롬프트 개선

프롬프트 토큰 수, output 토큰 수가 줄어들면 생성 속도는 줄어든다. 원래도 길이가 긴 편은 아니어서 속도를 줄이는데 크게 영향을 주진 않았다.

  • 프롬프트 길이는 간략하게
  • 답변 형식을 명확하게 설정하여 쓸때없는 추가 설명을 하지 않도록 함.
    • ~~ 한 지시사항에 따라 생각해 본 결과, ~~ 해서 ~~~ 게 대답하는게 좋을 것 같아. 이런식으로 나오는 경우가 있다. 그러면 프롬프트에 without any additional explanation 를 붙이는 편인데, 그럼에도 설명을 하는 모델이 있다.
    • sLM의 경우엔 이런 문제가 발생하면 골치아프다.. 하지만 클로바는 LLM이니까... 할 수 있어.. 협박하면서 프롬프트 개선함...
    • 그런데도 믿을 수 없어서 결국엔 json format으로 "reaction": "대답~~~", "next_question":"다음 할 말 제시" 이런식으로 output이 나오게 했다.
  • 영어로 작성(토큰 수 및 비용 문제로 평소에도 영어로 작성하는 편이다)

 

2️⃣ 편지 작성

대화 기록을 보고 피드백 같은 편지지를 작성하는거다.

사용자의 최종 점수에 따라, 편지지의 분위기를 다르게 하고, 주로 어떤 점이 좋았는지 어떤 점이 속상했는지 적는다.

그리고 마지막 멘트, "언제나 함께 하길 바라며,"와 같은 걸 생성하면 된다.

이 부분도 JSON 형식으로 나오도록 했다. 마지막 멘트 없이 편지를 쓰는 경우도 있었기 때문이다.

"첫인사", "본문", "마지막멘트" 이런식으로 키를 설정했다. 다행히 그 뒤로 에러는 없었음.

 

3️⃣ TTS (편지 텍스트를 음성으로 변환)

이건 그냥 Naver CLOVA Voice 사용하면 된다.

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

 

보이스랑 속도, 음색, 높낮이 등을 설정할 수 있다.

F 성향 캐릭터에 맞게 "멍멍이" 보이스로 설정하고, 음색과 높낮이를 약간 조정했다.

 

🍰 배포

1. Docker Image Build

우선 FastAPI를 사용해서 API를 만들었다. 그 다음에 도커 이미지를 빌드했다.

2. AWS에 배포

EC2 인스턴스에 도커를 실행했다.

 

대부분 이런 방식으로 배포해와서 다른 방법은 잘 모르겠다. 그래도 하나 배운 건 항상 GCP에 배포했는데 이번에 AWS를 처음 다뤄봤다. 다행히 이번 프로젝트는 컨테이너가 가벼워서 문제 없이 배포할 수 있었다.

 

🐥 결론

포텐데이에서 했던 걸 간략하게 적어봤는데, 이 외에도 여러 실험을 해보았다. 대화 흐름이 어색한 부분이 있어서 개선하려고 해봤지만, 어쨌든 고정된 상황 + 감정적인 캐릭터는 유지해야했기 때문에 아예 이 설정과 캐릭터를 엎어버리지 않는 이상 다른 방법이 없었다... 후

이 서비스를 필요로하는 사용자가 있을지 모르겠지만, 나는 이제 이 캐릭터와는 손절이다.ㅎㅎ

728x90
반응형