목차
컨텍스트 강화(Context Reinforcement). 프롬프트 엔지니어링은 대화형 인공지능에게 원하는 답을 정확히 얻어내기 위해 ‘질문 방식’을 체계적으로 설계하는 기술입니다. 우리가 인공지능과 소통할 때 쓰는 질문이나 지시문을 더 정교하게 다듬으면, 원하는 정보를 더욱 풍부하게 얻을 수 있습니다. 최근에는 인공지능 활용 범위가 넓어지면서, 단순히 ‘잘 묻는 것’ 이상의 기술이 필요해졌습니다.
컨텍스트 강화
컨텍스트 강화란, 질문자가 원하는 상황이나 목적에 따라 인공지능이 참조하는 배경정보(맥락)를 더 많이 담아내는 기법입니다. 이를 통해 똑같은 질문이라도, 맥락에 따라 완전히 다른 대답을 끌어낼 수 있습니다. 예를 들어, 신입 개발자가 궁금해하는 질문과 숙련된 개발자가 궁금해하는 질문은 같을 수 있지만, 두 사람에게 필요한 답의 내용과 깊이는 다릅니다. 이런 차이를 반영하려면 맥락 정보를 함께 전달해야 합니다. 이처럼 컨텍스트를 강화하면, 질문에서 놓칠 수 있는 세부적인 요구사항을 자동으로 보완해 주므로 높은 품질의 답변을 얻기가 한결 수월해집니다.
시스템 프롬프트를 동적으로 변환하는 원리
인공지능 모델에게 지시문이나 맥락 정보를 제공할 때, 가장 핵심이 되는 부분이 시스템 프롬프트(System Prompt)입니다.
시스템 프롬프트란, 인공지능 스스로가 어떤 역할을 해야 하는지, 또는 어떤 규칙을 지켜야 하는지를 정의하는 일종의 가이드라인이라고 볼 수 있습니다. 이러한 시스템 프롬프트가 고정되어 있다면, 인공지능은 모든 사용자에게 같은 방식으로 답변하게 됩니다. 그러나, 우리가 원하는 건 사용자의 상황이나 필요에 따라 유연하게 적응하는 답변이겠죠.
그래서 시스템 프롬프트를 동적으로 변환하는 원리가 등장합니다. 간단히 말해, 사용자마다 혹은 상황마다 필요한 정보와 규칙을 조금씩 바꿔서 인공지능에게 미리 알려주는 것입니다. 예를 들어, 서비스 이용자가 초보 개발자라면 ‘기본 용어를 쉽게 설명’하는 내용을 시스템 프롬프트에 더 많이 담을 수 있고, 숙련된 개발자라면 고급 예시를 제시하고 오류 디버깅 방법을 강조할 수 있습니다.
이 모든 과정을 자동으로 처리하는 핵심 로직은 크게 두 부분으로 나뉩니다.
- 사용자 프로필 분석: 사용자가 누구인지, 어떤 목적을 가지고 있는지 분석합니다.
- 맥락 기반 프롬프트 생성: 위 분석 결과를 바탕으로, 시스템 프롬프트와 사용자 질문 사이에 꼭 들어가야 할 내용(추가 정보, 규칙, 예시 등)을 자동으로 구성합니다.
이 과정을 유연하게 처리하면, 인공지능이 매 순간 다른 맥락을 최대한 반영해 사용자에게 특화된 답변을 제공할 수 있습니다.
컨텍스트 강화 시스템 구축하기
자, 이제 “컨텍스트 강화”가 뭐가 다른 건지 어떻게 하면 이러한 결과를 얻을 수 있는 건지 코드로 구성해 보겠습니다.
일반 생성형 인공지능 모델은 Meta의 Llama3.2 모델 중 가장 용량이 작은 1B 모델을 기준으로 하겠습니다. 설치가 편한 Ollama 플랫폼을 이용하여 설치한 상태입니다. ollama를 이용해서 llama 모델을 설치하는 방법은 (이전 글: Ollama로 Meta의 Llama 3.1 설치하기. AI 언어 모델 활용법)을 확인해 보시면 쉽게 이해하실 거예요.
간단하게 코드를 구성하기 위해서 Python의 Streamlit 패키지를 이용합니다. 우선, 일반적인 대화(Chat) 구조와 “컨텍스트 강화” 방법을 적용한 코드 구조에서 한눈에 차이를 알 수 있는 함수 부분을 비교해 보겠습니다.
- 일반적인 대화 구조 부분
![컨텍스트 강화 시스템 구축하기-01](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0.webp?resize=792%2C434&ssl=1)
chat_with_llama 함수에서 실제 사용자가 입력한 메시지를 llama 모델에 전달하고, 모델의 응답을 받아 반환하는 기능을 정의합니다.
send_message 함수에서 사용자가 입력한 문장과 llama 모델이 응답한 내용을 모두 messages에 기록하여 히스토리를 유지합니다. 또한 입력된 사용자의 문장을 chat_with_llama에 전달하고, 사용자가 새로운 메시지를 입력할 수 있도록 값을 초기화합니다.
- “컨텍스트 강화” 방법 적용 부분
![컨텍스트 강화 시스템 구축하기-02](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-02.webp?resize=795%2C583&ssl=1)
일반적인 대화 구조와 가장 큰 차이점은 바로 위 코드 부분입니다. 한눈에도 알 수 있듯, user_info라는 부분이 추가됐습니다. 사용자가의 특성이나 상태, 전문 분야, 관심 분야 등 다양한 정보를 정리했습니다. 여기에서 사용자가 파이썬 프로그래밍에 관심이 높고, 어느 정도 수준의 프로그래밍 경험자라는 내용이 정리됐습니다.
물론, 이 부분은 사용자 개인 정보에 해당하는 부분일 수도 있습니다. 대부분 앱이나 서비스에서는 가입이나 특정 메뉴를 통해 이러한 정보를 입력하도록 하거나 여러 정보를 통해 파악하여 적용하기도 합니다. 이 코드에서는 간단하게 적용하여 결과를 비교하기 위해 직접 코드 안에 정의했습니다.
두 번째 부분은 system_instructions 부분입니다. 시스템 지시 사항을 정의하여 llama 모델이 응답할 때 어떤 톤과 스타일로 응답해야 하는지, 어떤 내용을 강조해야 하는지 등 시스템 레벨 규칙을 명시합니다.
이에 따라 chat_with_llama 함수와 send_message 부분도 조금 변경됐습니다. 아래처럼 말이죠.
![컨텍스트 강화 시스템 구축하기-03](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-03.webp?resize=782%2C298&ssl=1)
컨텍스트 강화 결과 비교
이제, 결과를 비교해 볼까요?
질문은 다음과 같이 공통된 질문을 해봤습니다.
What are the best Python tools?
일반적인 대화 구조에서 llama라는 다음 그림과 같이 응답합니다. 응답한 내용의 일부만 보이지만, 대충 보아도 일반적인 tool에 대한 내용인 것을 알 수 있습니다. Python 코드 작성을 위한 편집툴이라든가, 형상관리 도구, 디버깅 툴까지 소개하고 있습니다. 이러한 내용은 처음 파이썬을 접하는 또는 파이썬 공부를 준비하는 사람들에게 적합한 답변으로 보입니다.
![일반적인 대화 구조 결과](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EA%B2%B0%EA%B3%BC-01.webp?resize=694%2C805)
이제, “컨텍스트 강화” 구조가 적용된 코드의 결과를 볼까요?
![컨텍스트 강화 구조 결과-01](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EA%B5%AC%EC%A1%B0-%EA%B2%B0%EA%B3%BC-01.webp?resize=691%2C719&ssl=1)
![컨텍스트 강화 구조 결과-02](https://i0.wp.com/paulsmediaset.com/wp-content/uploads/2025/01/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%95%ED%99%94-%EA%B5%AC%EC%A1%B0-%EA%B2%B0%EA%B3%BC-02.webp?resize=686%2C764)
별 다른 설명이 필요할까요? 한눈에 봐도 일반적인 구조의 답변과 차이가 납니다. 실제 파이썬에서 사용할 수 있는 라이브러리(패키지)들을 소개하고 있습니다. 특히 사용 방법으로 예시 코드까지 제시하고 있습니다. 이는 파이썬 입문자가 아닌 어느 정보 경험이 있는 개발자로 인식하여 그에 맞는 답변을 한 결과를 보여주고 있습니다.
결국, 생성형 인공지능을 이용할 때도 본인의 성향이나 관심 수준, 얻고자 하는 답변의 구조나 적용 분야 등에 대해 자세하게 접근하면 할 수록 더욱 더 원하는 대답에 근접하게 된다는 것을 알 수 있습니다.