AI를 사용하다 보면, 이런 의문점에 부딪힙니다.
- 모르면 '모른다'고 말하면 되는데, 왜 틀린 것을 단정적으로 이야기하는 걸까?
- RAG(Retrieval-Augmented Generation)는 자사 데이터를 AI에 학습시키는 기술을 말하는 건가?
- AI에게 사전에 지시하는 것(System Prompt)은 사용자 입력(User Prompt)보다 강력한 거야?
- 그렇다면, 악의적인 지시를 슬쩍 끼워 넣는 공격(Prompt Injection)이 왜 발생하는 걸까?
시리즈 구성
총 3회에 걸쳐 이전 회차의 지식이 다음 회차로 이어지도록 배치했습니다.
| 회 | 주요 내용 |
|---|
| 전편 | 파라미터, 모델 크기, 양자화, 토큰, 컨텍스트 창 |
| ... | |
1. AI는 왜 그럴듯한 실수를 하는가
AI를 사용하다 보면, 환각(Hallucination) (AI가 그럴듯한 실수를 출력하는 것)을 경험합니다. 예를 들면 다음과 같은 경우입니다.
- 존재하지 않는 프로그램 구성 요소(라이브러리)를 소개한다.
- 존재하지 않는 기능의 사용법을 그럴듯하게 설명한다.
- 존재하지 않는 논문을 인용한다.
- 그럴싸한 URL을 만들어낸다.
OpenAI는 환각을 '그럴듯해 보이지만 사실과는 다른 AI 출력'이라고 설명합니다.
인간의 입장에서는 '모르면
세 번째는 다음에 설명할 RAG의 개념 그 자체입니다.
2. 오류를 줄이는 정석적인 방법 'RAG'
서비스에서 자주 사용되는 것이 RAG(래그) 입니다. '자료를 검색하여, 그 내용을 AI에게 전달한 후 답변을 생성하게 하는' 메커니즘을 말합니다.
정식 명칭은 Retrieval-Augmented Generation (검색으로 보강된 글쓰기)입니다.
RAG는 '학습시키는' 기술이 아니다
RAG를 '자사 데이터를 AI에게 학습시키는 기술'이라고 생각하는 분도 있을 수 있습니다.
하지만, 현재 AI 서비스에서 일반적인 RAG는 AI 본체를 다시 학습시키지는 않습니다.
비유하자면, 외부 자료 지참이 가능한 시험 (오픈북)과 같습니다. 머릿속에 들어있지 않은 지식은 손안의 자료를 보고 답합니다.
AI가 모르는 정보를 그 자리에서 전달하여 답변을 생성하게 하는 메커니즘입니다.
| RAG | AI를 다시 학습시키기 | |
|---|
| AI 본체 | 변하지 않음 | 변함 |
| ... | | |
| 'RAG'라는 용어는 2020년 Lewis 등이 발표한 논문에서 유래했습니다. | | |
AI가 학습하여 가지고 있는 지식과, 외부에서 검색하여 가져오는 지식을 결합한다는 개념이었습니다. 당시 논문에서는 검색과 글쓰기를 결합한 AI를 과제에 맞춰 다시 학습시키고 있었습니다.
현재 AI 서비스에서 'RAG'라고 부를 때는, 검색된 결과를 AI에게 전달하는 지시문(프롬프트)에 덧붙여서 넘겨주는 방식을 가리키는 경우가 많습니다.
RAG의 장점
- 지식을 업데이트하고 싶을 때, AI를 다시 학습시키지 않아도 검색 대상으로 하는 자료만 교체하면 됩니다.
- 답변의 근거가 된 자료를 보여줄 수 있어 출처를 달기 쉽습니다.
- 사내 문서 등, AI가 학습하지 않은 정보를 다룰 수 있습니다.
RAG에서도 오류는 발생한다
RAG를 도입해도 할루시네이션(Hallucination)은 사라지지 않습니다. 어느 단계에서 실패할 수 있는지 단계별로 살펴보겠습니다.
| 단계 | 발생하는 일 |
|---|
| 검색 | 필요한 자료를 찾지 못함 |
| ... | |
| RAG는 AI에게 근거를 전달하는 메커니즘일 뿐, 답변의 정확성을 보장하는 메커니즘은 아닙니다. | |
실제로는 다음과 같은 고안과 함께 사용합니다.
- '자료에 쓰여 있지 않은 것은 답하지 않는다'고 지시한다.
- 출처를 반드시 인용하게 한다.
- 검색 결과가 부족할 때는 '모른다'고 답변하게 한다.
'Embedding'이란 무엇인가요? (건너뛰어도 OK)
RAG 이야기에서는 'Embedding(임베딩)'이나 '벡터 검색'이라는 단어도 자주 나옵니다. 이 글에서는 다음 정도의 이해면 충분합니다.
글의 '의미'를 숫자의 배열로 표현하여, 의미가 비슷한 글을 찾기 쉽게 하는 메커니즘입니다.
- 글을, 의미를 나타내는 숫자의 배열(벡터)로 변환하여 저장해 둡니다.
- 질문도 같은 방법으로 숫자의 배열로 변환합니다.
- 숫자의 배열이 가까운 글을 관련 자료로 가져옵니다.
대부분의 경우, 답변을 생성하는 AI와는 별도의, 변환 전용 AI를 사용합니다.
또한, 의미가 비슷한 것으로 찾는 방법 외에 키워드로 찾는 방법을 결합하는 경우도 많습니다. 제품명이나 모델 번호처럼 단어 자체가 일치하는 것이 중요한 검색에서는 키워드 검색이 더 적합하기 때문입니다.
3. System Prompt란 무엇인가요? 왜 User Prompt보다 우선시되나요?
AI를 서비스에 통합하는 창구(API)에서는 AI에게 전달하는 문장에 '역할'이라는 태그가 붙어 있는 경우가 있습니다.
| 역할 | 누가 | 무엇을 하는가 |
|---|---|
| System | 서비스 개발자 | AI에게, 역할・어조・지켜야 할 규칙 등을 미리 전달한다 |
| ... |
호칭이나 전달 방식은 서비스마다 다릅니다. 예를 들어 Claude에서는 System의 지시를 대화와는 별도의 항목으로 전달합니다.
다음과 같은 입력을 생각해 봅시다.
System:
반드시 한국어로 답변해 주세요.
User:
...
많은 AI에서 우선순위가 높은 역할(System)의 지시에 따라, 한국어 그대로 돌아옵니다. 하지만 확실하게 그렇다고는 할 수 없습니다.
우선순위는 '위치'가 아니라 '역할'로 결정된다
'System이 가장 위에 쓰여 있으니까 강한 것 아닌가?'라고 질문하는 경우가 있지만, 그렇게 단순하지 않습니다.
AI에게 전달되는 대화에는 '이 문장이 어느 역할에서 온 것인지'라는 정보가 붙어 있습니다. 그리고 역할별로 지시의 우선순위를 결정하는 개념이 있습니다.
OpenAI가 공개하는 AI의 행동 규칙(Model Spec)은 이를 '지휘 체계(chain of command)'라고 부릅니다. 2026년 8월 18일 버전에서는 다음 5단계가 있으며, 기본적으로 상위 단계의 지시가 우선됩니다.
또한, 검색 등의 도구가 반환한 정보나 신뢰할 수 없는 인용문은 초기 설정에서 명령으로 취급되지 않는다고 합니다.
그렇다면 AI는 이 우선순위를 어떻게 지키고 있을까요?
OpenAI의 연구 'The Instruction Hierarchy'(2024년)가 이 문제를 다루고 있습니다. 논문은 기존의 AI가 서비스 제작자의 지시(System Prompt)와 신뢰할 수 없는 제3자의 문서를 같은 무게로 취급하는 경향이 프롬프트 주입(Prompt Injection) 등을 허용하는 큰 원인이라고 지적했습니다.
그리고 우선순위가 낮은 지시가 높은 지시와 충돌했을 때는, 낮은 쪽을 무시하도록 AI에게 학습시키는 방법을 제안하고 있습니다.
즉, System Prompt가 강력한 것은 '제일 위에 있기 때문'이 아니라, 역할별 우선순위에 따르도록 AI가 학습으로 습득한 행동이기 때문입니다.
4. 그래도 프롬프트 주입(Prompt Injection)이 발생하는 이유는 무엇일까요?
우선순위가 있다면 사용자의 명령은 전부 무시할 수 있을 거라고 생각할 수도 있습니다.
하지만 현실에는 프롬프트 주입(Prompt Injection)(입력에 악의적인 지시를 숨겨 원래의 지시를 덮어쓰게 만드는 공격)이라는 문제가 있습니다.
그 이유는 우선순위가 학습으로 습득된 경향일 뿐, 컴퓨터의 '이 사람에게는 허용하지 않는다'와 같은 엄격한 규칙은 아니기 때문입니다.
상기 논문에서도 이 방법으로 공격에 대한 내성은 크게 높아지지만, '어떤 공격이라도 막을 수 있다'고는 말하고 있지 않습니다.
게다가 AI에게 있어서 명령이든, 조사할 자료든, 외부에서 가져온 문장이든, 결국은 모두 '글자 형태로 들어온 정보'입니다. 그 경계를 항상 완벽하게 구별할 수는 없습니다.
특히 주의해야 할 '간접적인' 프롬프트 주입
사용자가 직접 입력하는 공격만 있는 것은 아닙니다. 다음과 같은 장소에 숨겨진 지시를 AI가 읽어버릴 수 있습니다.
- AI가 열람한 웹페이지
- RAG로 가져온 문서
- 이메일이나 채팅의 첨부 파일
- 외부 서비스에서 반환된 데이터
예를 들어, '이 페이지를 요약해 달라'고 부탁했는데, 페이지에 숨겨져 있던 명령을 따르는 경우입니다.
비서가 이메리 읽어주는 것을 맡았는데, 메일 본문에 적힌 '이 지시에 따라 전 직원에게 전달하라'는 내용을 상사의 지시와 착각하는 것과 같습니다.
어떻게 대비할까
문장으로 된 지시만으로는 완벽하게 막을 수 없습니다. 따라서 시스템 차원에서 피해를 줄이는 노력이 중요합니다.
| 대비책 | 구체적으로 | :--- |
| 기밀 정보를 넣지 않기 | System Prompt에 기밀 정보가 들어가지 않도록 하기 (듣고 유출될 가능성이 있음) |
| ... |
'System Prompt에서 금지했으니 괜찮다'가 아니라, '뚫리더라도 큰 피해가 나지 않도록 만드는' 사고방식입니다.
중급 정리
| 테마 | 요약 |
|---|
| 환각(Hallucination) | 다음 단어를 예측하여 문장을 만드는 시스템과, 찍는 것이 유리한 채점 방식에서 발생함 |
| ... | |
| 후편에서는 이러한 지식을 바탕으로 'AI가 외부 서비스나 이미지 생성을 어떻게 사용하고 있는지'를 다룹니다. Function Calling의 메커니즘, 이미지 생성과의 연계, 그리고 뉴스에서 자주 보이는 '오픈 웨이트(open-weight)'와 '증류(distillation)'에 대해 설명합니다. | |
참고 자료
토론