2024. 8. 17. 21:55ㆍDL
오늘은 프롬프트를 활용하며 느낀점을 한번 정리해보려고 합니다.
본격적으로 프롬프트를 활용해서 서비스를 개발하기 시작한것은 약 3개월 전 입니다. 그 당시 저는 프롬프트라곤 코드 작성하며 생긴 문제를 해결하기위해서, GPT또는 Claude에 코드를 입력하고, 문제를 찾아줘 같은 짧은 프롬프트를 입력하고 있었죠..
그런데 이제 서비스를 개발하기 시작하면서 여러 단계의 LLM전처리 과정과, Agent를 활용하기 위한 방법들을 고민하게 됐습니다. 그 과정에서 얻은 프롬프트 노하우?? 꿀팁?? 어쩌면 모두가 아는 방법일지 모릅니다만... 공유해보도록 하겠습니다.
1. Claude와 OpenAI GPT의 차이점
먼저 저는 여러 모델을 사용하고 있습니다. 대표적인 두 거목이 바로 OpenAI의 GPT와 Anthropic의 Claude입니다. 두 서비스는 분명 같아 보입니다. 질문 -> 답변, 그리고 내부에서 동작하는 가장 확률이 높은 단어를 조합하여 만들어주는 답변 방식, 모두 같습니다. 그러나 이 두 서비스를 깊게 사용해보다 보니.. 확실히 둘은 차이가 있습니다.
우선 Claude 이 친구는 확실히 구조화된 입력에 대한 답변 요구에 대하여 조금 약한 면을 보입니다. XML을 사용하는 방식을 활용하면 이런 부분이 개선된다고 하는데, 이런 강제 구조화를 통한 프롬프트 작성이 나중에 발목을 잡을 때가 있어서. 저는 많이 사용하고 있지는 않습니다. 예를 들어 반드시 답변을 할 때
Data: "your respones data hear"
Reason: "Put the reason for the data here"
위 와같은 형식으로 답변을 요구하는 경우 Claude에서 주는 답변이 깨질 확률이 더 높았습니다. 그래서 구조화를 하기 위해서 다양한 방법들을 마련해야했습니다. 다만.. Claude 3.5 Sonnet이 출시된 이후로는 확실히 구조화 출력이 좋아졌습니다. 그래서 이전보다 큰 노력을 기울이지 않아도 구조화된 출력을 잘 내어줍니다.
장점도 있습니다. 확실히 구조적 이해나 주어지지 않은 숨겨진 의미를 파악하여 더 사람같이 답변하는데 조금더 낫다는게 제 생각입니다. 너무 딱딱하지 않고 사람의 묘사를 더 잘 해낸다는 느낌을 받습니다.
두번째로 GPT입니다. 이 친구는 너무 냉철합니다. 주어진 명령에 무조건적인 복종하는 기계같은 느낌을 받습니다. 제한사항, 지시사항을 최우선과제로 생각하여 답변을 작성하는 듯 합니다. 다만. 이런 맹목성 때문에 질문이 모호하거나, 제한 조건이 조금 허술하면 금세 틈을 만들곤 합니다. 이번 상황은 예로 들기는 좀 어렵다보니... 예시는 스킵하겠습니다.
그래서 저는 주로 Langchain을 활용하여 Agent까지 도달하기 전 질문, Chat History들의 전처리 과정에 LLM이 필요한경우 GPT를 활용하고, 실제로 유저에게 답변하는 주요 기능들에는 Claude를 활용하고 있습니다.
2. 페르소나(Persona)
저는 서비스를 개발하면서 다양한 전처리를 해야한다는 것을 알게 됐습니다. 예를 들면, 주제와 상관없는 말을 하는경우 판단하기, 욕설또는 나쁜말이 포함된 경우 판단하기, 주제 중에서 특정 파트별로 판단하기 등 다양한 전처리를 하게 되는데요, 그런 경우 각각의 LLM Prompt에 단순 지시명령과, 답변 요구 포맷만 쥐어주는것 보다. System prompt를 활용한 페르소나를 주는것이 훨씬더 효과적이라고 생각합니다. 예를 들어서 자동차의 상세 페이지를 보고 자동차 규격을 추출하고 어느정도 크기의 차인지 판단해야하는 AI가 있다고 합시다. 이 AI에게 단순히 값 + 명령 + 답변을 하게 하는것 보다,
당신은 자동차 규격을 판단하기 위한 AI입니다. 주어진 문서에서 자동차의 크기와 관련된 규격을 확인하고, 최대한 정확하게
자동차의 크기를 판단해야 합니다. 자동차의 크기는 소형, 준중형, 중형, 대형으로 나뉘며 기준은 국제 규격에 표준을
맞추어 판단할 수 있습니다.
와 같은 프롬프트를 삽입한다면, 일반적인 규격 판단을 위한 사람의 역할을 부여하여 조금 복잡한 문서라도, 자체적인 판단을 하는데 도움이 된다고 생각합니다.
3. 언어
저는 사실 영어를 잘 하지 못합니다. 하하..😝 읽는것은 어느정도 괜찮다고 생각하는데 작문(영어적 느낌을 살린 작문)은 사실 좀 어렵다고 생각하고 있습니다. 해외경험이 있는것도 아니기 때문이죠.. 그렇다 보니 LLM의 Prompt를 작성하면서 많은 어려움을 겪었습니다. 내가 작성한 내용이 정말 맞을가? 의미가 정말 잘 부여돼 있을까? 단순이 문장으로만 돼있지 의미적인 깊은 부분이 전달되지 않는것은 아닌가? 등등, 그러다보니 몇몇 프롬프트는 정말 동작이 너무 안되는.. 혹은 오류 발생비율이 높은 문제가 있었는데요
그래서 시도한 방법 그냥 한글로 적어보자.. 사실 한글은 문자의 함축된 의미가 좀 영문으로 풀어쓰기 어렵다고 생각이 들기도 합니다. 그래서 말을 영어로 바꿔서 쓰기보다 한글 그 자체가 가진 의미를 활용하도록 프롬프트를 영문 + 한글 병기로 적어보았는데요, 이게 생각보다 출력성능이 나쁘지 않았습니다. (물론 나쁘지 않다는 좋다는 아닙니다.) <- 이렇게 적은 이유는 영문으로 엄청나게 잘 적힌 프롬프트보단 확실히 성능이 나쁠거에요 그런데, 어정쩡한 영어보다는 제 생각에는 성능이 더 나았다고 생각합니다.
물론 나중에는 영문으로 더 구조화해서 프롬프트를 수정해야할 것 같습니다. 아무래도 속도적인 측면에서 좋은 선택은 아니라고 생각해서 입니다.
그래서 제가 만든 Prompt가 들어간 서비스는??
https://play.google.com/store/apps/details?id=com.autocrypt.evpedia&pcampaignid=web_share
전기차를 좀더 꼼꼼하게 구매할 수 있도록 전기차 정보 플랫폼을 만들고자 합니다. 현재는 여러 전기차관련 정보를 볼 수 있는 포스팅페이지와 AI 어시스턴트 Eve에게 전기차 관련 질문을 할 수 있도록 돼 있습니다.
많은 관심 부탁드립니다!! (진지)
'DL' 카테고리의 다른 글
[LLM] OpenSearch - VectorStore로 써보기 (1) | 2024.09.04 |
---|---|
[LLM] 프롬프트를 활용하며 느낀점 & 효과가 있던 방법 2편 (3) | 2024.08.28 |
[LLM] Langchain ReAct Agent에 DALL-E tool 추가하기 (0) | 2024.08.02 |
[Langchain] Langserve에서 LLM Agent를 활용한 Response Streaming (0) | 2024.06.26 |
[LLM] Claude 3.5 Sonnet 출시 개인적인 느낀점 (0) | 2024.06.22 |