brunch

공공기관 HWP 보고서, AI 비서에게 일 맡기기

공공기관 HWP 보고서, AI 비서에게 학습시켜 원하는 정보만 쏙쏙 뽑기

by 위키북스

개발자나 연구원이라면 누구나 한 번쯤 겪어봤을 난감한 상황이 있습니다. 바로 중요한 정보가 담긴 정부 부처나 공공기관의 보고서가 '아래아한글(.hwp)' 파일 형식일 때입니다. HWP 파일은 국내에서는 표준처럼 쓰이지만, 해외에서는 거의 사용되지 않아 대부분의 글로벌 오픈소스 라이브러리에서 지원하지 않는 경우가 많습니다. 결국 소중한 데이터가 파일 안에 갇혀버리는 '데이터 사일로(Data Silo)'가 되어버리죠.


하지만 이제 걱정할 필요 없습니다. 최신 AI 애플리케이션 개발 프레임워크인 라마인덱스(LlamaIndex)를 사용하면, 이 잠자는 HWP 문서를 깨워 똑똑한 AI 비서로 만들 수 있습니다.


오늘은 『LLM과 RAG로 구현하는 AI 애플리케이션』 4.6절의 내용을 바탕으로, HWP 파일을 직접 읽고 학습하여 우리가 원하는 정보만 정확히 찾아주는 RAG(검색 증강 생성) 시스템을 구축하는 실전 노하우를 공유해 드리겠습니다.





실전! HWP 보고서로 Q&A 챗봇 만들기

이번 실습에서는 '미국의 통화정책 변화가 외국자본 유출에 미치는 영향'이라는 제목의 HWP 연구 보고서를 AI에게 학습시킨 후, "미국 금리가 오르면 한국 시장은 어떻게 돼?"와 같은 질문에 막힘없이 대답하는 AI를 만들어 보겠습니다.(실습을 위한 데이터는 도서 홈페이지(https://wikibook.co.kr/llm-rag/) "예제코드" 탭에서 확인할 수 있습니다.)



1단계: 환경 설정 및 라이브러리 설치


가장 먼저, HWP 파일을 처리하는 데 필요한 라이브러리들을 설치해야 합니다. 라마인덱스에서는 HWP 파일을 읽기 위한 HWPReader를 제공하는데, 이를 사용하려면 몇 가지 패키지가 추가로 필요합니다.

llama-index-readers-file: 다양한 파일 형식을 읽는 리더 클래스들이 포함된 모듈입니다.

olefile: HWP 파일은 OLE(Object Linking and Embedding)라는 구조로 저장되기 때문에, 이 구조를 파이썬에서 읽고 쓸 수 있게 해주는 olefile 라이브러리가 반드시 필요합니다.


Bash
pip install llama-index-readers-file olefile



2단계: HWPReader로 문서 로드하기


라이브러리 설치가 끝났다면, 이제 본격적으로 HWP 파일을 로드해 보겠습니다. 코드는 놀라울 정도로 간단합니다.


Python
from llama_index.readers.file import HWPReader

# HWPReader 객체 생성
reader = HWPReader()

# HWP 파일 경로를 지정하여 데이터 로드
documents = reader.load_data("data/미국의 통화정책 변화가 외국자본 유출에 미치는 영향_20180528.hwp")

# 로드된 문서 개수와 내용 확인
print("로드된 문서 개수: ", len(documents))
print(documents[0])


HWPReader를 이용해 파일을 로드하면, HWP 보고서 전체 내용이 하나의 Document 객체로 깔끔하게 불러와집니다.


실행 결과:

로드된 문서 개수: 1
Doc ID: e1895107-021a-4530-9fad-90774b246be5
Text: 汤捯捤獥 氠瑢 漠杳 漠杳 漠杳 漠杳
2018년 5월 28일(월) 조간 漠杳 최우진 KDI 거시경제연구부 연구위원 (044-550-4053, wooj.choi@kdi.re.kr) 漠杳 2018년 5월 25일(금) 09:00 漠杳 KDI
홍보팀(044-550-4030, press@kdi.re.kr) 漠杳 桤灧 미국의 통화정책 변화가 외국자본 유출에 미치는 영향 漠杳 최우진 거시경제연구부 연구위원 氠瑢 湯湷
본고는 2018년
상반기... (하략)


실행 결과를 보면, 텍스트 중간에 汤捯捤獥 같은 정체불명의 한자들이 포함된 것을 볼 수 있습니다. 이는 원본 HWP 파일에 포함된 표 서식이나 특수 기호 등이 변환 과정에서 나타나는 현상입니다. 하지만 걱정하지 마세요. 책의 저자들에 따르면, 이런 문자들은 최종 답변 생성에 큰 영향을 주지 않으므로 그대로 진행해도 괜찮습니다.

SE-2a41aa34-a274-4206-ad96-7483f9b77f17.png?type=w966




3단계: AI가 이해하도록 데이터 가공 및 인덱싱


AI가 HWP 문서 전체를 한 번에 이해하기는 어렵습니다. 따라서 긴 문서를 의미 있는 작은 단위(Chunk)로 잘라주는 '텍스트 분할' 과정이 필수적입니다. 책에서는 '의미 기반 분할(Semantic Splitting)'이라는 고급 기법을 사용해 문맥이 끊기지 않도록 자연스럽게 텍스트를 나눕니다.


Python
from llama_index.core.node_parser import SemanticSplitterNodeParser
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings, VectorStoreIndex

# LLM과 임베딩 모델 설정
Settings.llm = OpenAI(model="gpt-4o", temperature=0.2)
Settings.embed_model = OpenAIEmbedding()

# 의미 기반 분할기 설정
semantic_splitter = SemanticSplitterNodeParser(
buffer_size=10,
breakpoint_percentile_threshold=80,
embed_model=Settings.embed_model
)

# 문서를 노드(Node)로 분할
hwp_nodes_semantic =
semantic_splitter.get_nodes_from_documents(documents)

# 분할된 노드를 기반으로 AI가 검색할 수 있도록 인덱스 생성
hwp_index = VectorStoreIndex(hwp_nodes_semantic)



4단계: AI 비서에게 질문하고 답변 받기


모든 준비가 끝났습니다. 이제 잘 학습된 AI 비서에게 질문을 던져 원하는 정보를 얻을 차례입니다. as_query_engine() 메서드를 통해 질문을 처리할 쿼리 엔진을 만듭니다.


Python
# 쿼리 엔진 생성 (질문과 가장 유사한 5개의 텍스트 조각을 참조하도록 설정)
hwp_query_engine = hwp_index.as_query_engine(similarity_top_k=5)

# 쿼리 실행
hwp_response = hwp_query_engine.query("미국 금리가 올라가면 한국 금융 시장은 어떤 영향을 받아? 한국어로 정리해 줘")

print(hwp_response)



최종 실행 결과


한국 금융 시장은 미국 금리가 올라갈 때 외국자본 유출이 발생할 수 있으며, 이는 주로 부채성 자금(채권 및 차입 투자)을 중심으로 이루어질 수 있습니다. 그러나 외국자본 유출의 규모는 한국의 경제 규모와 외환보유액 등 외환건전성 상황을 고려할 때 미미한 수준으로 평가될 수 있습니다. [cite: 1134]


AI 비서는 우리가 제공한 HWP 보고서 내용을 정확히 이해하고, "미국 금리 인상의 영향이 미미한 수준"이라는 핵심 내용을 요약하여 답변했습니다.





작동 방식 심층 분석


오늘 우리가 만든 시스템은 어떻게 HWP 문서의 내용을 이해하고 답변할 수 있었을까요? 그 과정은 다음과 같습니다.


로드: HWPReader가 HWP 파일의 복잡한 구조를 해석하고 순수 텍스트를 추출합니다.

분할 및 인덱싱: 추출된 긴 텍스트를 '의미 기반 분할'을 통해 문맥적으로 연관된 작은 조각(노드)들로 나눕니다. 각 조각은 임베딩 모델을 통해 의미를 나타내는 숫자 벡터로 변환되고, 검색이 용이한 VectorStoreIndex에 저장됩니다.

검색 (Retrieval): 우리가 "미국 금리 인상 영향"에 대해 질문하면, 이 질문 역시 벡터로 변환됩니다. AI는 이 질문 벡터와 가장 의미가 유사한 텍스트 조각 5개를 인덱스에서 신속하게 찾아냅니다.

생성 (Generation): 마지막으로, 원본 질문과 검색된 텍스트 조각 5개를 LLM(GPT-4o)에게 함께 전달하며 "이 내용을 참고해서 질문에 답해줘"라고 요청합니다. LLM은 제공된 HWP 문서의 실제 내용을 바탕으로 정확하고 신뢰도 높은 답변을 생성합니다.






결론: 잠자는 데이터를 깨우는 열쇠


오늘 우리는 『LLM과 RAG로 구현하는 AI 애플리케이션』의 실용적인 예제를 통해, 다루기 까다로웠던 HWP 파일을 AI가 이해하고 분석할 수 있는 귀중한 자산으로 바꾸는 방법을 배웠습니다. 이제 여러분도 공공기관 보고서, 회사 내부 자료 등 HWP 형식으로 잠자고 있던 데이터를 깨워 여러분만의 AI 비서를 만들 수 있습니다.


이 책에서는 HWP 파일 처리뿐만 아니라 PDF, CSV 등 더 다양한 문서 형식을 다루는 방법, 이미지와 텍스트를 함께 이해하는 다중모달 RAG, 실시간 데이터를 연동하는 펑션 콜링까지, 최신 AI 애플리케이션 개발의 모든 것을 실전 코드로 상세히 다루고 있습니다.


데이터의 형식을 넘어 그 안에 담긴 가치를 발견하고 싶다면, 이 책이 최고의 가이드가 되어줄 것입니다.


https://wikibook.co.kr/llm-rag/


이 책은 빠르게 진화하는 AI 기술 트렌드를 단순히 따라가는 데 그치지 않고 실제 구현과 통합에 필요한 핵심 통찰과 실용적인 해법을 제시하는 완성도 높은 실무 가이드입니다. 생성형 AI 기술의 주요 흐름을 실무 관점에서 체계적으로 다뤄 개발자와 기획자 모두가 RAG 시스템을 손쉽게 구축할 수 있도록 구성했습니다.


keyword
작가의 이전글www.google.com을 입력하면 일어나는 일