안녕하세요! 오늘은 ChatGPT를 활용한 내부 문서 요약 및 검색 시스템 만들기에 대해서 알아보려 합니다.
회사 내부에 쌓여 있는 수많은 문서—매뉴얼, 교육자료, 회의록, 기획서 등—을 빠르게 찾고 이해하는 것은 매우 중요한 업무 능력입니다.
하지만 여전히 많은 조직은 문서를 찾기 위해 폴더를 일일이 뒤지고, 긴 문서를 일일이 읽어야 하는 비효율에 시달리고 있죠.
이번 글에서는 OpenAI의 ChatGPT API와 함께 벡터 검색, 문서 임베딩, 요약 기능을 결합한 “문서 요약·검색 시스템”을 구축하는 방법을 단계별로 알려드리겠습니다.
1. 전체 시스템 설계 및 흐름
이 시스템의 흐름도는 다음과 같습니다.
① 문서 수집 → ② 임베딩 생성 → ③ 벡터 DB에 저장 → ④ 사용자 질문 → ⑤ 유사 문서 검색 → ⑥ 요약 + 검색 결과 제공
- 문서 수집: PDF, 워드 문서, 텍스트 파일을 스크립트로 추출합니다.
- 임베딩 생성: OpenAI의 임베딩 API로 문장 또는 단락 단위 임베딩을 생성합니다.
- 벡터 DB 저장: Pinecone, Weaviate, Milvus 등의 벡터 DB에 임베딩과 메타데이터를 저장합니다.
- 사용자 검색: 사용자가 시스템에 질문을 입력하면 가벼운 프롬프트로 임베딩을 생성합니다.
- 유사 문서 검색: 벡터 DB에서 cosine 유사도 기준으로 상위 결과를 획득합니다.
- 요약 및 응답: 검색된 문서/단락을 ChatGPT에게 요약 + 답변 형식으로 구성합니다.
2. 실습 예제 – Python 기반 샘플 코드
# 필요한 라이브러리 설치
pip install openai pinecone-client tiktoken
# document_search.py
import os
import openai
import pinecone
import glob
from tiktoken import get_encoding
# 환경 설정
openai.api_key = os.getenv("OPENAI_API_KEY")
pinecone.init(api_key=os.getenv("PINECONE_API_KEY"), environment="us-west1-gcp")
index = pinecone.Index("company-doc-index")
# 문서 수집 및 임베딩 생성
docs = glob.glob("docs/*.txt")
for doc_path in docs:
with open(doc_path, "r", encoding="utf-8") as f:
text = f.read()
# 문장을 분할
chunks = [text[i:i+500] for i in range(0, len(text), 500)]
for i, chunk in enumerate(chunks):
embedding = openai.Embedding.create(input=chunk, model="text-embedding-ada-002")["data"][0]["embedding"]
meta = {"doc": os.path.basename(doc_path), "chunk_index": i}
index.upsert([(f"{os.path.basename(doc_path)}_{i}", embedding, meta)])
# 질문 처리 함수
def answer_question(query):
q_embed = openai.Embedding.create(input=query, model="text-embedding-ada-002")["data"][0]["embedding"]
results = index.query(vector=q_embed, top_k=3, include_metadata=True)
contexts = []
for r in results["matches"]:
contexts.append(f"문서: {r['metadata']['doc']}, 내용: {r['metadata']['chunk_index']}: {r['id']}")
prompt = "다음은 내부 문서 내용의 일부입니다. 질문에 맞춰 요약하고 답해주세요:\n\n"
for c in contexts:
prompt += c + "\n"
prompt += "\n질문: " + query + "\n요약 및 답변:"
resp = openai.Completion.create(engine="text-davinci-003", prompt=prompt, max_tokens=200, temperature=0.5)
return resp.choices[0].text.strip()
# 예시 실행
if __name__ == "__main__":
user_q = input("궁금한 내용을 입력하세요: ")
print(answer_question(user_q))
\
이 코드를 실행하면 기본적인 벡터 검색과 요약 응답 기능을 테스트할 수 있습니다.
3. 사용자 가이드 – 설정에서 실행까지
- `.env` 파일에 OPENAI_API_KEY, PINECONE_API_KEY를 입력하세요.
- `docs/` 폴더를 생성하고, 예시 문서(.txt)를 넣습니다.
- 스크립트를 실행해 벡터 인덱스가 정상적으로 생성되었는지 확인하세요.
- 질문을 입력해 요약 응답이 나오는지 확인합니다.
- 실제 조직 내부 문서(.pdf, .md 등)를 `.txt`로 변환 후 재실행해보세요.
4. 고급 확장 및 성능 최적화 팁
- PDF는 `pdfminer.six` 등을 통해 텍스트 추출 후 임베딩에 사용하세요.
- 더 작은 단위(문단, 문장)로 쪼개면 검색 정확도가 올라갑니다.
- 벡터 DB의 `namespace` 기능을 활용해 팀/부서별 문서 분리 저장이 가능합니다.
- Pinecone 무료 티어의 인덱스 크기와 쿼터 한도를 확인하세요.
- 검색 성능 모니터링을 위해 `response_ms`, `num_vectors_queried` 같은 지표를 로그하세요.
5. 활용 사례 예시
- 팀 회의 시 관련 기획서 요약 및 참고 문단 즉시 제공
- 교육 담당자가 신규 입사자를 위한 교육 자료 요약 및 링크 제공
- 문서 업데이트 시 변경된 부분만 요약해 알려주는 히스토리 리포터로 확장 가능
반응형
오늘은 ChatGPT와 벡터 검색을 활용한 내부 문서 요약 및 검색 시스템 구축 방법을 살펴보았습니다.
다음 시간에는 ChatGPT를 활용한 실시간 알림 및 대시보드 통합 시스템 만들기에 대해서 알아보도록 할게요!
'ChatGPT 실무 활용 시리즈' 카테고리의 다른 글
ChatGPT를 활용한 고객 문의 자동 응답 시스템 구축하기 (0) | 2025.05.25 |
---|---|
ChatGPT를 활용한 마케팅 콘텐츠 자동 생성 시스템 만들기 (1) | 2025.05.24 |
ChatGPT를 활용한 고객 피드백 분석 시스템 구축하기 (0) | 2025.05.23 |
ChatGPT를 활용한 제품 추천 시스템 만들기 (1) | 2025.05.23 |
ChatGPT를 활용한 고객 서비스 챗봇 구축하기 (1) | 2025.05.23 |
ChatGPT를 활용한 이메일 마케팅 자동화 시스템 만들기 (0) | 2025.05.21 |
ChatGPT로 블로그 글 자동 생성 시스템 만들기 (1) | 2025.05.21 |
ChatGPT를 활용한 사용자 맞춤형 추천 시스템 구현 (1) | 2025.05.21 |