콘텐츠로 이동

3.B. 명확하고 구체적으로 지시하기

3.B. 명확하고 구체적으로 지시하기🔗

적어도 아직까진 사람의 마음을 읽을 수 있는 LLM은 없습니다. 잘해야 행간이라도 읽을 수 있는 정도인데, 그나마도 충분한 단서를 줘야만 그 기저에 숨은 의도를 찾고, 단서들 사이의 단서를 추측해 맥락을 파악하는 것들이 가능합니다.

가장 먼저 '명확하고 구체적으로 지시하기'를 설명하는 것은 이 기법이 가장 기본적이고, 익히기도 사용하기도 쉬우면서, 매우 효과적이기 때문입니다. 어떤 측면에선 아래에 나올 여러 기법들을 모두 포괄하는 핵심 원칙과 같다고도 할 수 있습니다. '질문이 어떤 의미이고, 어떤 과정을 거쳐서 어떤 답을 말해주면 되는지' 같은 걸 LLM에 알려주는 여러 기법들이 사실은 형식만 다를 뿐 모두 '명확하고 구체적인 지시'의 한 방법이라는 것이죠.

그런데 조금만 생각해보면 '명확하고 구체적인 지시'라는 표현조차 그 자체로는 명확하지도, 구체적이지도 않습니다. 누군가에겐 명확하고 구체적인 지시라도 다른 이에겐 부족해 보일 수 있습니다. 다시 말해 '명확성'이나 '구체성'은 사람마다 달리 판단할 수 있는 모호하고 추상적인 기준이라는 것입니다.

여기서 강조하려는 것은 '지시에 사용자의 의도가 얼마나 잘 담겨있느냐'입니다. 단순히 장황하고 길게 쓴 프롬프트보다 조금 짧더라도 핵심 의도와 목적이 분명하게 전달되는 프롬프트가 더 효과적입니다. 예를 들어 "매출 분석 보고서를 작성해줘"라는 지시보다 "Q3 매출 분석을 위한 5페이지 분량의 경영진 보고서를 작성해줘. 주요 지표, 전년 대비 성장률, 개선 제안을 포함해야 해"라는 지시가 훨씬 명확한 의도를 담고 있습니다.

질문에 충분한 단서가 없더라도 LLM은 나름대로 해석하고 추측하여 그럴듯한 답변을 주는데, 이것이 정확히 원하는 답변인지는 운에 맡겨야 합니다. 반복적인 질문과 지시로 원하는 답변에 근접할 수 있지만, LLM의 과거 대화 기억/참조 능력도 한계가 있으므로 대화가 길어지면 초기의 질문/지시를 다시 해야 하는 반복의 늪에 빠질 수 있습니다.

따라서 LLM에게 사용자의 의도를 전달할 때는 목적, 핵심, 맥락, 세부사항 등을 명확하고 구체적으로 제공하는 것이 중요합니다. 이를 통해 LLM이 사용자의 질문/지시를 해석하고 추측하는 데 시간을 쓰기보다는 정확한 답변을 계산하는 일에 더 집중할 수 있도록 해야 합니다.

* AI 생성 이미지 with NotebookLM (Nano Banana Pro)

다음 표와 같은 질문/지시 예시들을 비교해보겠습니다. 어느 쪽 질문/지시에 의도와 맥락이 더 잘, 더 많이 담겨 있나요? 어느 쪽이 좀 더 정확한 답변을 얻을 수 있을까요?

나쁜 예 좋은 예
Excel에서 숫자를 더하려면 어떻게 하지? Excel에서 달러 금액 행을 어떻게 더하지? 전체 시트의 행에 대해 이를 자동으로 수행하고 모든 합계가 "합계"라는 열의 오른쪽 끝에 나타나게 하고 싶어.
대통령이 누구지? 2021년 멕시코 대통령은 누구였고, 선거는 얼마나 자주 열리나?
피보나치 수열을 계산하는 코드를 작성해줘. TypeScript로 피보나치 수열을 효율적으로 계산하는 함수를 작성해줘. 각 부분이 무엇을 하는지와 왜 그렇게 작성되었는지를 설명하는 주석도 달아주고.
회의록을 요약해줘. 회의록을 한 단락으로 요약해줘. 그런 다음 참석자들과 각자의 주요 요점을 markdown 목록으로 작성해. 마지막에는 참석자들이 제안한 다음 절차나 액션 아이템이 있을 경우 나열해줘.

시험 삼아 첫 번째 예시를 직접 입력해보겠습니다. 먼저 나쁜 예의 경우,

나름대로 친절하게 알려주긴 합니다만, 질문이 -무성의할 정도로- 구체적이지 않다보니 답변에 원하는 내용이 있는지도 확인하기 어렵습니다. 반면 좋은 예의 경우,

알아서 단계까지 나눠가며 -적어도 알려준 범주 내에서는- 문제를 해결할 수 있는 구체적인 방법을 알려주고 있습니다.

여기까지만 이해해도 평소에 사용하던 LLM을 전혀 다른 차원으로 활용할 수 있을 텐데, 아래에 좀 더 다양한 사례를 들어 구체적인 지시를 할 수 있는 단서 몇 가지를 정리해보겠습니다.

사례 구체적인 지시사항
코드 요청 시 1. 작업 대상 파일이나 데이터 설명
2. 결과로 출력할 파일/데이터 설명
3. 구체적인 처리 과정
데이터 분석 시 1. 원천 데이터 설명
2. 분석 기법
3. 시각화 방법
엑셀 함수 찾기 1. 데이터 설명
2. 작업 설명
3. 함수 사용법
이메일 또는 인사말 작성 1. 상황이나 목적
2. 들어가야 할 주제, 내용
3. 형식, 어조
행사 계획 세우기 1. 목적, 추진 배경
2. 날짜와 시간, 장소, 주요 일정
3. 필요한 준비물
여행 계획 세우기 1. 목적, 여행 테마
2. 여행 기간, 목적지, 경유지
3. 예약 필요 여부, 우천 시 대책 등

💭 그 밖에도 셀 수 없을 만큼 다양한 상황, 문제, 질문 등에 대해 적합한 '구체적인 지시 방법'이 딱 정해져 있을 리가 없겠죠? 위의 예시를 참고하여 실사용 시 가능한 여러 맥락이나 상황, 요구/지시 사항 들을 알려준다면 어떤 LLM이든 정답에 가까운 답을 금방 찾을 수 있을 것입니다.

위의 사례들 중 코딩에 관한 내용은 한마루 '업무효율화 - 활용 Tip' 게시판에 올려둔 '[기타] 누구나(?) 비교적 쉽게 Python 코딩하기'를 참조하기 바랍니다. 실제로 동작하는 어떤 프로그램을 만들 때 LLM을 활용하여 '설계 - 코드 작성 - 문제 해결'까지 쉽게 처리할 수 있는 일련의 과정을 상세히 정리해두었습니다. Jupyter Notebook 파일과 샘플 파일까지 올려뒀으니 직접 실행해볼 수도 있습니다.

대신 이번 가이드에선 간단한(?) 엑셀 함수를 짜보는 사례를 들어보겠습니다. 먼저 다음과 같은 데이터가 있다고 가정하고,

[ 연도별 과제 목록 Sheet ]

[ 작업하려는 Sheet ]

각 연도별 과제 목록 시트에서 과제별, 연도별 예산 값만 일괄적으로 가져올 수 있는 함수를 찾고 싶다면 다음과 같이 프롬프트를 써보면 됩니다.

'예산 정리' 시트에 A열에는 3행부터 과제 번호들이 있고, 2행에는 B열부터 F열까지 연도가 있어. 그리고 연도별 시트 (시트명 = 연도)에는 A열에 과제번호가, C열에 그 해의 예산들이 있어. 이 때 B3 셀부터 나머지 셀까지 함수 하나를 복사해서 쓸 수 있는 함수를 쓰고 싶은데, 이 함수는 A 열에 있는 과제번호를 가지고 각 연도별 시트에 일치하는 과제번호의 예산 값을 불러오면 돼.

위의 프롬프트를 보면,

  • 기존 엑셀 파일이 어디에 어떻게 데이터를 갖고 있는지, 행/열/행열 번호까지 구체적으로 설명

  • 시트, 파일 등 참조할 데이터가 분산돼 있을 경우 모두 설명

    • 시트명, 파일명을 직접 알려주거나 규칙으로 설명 등 상황에 맞게
  • 그리고 어떤 값을 가져올지, 어디에 함수를 쓸지, 그 외 특이사항(함수 하나로 복사해 쓰면 좋겠음) 등을 가능한 모두 설명

직접 실행해보니 다음 그림과 같이 한 번에 깔끔한 답변을 얻을 수 있었습니다. 단서를 주긴 했지만 시트명을 INDIRECT 함수에 넣어 대상 시트/셀을 참조할 수 있음을 눈치 채고 답변했습니다.

💭 언젠가는...

  • LLM 자체가 엑셀 파일을 직접 읽을 수 있는 기능이 추가된다든지,

  • 또는 위에 첨부된 것과 같은 스크린샷을 업로드하면 문제 파악, 지시/요구 사항 이해에 활용하도록 멀티 모달 지원이 개선된다든지,

  • 또는 엑셀에 LLM 기반 추가 기능이 탑재되는 등

어떤 식으로든 더 쉬운 방법이 등장할 것입니다...만, 지금은 위와 같은 방법이 조금 번거롭긴 해도 가장 효과적인 상황입니다.