*
안녕하세요! 인공지능 기술이 날로 발전하면서, LLM(거대 언어 모델)을 활용한 개발이 활발해지고 있습니다. LLM을 효과적으로 활용하려면 데이터를 어떻게 다루어야 할까요? 검색 결과든, 내부 문서든 방대한 양의 데이터를 LLM에 한 번에 넘겨주는 건 비효율적일 뿐만 아니라, 원하는 결과를 얻기 어려울 수 있습니다. 오늘은 LLM 시대에 꼭 필요한 데이터 축소 기법과 프롬프트 전략에 대해 알아보겠습니다.
방대한 양의 데이터를 그대로 LLM에 입력하면 몇 가지 문제가 발생합니다.
토큰 희석 현상 (Attention Dilution): LLM은 입력된 모든 토큰(단어, 구두점 등)에 어텐션(Attention)을 부여하며 문맥을 파악합니다.
데이터의 양이 너무 많아지면 모델이 중요하지 않은 정보에까지 어텐션을 분산하게 되어, 핵심적인 내용을 놓치거나 잘못된 답변을 할 가능성이 커집니다.
마치 수많은 이야기 속에서 중요한 한 줄을 찾아야 하는 것과 같죠.
비용 문제: LLM API를 사용할 때 대부분 토큰 수에 따라 비용이 청구됩니다.
많은 데이터를 입력할수록 비용은 기하급수적으로 늘어나죠.
만약 여러 번의 질의에 같은 데이터를 사용해야 한다면, 그때마다 큰 비용을 지불해야 합니다.
성능 저하: 단순히 정보의 양이 많다고 해서 좋은 답변이 나오는 건 아닙니다.
오히려 모델이 혼란스러워하며 엉뚱한 답을 내놓거나, 답변 생성 속도가 느려질 수 있습니다.
이러한 문제들을 해결하기 위해 우리는 데이터를 '요약'하고 '축소'해야 합니다.
데이터를 요약하는 가장 효과적인 방법은 바로 LLM 자체에 요약을 맡기는 것입니다. 왜냐하면 LLM은 이미 방대한 데이터를 학습했기 때문에, 어떤 정보가 중요한지, 어떤 방식으로 요약해야 원하는 편향(Bias)을 유도할 수 있는지 가장 잘 알고 있기 때문입니다.
요약 기법은 크게 두 가지로 나눌 수 있습니다.
스터프 기법은 가장 기본적인 방법입니다. 여러 개의 문서를 한데 모아 하나의 긴 프롬프트로 만든 다음, LLM에 통째로 요약을 요청합니다.
✅ 장점: 구현이 매우 간단하고, 문서 전체의 맥락을 고려한 요약이 가능합니다.
❌ 단점: 입력 문서의 양이 LLM이 처리할 수 있는 최대 토큰 수를 넘어서면 사용할 수 없습니다. 대량의 문서에는 적합하지 않죠.
📝 예시 프롬프트:
다음 문서는 <문서1>, <문서2>, <문서3>을 합친 내용입니다.
이 문서의 핵심 내용을 100자 내외로 요약해 주세요.
맵 리듀스 기법은 대용량 데이터를 처리할 때 유용합니다. 복잡한 데이터를 단순화하는 과정을 거치는데요, 3단계로 진행됩니다.
✅ 장점: 최대 토큰 길이를 초과하는 방대한 양의 문서도 효과적으로 요약할 수 있습니다.
❌ 단점: 각 청크를 개별적으로 요약하기 때문에, 전체 문서의 흐름이나 맥락이 끊길 수 있습니다.
맵 리파인은 맵 리듀스와 비슷하지만, 문서에 '서사적 구조'가 있을 때 매우 유용합니다. 즉, 1장 내용이 2장 내용에 영향을 주는 경우처럼 앞뒤 내용이 긴밀하게 연결되어 있을 때 사용합니다.
맵 리파인 기법은 다음과 같이 진행됩니다.
이때, '리파인(Refine)'은 *'앞선 요약문을 이용해 다음 문서를 요약하는 행위'
를 의미하는 고유 명사처럼 사용됩니다.
✅ 장점: 서사 구조가 있는 문서의 맥락을 유지하면서 요약할 수 있습니다.
❌ 단점: 여러 번의 LLM 호출이 필요해 비용과 시간이 더 소요될 수 있습니다.
LLM은 자체적인 지식만으로는 한계가 있습니다. 사용자의 복잡한 질의에 답하거나 외부 정보를 가져와야 할 때, 에이전트 AI의 역할이 중요해집니다. 에이전트 AI는 LLM이 외부 도구(API, 데이터베이스, 검색 엔진 등)와 연동하여 문제를 해결하도록 돕습니다.
에이전트 AI의 작동 방식은 다음과 같습니다.
이때 중요한 것은 도구의 정보를 프롬프트에 얼마나 효과적으로 녹여내는가입니다. LLM에 도구의 기능과 사용법(설명, 함수명, 파라미터 등)을 명확하게 알려주는 '도구 정의 프롬프트'가 핵심이죠.
📝 예시: SQL 쿼리 생성 프롬프트
너는 사용자의 질의를 SQL 쿼리로 만들어주는 SQL 전문가야.
사용자 질의를 분석해 아래 테이블 구조에 맞는 쿼리를 생성해 줘.
- 테이블명: users
- 컬럼: user_id (PK), username, email
# 사용자 질의: 이름이 '김민수'인 유저의 이메일 주소를 알려줘.
# 너의 답변:
SELECT email FROM users WHERE username = '김민수';
이 예시처럼, LLM에게 역할(SQL 전문가)을 부여하고, 테이블 정보를 제공하며, 예시(Few-shot)를 함께 주면 LLM은 훨씬 더 정확하고 신뢰성 높은 결과를 반환합니다.
결론적으로, LLM을 활용한 개발은 단순히 프롬프트를 던지는 것을 넘어, 데이터를 효과적으로 전처리하고, LLM에 최적화된 프롬프트 전략을 세우는 것이 핵심입니다. 이를 통해 LLM의 잠재력을 최대한 끌어내고, 더 똑똑하고 효율적인 서비스를 만들 수 있습니다.