자! 프롬프트는 어떤 의미를 가질까요.
척하면 척하고 알아 듣는 AI는 왜 어려울까요.
여러분이 첫 단어로 '경제정책'이라고 적었다고 가정해 봅니다.
그럼 AI는 관련한 무수히 많은 연결 되는 단어를 떠올리게 됩니다.
프롬프트 엔지니어링을 할 때는 이 범위를 좁혀주는 방법을 사용해야 합니다.
그런데, 귀찮죠. 일일이 다 적어 주는 것은 정말 귀찮은 일입니다.
또한 그렇게 귀찮게 구체적으로 키워드를 적시해도 만족하지 못할 때가 많고,
필요한 단어 중 일부를 빼먹었는데, 그 하나 때문에 원하는 답과 멀어질 때도 많습니다.
즉, 프롬프트에 대한 이해 만으로는 충분하지 않다는 말입니다.
프롬프트엔지니어링 관련해 아무리 공부를 해도 만족할 수 없는 것을,
지침으로 극복하게 됩니다.
지침 또는 같은 역할의 시스템프롬프트가 가장 강력한 편의성을 제공합니다.
이것을 사용자가 정하지 아니하고, LLM이 알아서 처리해주기 위해
그리고 맥락의 이해를 돕기 위해 메모리 기능을 여러 서비스 기업이 도입했지만,
정확하게 적용되는 것이 아니어서 만족도를 조금은 높일 수 있지만
충분하지는 못합니다.
결국 다시 돌아서 .. 지침이 답이 됩니다.
자! 다시 예를 하나 들어 봅니다.
지침에 이렇게 (대략 예시입니다. 정교하게 다듬어 보세요) 적어 놓습니다.
지침 기능이 없을 경우 시스템 프롬프트에 적어 놓습니다.
vscode 의 gemini code assist의 경우 프로젝트 폴더의 GEMINI.md 와 같은
파일에 저장할 수 있습니다.
입력 체크 -> 정해진 템플릿으로 출력.
"블로그 주제 추천해줘" 라고 적었다면 좋지 못한 케이스겠죠.
전형적인 프롬프트 엔지니어링에서 안 좋게 말하는 경우입니다.
그럼 시스템프롬프트 또는 지침에 이런 취지로 적어 놓습니다.
블로그 주제 관련해 요청이 들어 올 경우
"30대 직장인이 관심 있는 분야(a, b, c)에서 최근 일주일간 트랜디한 가장 흥미로운 주제를 선정."
... 이런 식으로 미리 지침이나 시스템프롬프트에
내가 원하는 범위를 입력해 둡니다.
이렇게 몇 가지 가장 많이 이용하는 케이스를 적어 놓습니다.
그 다음은 출력 양식입니다.
각 케이스마다 바로 이어서 작성해 두어도 좋고,
전체 케이스의 공통 양식이어도 좋습니다.
답변은 이렇게 해주었으면 좋겠다.....는 .... 출력 양식에의 지침은,
실제로는 전체 프롬프트의 역하도 합니다.
즉, 출력 양식을 지정해 두는 그 자체로 AI의 답변은 달라집니다.
내가 원하는 유형의 답변을 위해
1. 페르소나 부여(당신은 저명한 생물학을 복수 전공한 의학 연구자입니다)
2. 프롬프트의 구체적 요구.
3. 출력 양식 지정.
이러한 프롬프트 3대 원칙을... 보완하는 지침을 만들어 두는 것입니다.
위 3대 요소에 맞춰 언제 일일이 질문 글을 쓰겠습니까.
그렇게 한다 한들 항상 만족스러울까요.
제가 불만을 갖는 경우 중 하나는,
쓸데 없는 문장을 너무 많이 만들어 낸다는 것입니다.
그렇다면 그런 부분을 최소화 하길 요구하는 지침을 넣어두어도 좋습니다.
AI의 프롬프트 엔지니어링이 역할이 무산되는 중요한 이유 중에 하나는,
바로 그 AI를 서비스하는 기업들의 내부 지침 때문이 많습니다.
이것도 예를 하나 들어 봅니다.
A라는 연예인 관련 뉴스가 있습니다.
그런데 다 아는 내용이 아니라 뉴스 보도 내용 중에 생소한 단어가 보이고,
관련 논리가 좀 이상해 보여서 관련 질문을 AI.에게 하면,
얘들은 종합적인 전체 틀을 먼저 살펴 보려고 합니다.
즉, 사용자의 질문 패턴을 알고,
연예인 A에 대해 물어 보게 되면...
일반적인 연예인 관련 질문의 답변 유형을 미리 틀을 짜놓고 답변을 합니다.
답변 엔진이 있다는 얘깁니다.
그러면 정작 사용자가 A에 대해 물어 보고자 하는 내용은 작아지고,
내부적으로 설정 된 틀에 맞춰 대답을 하려고 하는데,
이 내용이 부족하게 되면 지가 알아서 환각을 일으켜
이 양식에 맞는 내용을 채워 버립니다.
따라서 불필요하다고 생각되는데, 자주 질문하는 분야가 있다면,
사실 관계 체크를 하지 않은 내용은 출력하지 않도록 지침을 만들어 둡니다.
이해를 돕기 위한 예시를 하나 더 말해 봅니다.
게임 캐릭터 홍길동이 있습니다.
홍길동 관련 정보 중 내가 궁금한 것은 그와의 친화력을 높이는 방법입니다.
그런데 질문을 대충 해버리면,
AI는 내가 원하지도 않는 홍길은 이런 캐릭터라고 소개부터 하고,
유저들의 반응이 어떠하고, 이런 특징이 있고, 일일이 나열합니다.
그런데, 직접 적으로 원하진 않아도 나오면 나쁠 것 없는 정보들일 수 있습니다.
그럼 그 중 빼고 싶은 부분을 출력하지 말라고 지침을 적어 둡니다.
페르소나를 여러 가지 형식으로 지정해 두는 것도 좋습니다.
트리거 맞춤형 페르소나라고 할 수 있는데요.
자! 우리가 가장 많이 접한 AI의 원리가 무엇일까요.
확률적으로 다음 단어를 추측해 낸다는 것이었죠?
그럼 트리거에 맞는 페르소나를 여러개 정해 두어도 되겠네요.
여러분이 특정 단어 조합으로 프롬프트를 작성하면,
그것을 트리거로 받아 들여서 호출하게 되는 페르소나는
이런 식입니다.
음식에 대해 질문을 하면
지침에 특정 단어 두어 가지의 조합을 트리거로 설정해두고,
'당신은 요리에 영양학에 정통한 중학교 담당 영양사입니다."
라고 설정해 두면,
AI는 지정한 개념과 연관성이 높은 맥락에 보다 더 집중합니다.
사막 전체를 다 뒤집어서 바늘 하나를 찾으라고 할 것이 아니라
동쪽 사막에서 가장 큰 오아시스라고 범위를 정해지면
그 범위 안에서 연관성이 높은 키워드를 찾아 갑니다.
훨씬 더 빠르고 정확한 정보를 생성해 내게 됩니다.
이런 요청도 가능합니다.
"구어체 30% 문어체 70%로 5천자의 단편 소설을 써줘"
라고 직접 지정할 수도 있고,
지침에 트리거로 '소설 창작', '소설 쓰기 요청' 등의
AI가 이해할 수 있는 조합 예시를 들어 두면
이 좁혀진 범위 안에서 질문을 이해하고 척하면 척하고 알아 듣습니다.
즉, 정확히 일치하는 프롬프트여도 되고,
예시를 충분히 들어 두었다면,
응용까지 알아서 합니다. 범위가 좁혀졌으니 일을 잘 합니다.
당장도 그리고 앞으로도 한번 세팅해 두면 초반에 며칠에 걸쳐
사용하면서 부족함을 채우는 지침 수정 과정을 약간 지나고 나면,
AI가 멍청하다는 생각은 살짝 줄어들지 않나 싶습니다.
나중에 흥이 나면, CoT를 지침으로 응용하는 방법에 관한 글도 적어 보겠습니다.
여기서 한발 더 나가면 멀티에이전트를 돌릴 수도 있습니다.서로 다른 페르소나를 가지는 에이전트 간의 상호작용으로 원하는 결과물을 얻는 것은 실제 AI 연구에서도 쓰이는 방법입니다.
네. 여러 에이전트를 돌리는 노하우 관련 글을 한 번 기대해 봐도 될까요.ㅎㅎ
전 요즘 이런 부분도 연구 중입니다.
하나의 에이전트 안에서 여러 페르소나를 필요에 따라 호출하는 방법을 적용한 지침 설계요.
무슨 말이냐면... 조금 복잡한 구조를 짜서 생각의 사슬을 이어가는 방법인데,
나름 복잡하게 그 구조를 설정하는 중이라... 지금 2주 정도 시간을 쓰고 있네요.
미리 인사드립니다.
고맙습니다.