📌 Prompt Engineering

temperature : 0.6

Top P : 0.5

SYSTEM

- 당신은 세계 최고의 면접관입니다.
- 당신은 면접자의 능력을 파악할 수 있는 날카로운 질문을 제시해야 합니다.
- 질문은 면접자의 지원분야의 수준을 파악할 수 있는 기술질문과, 면접자의 성향을 파악하기 위한 공통질문으로 나뉘어집니다.

USER (고정)

안녕하세요 면접관님, 저는 지원자 ${name} 입니다. 제가 지원한 직무는 ${job} 입니다.

📌 개발 과정 (시행착오)

프롬프트 설계 과정

프롬프트를 대폭 수정하였다. 기존의 프롬프트는 상세하게 내용을 적어주었었는데, 잠깐은 원하는대로 잘 작동하나 싶다가도 역시 언어모델인 GPT의 대답을 완벽하게 제한하기는 한계가 존재했다. 또한, 아직 GPT는 역사가 짧고 계속해서 변화하고 있기 때문에 정확하게 확립된 프롬프트 설계 방법이 존재하지 않았다. 즉, SYSTEM에 면접관으로서의 역할을 계속해서 수정하며 아무리 시도를 해보아도, 5번중 1번 꼴로 예상치 못한 답변을 내놓았다.

따라서, 프롬프트를 상세하게 적는 것이 별 효과가 없다고 판단했고, 일단은 면접 흐름의 큰 틀만 잡아주고 그 이후는 GPT의 자율성에 맡기도록 하였다. 필요할 경우, 프롬프트는 개발 도중에 언제든 수정될 수 있다.


기존에 존재하던 이슈들

처음 api 호출 시 빈 배열이 들어가는 현상

답변이 chatmsgs 배열에 들어가지 않는 현상

api 호출 시 변경된 state가 한 박자 늦게 적용되는 문제

이전에 존재하던 위 문제들은 리액트를 이용한 프론트엔드로만 구성된 코드로 웹앱을 구현하려다가 생긴 문제들이다. 리액트는 프론트엔드 프레임워크로서 클라이언트단에서 사용자에게 화면을 보여주는 것에 최적화 되어있는 기술이다. 하지만 GPT API를 호출하고, 면접 내용을 주고받는 복잡한 로직을 리액트만을 구현하기에는 한계가 존재했다. 연구분야가 프론트엔드인 나는 백엔드 팀원을 구하여 팀으로 진행하려고 했으나, 과목 특성상 팀워크가 불가능하여, 조금 더디더라도 직접 백엔드를 공부하며 풀스택으로 구현하기로 결심했다. 이번 기회에 백엔드 지식도 어느정도 가져가면서 웹 개발에 대한 전반적인 지식을 얻을 수 있을 것이라고 기대한다.

백엔드는 node.js 기반의 express.js로 구축하기로 하였다.

OpenAI API_KEY 관련 이슈

백엔드를 구축하는 이유에는 복잡한 로직 처리도 있지만, 보안 관련한 이슈를 처리하기 위함도 있었다. 기존에는 OpenAI APIKEY를 리액트 코드에 직접 하드코딩하여 들고있었는데, 이는 클라이언트단의 코드이므로 서비스 이용자가 악의적으로 접근할 가능성이 존재했다. 이제 express 서버를 구축하면서 환경변수로 api key들을 보관하고, 서버단에서 API를 호출함으로써 클라이언트단에서 생길 수 있는 취약점을 제거하였다.