LLM 성능 향상 위한 컨텍스트 엔지니어링 기법 소개
LLMs(Large Language Models)의 성능을 크게 향상시키는 방법: 컨텍스트 엔지니어링 활용 컨텍스트 엔지니어링은 LLMs에게 올바른 컨텍스트를 제공하여 성능을 최대한으로 높이는 과학입니다. LLMs와 작업할 때 일반적으로 시스템 프롬프트를 생성하여 LLM에게 특정 작업을 수행하도록 요청합니다. 그러나 프로그래머의 관점에서 보면, 성능 향상을 위해 고려해야 할 요소가 더 많습니다. 이 기사에서는 컨텍스트 엔지니어링의 개념과 이를 활용하여 LLM의 성능을 개선하는 방법에 대해 논의하겠습니다. 정의 컨텍스트 엔지니어링은 LLM에게 어떤 정보를 제공할지를 결정하는 과학입니다. 예를 들어, 다음과 같은 요소를 제공할 수 있습니다: - 이전에 작성된 관련 문서 - 특정 작업을 수행하는 예시 - 실시간 데이터 접근을 위한 도구 이러한 개념은 프롬프트 엔지니어링과 유사하지만, 프롬프트 엔지니어링은 주로 시스템 프롬프트를 변경하는 것을 의미합니다. 반면, 컨텍스트 엔지니어링은 LLM이 수행할 작업에 필요한 모든 컨텍스트를 고려합니다. 동기부여 이 기사의 동기는 앤드레 카르파티의 트윗에서 비롯되었습니다. 카르파티는 LLM 작업에서 프롬프트 엔지니어링의 중요성을 강조했습니다. 그러나 프롬프트 엔지니어링만으로는 LLM에 제공하는 모든 입력을 포괄하기 어렵다는 점에서 한계가 있습니다. 따라서, 이 기사는 API를 통해 LLM을 활용할 때 특히 유용한 컨텍스트 엔지니어링 기술에 집중합니다. API 대 콘솔 사용 API를 통한 LLM 활용과 콘솔(예: ChatGPT 웹사이트 또는 앱)을 통한 LLM 활용 사이에는 중요한 차이가 있습니다. API를 사용하면 프롬프트 생성 시 제공할 컨텍스트를 동적으로 변경할 수 있는 다양한 옵션이 있습니다. 예를 들어, RAG(Retrieval-Augmented Generation) 기술을 사용하여 벡터 검색을 수행하고, 가장 중요한 정보만 LLM에 제공할 수 있습니다. 이러한 동적인 변화는 콘솔을 통해 LLM과 상호작용할 때와는 다르게 가능하므로, 이 기사는 주로 API 사용에 초점을 맞추고 있습니다. 컨텍스트 엔지니어링 기술 제로샷 프롬프팅 제로샷 프롬프팅은 컨텍스트 엔지니어링의 기본입니다. 이 방법은 LLM이 이전에 본 적 없는 작업을 수행하도록 하는 것입니다. 예를 들어, 긴 텍스트를 제공하고 그 텍스트를 양적 감성이나 부정적 감성으로 분류하도록 요청할 수 있습니다. 프롬프트는 다음과 같을 수 있습니다: "당신은 전문 텍스트 분류자입니다. 텍스트를 다음 클래스 중 하나로 분류하십시오. - 클래스 A: 텍스트에 긍정적인 감성이 포함되어 있습니다. - 클래스 B: 텍스트에 부정적인 감성이 포함되어 있습니다. 분류할 텍스트: {텍스트}" 이 방법은 작업의 복잡도에 따라 매우 잘 작동할 수 있습니다. LLMs는 일반적으로 대부분의 간단한 텍스트 기반 작업을 수행할 수 있으므로, 두 클래스로 텍스트를 분류하는 것은 보통 제로샷 프롬프팅으로도 충분히 잘 이루어질 수 있습니다. 몇샷 프롬프팅 몇샷 프롬프팅은 제로샷 프롬프팅의 확장 버전입니다. 이 방법은 LLM에게 작업 설명과 함께 몇 가지 예시를 제공하여 성능을 향상시키는 것입니다. 위의 프롬프트 예시에 몇샷 프롬프팅을 적용하면 다음과 같습니다: "당신은 전문 텍스트 분류자입니다. 텍스트를 다음 클래스 중 하나로 분류하십시오. - 클래스 A: 텍스트에 긍정적인 감성이 포함되어 있습니다. - 클래스 B: 텍스트에 부정적인 감성이 포함되어 있습니다. <예시> {텍스트 1} -> 클래스 A </예시> <예시> {텍스트 2} -> 클래스 B </예시> 분류할 텍스트: {텍스트}" 이 방법은 LLM에게 작업 수행에 대한 구체적인 예시를 제공하므로 성능을 크게 향상시킬 수 있습니다. 인간이 처음 해보는 작업을 수행할 때도 마찬가지입니다. 작업 설명만으로도 어느 정도 성공할 수 있지만, 예시를 제공하면 성능이 향상됩니다. 동적 몇샷 프롬프팅 동적 몇샷 프롬프팅은 더욱 효과적인 기술입니다. 전통적인 몇샷 프롬프팅에서는 같은 예시 목록을 모든 프롬프트에 입력하지만, 동적 몇샷 프롬프팅은 작업을 위한 프롬프트를 생성할 때 예시를 동적으로 선택합니다. 예를 들어, 200개의 텍스트와 각각의 라벨이 있는 리스트가 있고, 새로운 텍스트를 분류해야 한다면, 유사성 검색을 수행하여 가장 유사한 텍스트만 선택하여 프롬프트에 포함시킵니다. 이렇게 하면 LLM에게 더 관련성이 높은 예시를 제공할 수 있어 성능이 향상됩니다. RAG (Retrieval-Augmented Generation) RAG는 LLM의 지식을 증가시키는 잘 알려진 기술입니다. 수천개의 문서로 구성된 데이터베이스가 있다고 가정해봅시다. 사용자가 질문을 보내왔을 때, 해당 데이터베이스에 포함된 지식을 바탕으로 답변해야 합니다. 그러나 전체 데이터베이스를 LLM에 제공할 수는 없습니다. 따라서 가장 관련성 높은 정보를 찾아 LLM에 제공해야 합니다. RAG의 과정은 다음과 같습니다: 벡터 검색 수행 사용자의 질문과 가장 유사한 문서 찾기 (유사한 문서일수록 더 관련성이 높다고 가정) 가장 유사한 문서를 바탕으로 LLM에게 질문에 대한 답변을 요청 RAG를 통해 LLM에게 필요한 정보만 제공함으로써 성능을 향상시킬 수 있습니다. RAG 검색을 개선하여 가장 관련성 높은 문서만 찾아내는 것이 성능 향상에 도움이 됩니다. 도구 (MCP) LLM에게 도구를 제공하는 것도 컨텍스트 엔지니어링의 중요한 부분입니다. 특히 AI 에이전트의 등장으로 이 기술이 더욱 중요해졌습니다. 도구 호출은 주로 Anthropic에서 시작한 Model Context Protocol(MCP)를 통해 이루어집니다. AI 에이전트는 도구를 호출하여 작업을 수행할 수 있는 LLM입니다. 예를 들어, 날씨 에이전트를 생각해봅시다. 도구 접근이 없는 LLM에게 뉴욕의 날씨를 물어봐도 정확한 답변을 받을 수 없습니다. 이는 날씨 정보가 실시간으로 업데이트되기 때문입니다. 따라서, 다음과 같은 도구를 제공할 수 있습니다: @도구 def get_weather(도시): # 도시의 현재 날씨를 가져오는 코드 return 날씨 이렇게 하면 LLM은 도시의 날씨를 검색하여 정확한 답변을 제공할 수 있습니다. LLM에 도구를 제공하는 것은 LLM의 능력을 크게 향상시키는 매우 중요한 요소입니다. 고려사항 이 섹션에서는 LLM에 제공할 컨텍스트를 만들 때 고려해야 할 사항들을 몇 가지 언급합니다. 컨텍스트 길이 활용 LLM의 컨텍스트 길이는 중요한 고려사항입니다. 2025년 7월 기준으로 대부분의 최신 LLM은 100,000개 이상의 입력 토큰을 처리할 수 있습니다. 이는 컨텍스트 활용 방식에 다양한 옵션을 제공합니다. 하지만, 컨텍스트 길이와 성능 사이의 균형을 맞추는 것이 필요합니다. 예를 들어, 분류 작업의 경우 다른 프롬프트를 사용하여 정확도를 확인할 수 있습니다. 만약 컨텍스트가 너무 길어서 LLM의 효율적이지 않은 작동을 초래한다면, 작업을 여러 프롬프트로 나누는 것이 좋습니다. 예를 들어, 하나의 프롬프트로 텍스트를 요약하고, 두 번째 프롬프트로 요약된 텍스트를 분류하는 방식입니다. 이렇게 하면 LLM이 컨텍스트를 효과적으로 활용하여 성능을 높일 수 있습니다. 컨텍스트 로트 지난 주, 컨텍스트 로트라는 흥미로운 기사를 읽었습니다. 이 기사는 컨텍스트 길이를 늘리면 작업의 난이도가 변하지 않더라도 LLM 성능이 저하된다는 내용을 다루고 있습니다. 이는 무관한 정보를 LLM에 제공하면 작업 수행 능력이 감소한다는 것을 의미합니다. 따라서, LLM에게 제공하는 정보는 반드시 관련성이 있어야 합니다. 그렇지 않으면 성능이 저하될 수 있습니다. 결론 이 기사에서는 컨텍스트 엔지니어링에 대해 논의하였으며, 이는 LLM에게 올바른 컨텍스트를 제공하여 효과적으로 작업을 수행하게 하는 과정입니다. 제로샷 프롬프팅, 몇샷 프롬프팅, RAG, 도구 제공 등 다양한 기술을 활용하면 LLM의 성능을 크게 향상시킬 수 있습니다. 그러나, 너무 많은 컨텍스트를 제공하면 성능이 저하될 수 있다는 점도 고려해야 합니다. 컨텍스트 로트 현상은 입력 토큰 수가 증가하면 성능이 저하된다는 사실을 보여줍니다. 따라서, 관련성 있는 정보만 제공하는 것이 중요합니다. 업계 평가 및 회사 프로필 컨텍스트 엔지니어링은 LLM의 성능을 크게 향상시키는 핵심 기술로 인식되고 있으며, 많은 기업들이 이를 활용하여 AI 시스템의 효율성을 높이고 있습니다. 특히, API를 통해 LLM을 활용하는 방식은 동적인 컨텍스트 조정이 가능하여, 실시간 데이터 처리와 복잡한 작업 수행에 매우 유용합니다. 또한, Anthropic과 같은 기업들은 Model Context Protocol(MCP)를 도입하여 LLM이 도구를 호출할 수 있도록 지원하여, AI 에이전트의 발전을 촉진하고 있습니다.