레이블이 환각현상인 게시물을 표시합니다. 모든 게시물 표시
레이블이 환각현상인 게시물을 표시합니다. 모든 게시물 표시

2026-10-12

RAG로 재난 매뉴얼 챗봇 만들기 | 기본 구조 | GeoAI 기초 24편

RAG로 재난 매뉴얼 챗봇 만들기 | 기본 구조 | GeoAI 기초 24편

🎬 1분 브리핑 영상

RAG로 재난 매뉴얼 챗봇을 만들려면 검색증강생성의 구성요소와 문서 근거 표기 방식을 먼저 이해해야 합니다.

📌 3줄 요약

  • RAG는 LLM이 답하기 전에 문서를 먼저 찾아 근거로 쓰는 구조
  • 매뉴얼·조례는 출처와 최신성이 생명이라 RAG가 특히 잘 맞음
  • 벡터 검색, 청크 분할, 출처 표기가 챗봇 신뢰도를 좌우함

재난 상황실에 전화가 걸려옵니다. "하천 수위가 위험 수위를 넘었을 때 대피 명령은 누가 내리나요?" 담당자는 수십 쪽짜리 매뉴얼과 조례집을 뒤적입니다. 이럴 때 챗봇이 즉시 답해주면 좋겠다는 생각, 누구나 한 번쯤 해봤을 겁니다.

문제는 일반 생성형 AI에게 그냥 물어보면 그럴듯하지만 틀린 답을 자신 있게 내놓을 수 있다는 점입니다. 매뉴얼에 없는 내용을 지어내거나, 작년에 개정된 조례를 모른 채 옛날 기준으로 답하기도 합니다. 재난 업무에서 이런 오답은 단순한 불편이 아니라 위험으로 이어질 수 있습니다. 그래서 등장한 방법이 검색증강생성, 줄여서 RAG입니다.

A smartphone on a wooden table showing an AI chatbot interface called DeepSeek.
자료사진 · 사진: Airam Dato-on / Pexels

🔍 RAG가 뭔가요? LLM이랑 뭐가 다른가요?

RAG는 Retrieval-Augmented Generation의 줄임말로, '검색한 뒤 생성한다'는 뜻입니다. 일반 거대언어모델(LLM, 방대한 텍스트로 학습해 문장을 만드는 AI)은 학습 당시 기억한 내용으로만 답합니다. 반면 RAG는 질문이 들어오면 먼저 관련 문서 조각을 찾아오고, 그 내용을 참고자료로 붙여서 답을 생성합니다. 비유하자면 일반 LLM은 암기한 지식으로 시험 보는 학생이고, RAG는 오픈북 시험을 보는 학생입니다. 책을 펴 놓고 답을 찾으니 틀릴 확률이 줄어듭니다. 재난 매뉴얼처럼 조항 하나하나가 법적 근거가 되는 문서에서는 암기보다 오픈북 방식이 훨씬 안전합니다.

🧩 RAG는 어떤 부품들로 이루어져 있나요?

RAG는 크게 네 가지로 구성됩니다. 첫째, 문서를 잘게 쪼개는 청크 분할(문서를 의미 단위로 나누는 작업). 둘째, 쪼갠 조각을 숫자 벡터로 바꾸는 임베딩(텍스트의 의미를 벡터 공간의 좌표로 표현하는 기술). 셋째, 질문과 비슷한 의미의 조각을 찾는 벡터 데이터베이스 검색. 넷째, 찾아온 조각을 근거로 답을 만드는 LLM입니다. 이 네 단계가 순서대로 돌아가야 "질문과 의미가 비슷한 매뉴얼 조항"을 정확히 찾아낼 수 있습니다. 홍수 대응 매뉴얼 챗봇이라면, "주의보와 경보의 차이"를 물었을 때 수백 쪽 중 해당 조항만 콕 집어 가져오는 게 바로 이 검색 단계의 역할입니다.

📋 매뉴얼·조례 같은 문서에 RAG가 특히 잘 맞는 이유는?

매뉴얼과 조례는 조항 번호, 발령 기준, 책임 소재가 명확히 적힌 '근거형 문서'입니다. 이런 문서는 창의적인 답보다 원문 그대로의 정확한 인용이 중요합니다. RAG는 LLM이 지식을 지어내는 대신 실제 문서 조각을 가져와 답하게 만들기 때문에, 환각(hallucination, AI가 사실이 아닌 내용을 그럴듯하게 만들어내는 현상)을 상당히 줄여줍니다. 또한 문서가 바뀌면 벡터 데이터베이스만 다시 만들면 되고, LLM 자체를 재학습시킬 필요가 없습니다. 산사태 위기대응 실무편람처럼 자주 개정되는 문서를 다루는 조직이라면, 모델을 새로 훈련하는 대신 문서 저장소만 갱신하는 RAG 구조가 운영비 면에서도 현실적입니다.

📎 챗봇이 "어디서 나온 답"인지 어떻게 보여주나요?

RAG의 가장 큰 장점 중 하나는 출처 표기가 자연스럽다는 점입니다. 검색 단계에서 이미 "몇 번째 문서, 몇 쪽, 몇 조항"이라는 정보를 함께 가져오기 때문에, 답변 끝에 "근거: OO시 재난대응 매뉴얼 3장 2절"처럼 출처를 붙이기가 수월합니다. 이 출처 표기는 단순한 친절 기능이 아니라 사용자가 답을 검증할 수 있게 해주는 안전장치입니다. 담당자가 챗봇 답을 그대로 믿지 않고 원문 조항을 열어 한 번 더 확인하는 습관을 들이는 것이 중요합니다. 대피소 운영 기준처럼 책임이 따르는 정보일수록, 출처 링크를 눌러 원문을 대조하는 절차를 조직 내 업무 규칙으로 만들어 두는 것이 좋습니다.

🗓️ 매뉴얼이 개정되면 챗봇은 어떻게 최신 정보를 따라가나요?

RAG의 약점은 검색 대상 문서 저장소, 즉 벡터 데이터베이스가 낡으면 아무리 검색을 잘해도 옛날 답을 준다는 점입니다. 조례가 개정되거나 매뉴얼이 새 버전으로 바뀌면, 반드시 기존 문서를 빼고 새 문서를 다시 청크 분할해 임베딩하는 갱신 작업을 해줘야 합니다. 이 과정을 자동화하지 않으면 "최신 조문"과 "예전 조문"이 뒤섞여 검색되는 일이 생길 수 있습니다. 실제로 운영해보면 개정 주기, 문서 버전 관리 규칙을 미리 정해두지 않고는 금방 꼬인다는 걸 알게 됩니다. 이건 해봐야 아는 부분이라, 소규모 문서 몇 개로 먼저 갱신 주기와 절차를 시험해보고 범위를 넓히는 방식을 권합니다.

🖥️ 화면에서 따라하기

따라하기 단계

  1. 문서 준비
    활용할 매뉴얼·조례 PDF나 한글 파일을 폴더 하나에 모은다
  2. 청크 분할
    문서를 문단·조항 단위로 나누는 도구(예: LangChain, LlamaIndex)로 텍스트를 쪼갠다
  3. 임베딩 생성
    쪼갠 텍스트를 임베딩 모델에 넣어 벡터로 변환한다
  4. 벡터 저장소 구축
    변환된 벡터를 Chroma, FAISS 같은 벡터 데이터베이스에 저장한다
  5. 질의응답 테스트
    실제 질문을 입력해 검색된 조각과 답변, 출처가 맞는지 확인한다
  6. 갱신 절차 점검
    문서를 개정판으로 교체한 뒤 벡터 저장소를 다시 만들어 반영되는지 확인한다

※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.

✍️ 그대로 복사해 쓰는 프롬프트

매뉴얼 PDF를 RAG용으로 분할할 기준을 LLM에게 설계받기

당신은 재난안전 분야 문서 관리 담당자를 돕는 어시스턴트입니다.
[재난 매뉴얼 이름]이라는 문서를 RAG 챗봇에 넣으려고 합니다.
이 문서는 [장, 절, 조항] 구조로 되어 있습니다.
검색 정확도를 높이기 위한 청크 분할 기준(길이, 겹침 범위, 기준 단위)을 제안해주세요.
또한 각 청크에 포함시켜야 할 메타데이터 항목(예: 장 제목, 조항 번호, 개정일)도 목록으로 알려주세요.
확실하지 않은 수치는 '상황에 따라 조정 필요'라고 표시해주세요.

※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.

🧪 직접 해보기

  • 공개된 LangChain이나 LlamaIndex 튜토리얼 문서로 간단한 RAG 예제를 직접 돌려보기
  • 가지고 있는 재난 매뉴얼 한 편을 조항 단위로 손으로 나눠보며 청크 분할 감 잡기
  • 챗봇 답변에 출처 조항을 붙였을 때와 안 붙였을 때 신뢰도 차이를 동료와 비교해보기

❓ 자주 묻는 질문

Q. RAG를 쓰면 챗봇이 절대 틀린 답을 안 하나요?
A. 아닙니다. 검색이 엉뚱한 조각을 가져오거나 문서 자체가 오래됐으면 틀린 답이 나올 수 있습니다. 출처를 항상 함께 표시해 사람이 검증하는 절차가 필요합니다.

Q. RAG를 쓰려면 LLM을 직접 학습시켜야 하나요?
A. 아닙니다. 기존 LLM을 그대로 쓰면서 검색 단계만 추가하는 구조라 별도의 모델 재학습이 필요 없는 경우가 많습니다. 대신 문서를 벡터로 만드는 준비 작업이 필요합니다.

Q. 벡터 데이터베이스는 꼭 유료 서비스를 써야 하나요?
A. 꼭 그렇지는 않습니다. Chroma, FAISS처럼 무료로 쓸 수 있는 오픈소스 도구도 있으며, 문서량과 운영 환경에 맞춰 선택하면 됩니다.

RAG의 네 가지 부품과 출처 표기, 최신성 관리의 중요성을 짚어봤으니, 다음 편에서는 실제로 재난 매뉴얼 챗봇을 어떤 도구로 처음부터 구축해보는 과정을 다뤄보겠습니다.

GeoAI 기초 시리즈 24편 · 전체 43편


재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.

📌 바로가기

2026-10-11

LLM 에이전트와 GIS 연동 | 자연어로 지도를 묻는다 | GeoAI 기초 23편

LLM 에이전트와 GIS 연동 | 자연어로 지도를 묻는다 | GeoAI 기초 23편

LLM 에이전트와 GIS 연동은 자연어로 질문하면 AI가 지도 기능을 대신 실행해 답을 찾아주는 구조를 뜻합니다. 이 글에서는 그 작동 원리와 믿고 써도 되는 조건을 살펴봅니다.

📌 3줄 요약

  • LLM 에이전트는 함수 호출로 GIS 기능을 직접 실행한다
  • 자연어 질의는 공간 질의 언어로 번역되는 중간 단계를 거친다
  • 결과를 그대로 믿지 말고 검증 장치를 거쳐야 신뢰할 수 있다

"우리 동네 침수 위험 지역을 지도로 보여줘"라고 채팅창에 입력하면 실제로 지도가 뜰까요. 예전 같으면 GIS 프로그램을 켜고, 침수 흔적도 레이어를 불러오고, 행정구역 경계와 겹쳐서 분석하는 과정을 사람이 손으로 해야 했습니다. 그런데 최근에는 대형 언어모델이 이 과정 중 상당 부분을 대신 수행하는 사례가 늘고 있습니다. 사람이 쓴 말을 이해하는 것과 실제로 지도 위에서 계산을 해내는 것은 전혀 다른 일인데, 그 사이를 이어주는 다리가 바로 도구 호출이라는 구조입니다. 이번 편에서는 그 다리가 어떻게 놓이는지, 그리고 왜 결과를 곧이곧대로 믿으면 안 되는지 짚어보겠습니다.

Close-up view of a modern car dashboard featuring a GPS map for navigation.
자료사진 · 사진: Mike Bird / Pexels

🧩 LLM이 어떻게 지도 기능을 직접 실행하나요?

언어모델은 원래 글을 생성하는 도구이지, 지도를 그리거나 거리 계산을 하는 도구가 아닙니다. 그런데 함수 호출(function calling)이라는 방식을 쓰면 이야기가 달라집니다. 개발자가 미리 "버퍼 분석", "최단 경로 찾기", "레이어 교차 분석" 같은 함수를 정의해두고, 각 함수가 어떤 입력을 받는지 설명서를 붙여줍니다. 그러면 언어모델은 사용자 질문을 보고 "이건 버퍼 분석이 필요하겠다"고 판단한 뒤, 자신이 글을 쓰는 대신 그 함수를 호출할 인자를 만들어 넘깁니다. 실제 계산은 GIS 엔진이나 공간 데이터베이스가 수행하고, 언어모델은 결과를 다시 사람 말로 풀어주는 역할만 합니다. 재난 상황에서는 "대피소 반경 500m 안에 사는 고령자 수를 알려줘" 같은 요청을 이런 식으로 즉시 처리할 수 있어, 현장 보고서를 사람이 일일이 만드는 시간을 줄여줍니다.

🗣️ 자연어 질문이 어떻게 공간 질의로 바뀌나요?

"학교 근처 산사태 위험지를 찾아줘"라는 문장에는 숨은 조건이 많습니다. '근처'가 몇 미터인지, '위험지'가 어느 등급 이상인지는 사람마다 다르게 해석할 수 있습니다. 언어모델은 이 모호한 말을 SQL이나 공간 질의 언어(예: ST_Buffer, ST_Intersects 같은 공간 데이터베이스 함수)로 바꾸는 과정에서 임의의 기본값을 채워 넣습니다. 이 번역 단계가 이 기술의 핵심이자 가장 조심해야 할 지점입니다. 같은 질문도 모델이 '근처'를 300m로 해석할 수도, 1km로 해석할 수도 있기 때문입니다. 실무에 적용한다면 번역된 질의문을 사람이 눈으로 한 번 확인하는 절차가 꼭 필요합니다. 산불 대피소 배치처럼 기준 거리가 법적·행정적으로 정해진 경우라면, 에이전트가 임의로 정한 반경이 실제 기준과 다를 수 있으니 반드시 대조해봐야 합니다.

🔍 결과를 어떻게 믿을 수 있나요?

언어모델은 그럴듯하게 틀린 답을 내놓는 경우가 있습니다(흔히 환각이라 부르는 현상으로, 존재하지 않는 정보를 사실처럼 말하는 것을 가리킵니다). GIS 연동 구조에서는 이 위험을 줄이기 위해 몇 가지 장치를 둡니다. 첫째, 언어모델이 직접 숫자를 계산하지 않고 반드시 함수 호출을 거치게 강제합니다. 둘째, 함수가 반환한 원본 데이터와 모델이 요약한 문장을 함께 보여줘서 사람이 대조할 수 있게 합니다. 셋째, 중요한 의사결정 앞에는 사람이 최종 확인하는 단계(흔히 human-in-the-loop이라 부릅니다)를 넣습니다. 해봐야 아는 것은 바로 이 지점인데, 같은 질문을 두세 번 다르게 표현해 넣어보고 결과값이 바뀌는지 확인하는 것만으로도 신뢰도를 가늠할 수 있습니다. 대피 경로 안내처럼 사람의 안전과 직결되는 결과는 에이전트의 응답을 참고자료로만 쓰고, 실제 전파 전에는 담당자가 지도 원본을 직접 열어 재확인하는 절차를 두는 것이 안전합니다.

⚠️ 어떤 상황에서 조심해야 하나요?

도구 호출 구조는 정의된 함수 범위 안에서만 똑똑합니다. 함수 설명서에 없는 분석은 언어모델이 비슷한 이름의 함수를 억지로 끌어다 쓰거나, 아예 할 수 없다고 답하거나, 더 나쁘게는 할 수 있는 척 거짓 결과를 만들어낼 수 있습니다. 또한 좌표계가 다른 데이터를 섞어 쓰면 함수는 정상 작동해도 결과 위치가 실제와 어긋나는 경우가 생기는데, 이는 언어모델이 좌표계 불일치를 스스로 알아채지 못하기 때문입니다. 실시간 데이터(예: 현재 수위, 실시간 풍향)를 다루는 경우에는 에이전트가 참조하는 데이터가 몇 분 전 값인지도 확인 대상입니다. 홍수 상황실에서 이런 도구를 쓴다면, 자동 응답에 찍힌 시각과 실제 관측 시각이 일치하는지 매번 확인하는 습관이 필요합니다.

🏢 실무에 도입하려면 무엇부터 봐야 하나요?

당장 큰 시스템을 구축하지 않아도, 개념을 검증하는 수준의 작은 실험은 누구나 해볼 수 있습니다. 공개된 지도 API나 오픈소스 GIS 라이브러리에 함수 몇 개만 정의해 붙여보면, 자연어 질문이 어떤 함수 호출로 바뀌는지 직접 눈으로 볼 수 있습니다. 중요한 것은 처음부터 완전 자동화를 목표로 하지 않는 것입니다. 재난안전 분야처럼 결과가 사람의 생명과 연결되는 영역에서는, 에이전트가 제안한 분석 결과를 담당자가 검토하고 승인하는 단계를 중간에 반드시 넣는 구조로 설계하는 것이 지금 시점에서는 현실적인 접근입니다.

🖥️ 화면에서 따라하기

따라하기 단계

  1. 함수 목록 정하기
    버퍼분석, 최단경로 등 GIS에서 자주 쓰는 기능 3~4개를 함수로 정의할 목록 작성
  2. 설명서 작성
    각 함수가 받는 입력값(반경, 좌표 등)과 출력 형식을 글로 정리
  3. 도구 연결
    챗봇 플랫폼의 '도구 추가' 또는 'Function/Tools' 설정 메뉴에서 함수 등록(메뉴명은 플랫폼마다 다름)
  4. 테스트 질문 입력
    채팅창에 "A 지점에서 1km 이내 대피소 찾아줘"처럼 질문 입력
  5. 호출 로그 확인
    모델이 어떤 함수를 어떤 값으로 호출했는지 로그 또는 디버그 화면에서 확인
  6. 결과 대조
    반환된 좌표·수치를 원본 GIS 프로그램에서 직접 열어 일치 여부 확인

※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.

✍️ 그대로 복사해 쓰는 프롬프트

자연어 질문을 공간 질의 조건으로 명확히 분해해보는 연습용 프롬프트

너는 GIS 분석을 돕는 보조자야. 아래 질문을 공간 질의로 바꾸기 전에 모호한 부분을 먼저 질문해줘.
질문: [여기에 자연어 질문 입력, 예: 학교 근처 산사태 위험지역을 찾아줘]
확인할 항목: 거리 기준(미터 단위), 위험 등급 기준, 사용할 데이터 레이어 이름, 좌표계
모호한 항목이 있으면 가정하지 말고 반드시 되물어봐줘. 가정이 필요하면 가정했다는 사실을 명시해줘.

※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.

🧪 직접 해보기

  • 공개 지도 서비스의 챗봇 기능(있다면)에 거리·반경 조건을 넣어 질문해보고 답변 근거를 확인해본다
  • 같은 질문을 표현만 바꿔 두세 번 입력해보고 결과(반경, 기준)가 달라지는지 비교해본다
  • 오픈소스 GIS 커뮤니티 문서에서 'function calling' 또는 'agent' 관련 예제를 찾아 구조를 읽어본다

❓ 자주 묻는 질문

Q. LLM 에이전트가 GIS 프로그램을 대체할 수 있나요?
A. 현재는 대체보다는 보조에 가깝습니다. 함수 호출 범위 안에서만 작동하므로, 복잡하거나 정교한 공간분석은 여전히 전문가의 설계와 검증이 필요합니다.

Q. 자연어 질의 결과를 재난 대응에 바로 써도 되나요?
A. 생명과 직결되는 의사결정에는 바로 쓰지 않는 것이 안전합니다. 반드시 원본 데이터와 대조하고 담당자 확인을 거치는 절차를 두어야 합니다.

Q. 함수 호출과 그냥 AI에게 코드를 짜달라고 하는 것은 뭐가 다른가요?
A. 코드 생성은 사람이 코드를 검토하고 실행해야 하지만, 함수 호출은 미리 정의된 안전한 함수 안에서 AI가 직접 실행까지 이어간다는 점이 다릅니다. 그만큼 통제된 범위 설계가 중요합니다.

자연어로 지도에 질문하는 경험은 신기하지만, 그 뒤에는 함수 설계와 검증 장치라는 꼼꼼한 공학이 숨어 있습니다. 다음 편에서는 이런 에이전트가 여러 데이터 출처를 오가며 스스로 분석 계획을 세우는 경우 무엇을 더 점검해야 하는지 이야기해보겠습니다.

GeoAI 기초 시리즈 23편 · 전체 43편


재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.

📌 바로가기

NaGeoAI 실제 QGIS 실습 16 — 의미론적 분할 모델 학습과 새 영상 건물 추론

본 실습에서는 NaGeoAI의 의미론적 분할 패널을 이용하여 건물 라벨로 학습 타일을 만들고, U-Net 모델을 직접 학습한 뒤, 학습에 쓰지 않은 다른 영상에 추론하여 건물 마스크를 생성하였다. 2026년 10월 13일 QGIS 데스크톱에서 실제 입...