PDF를 읽어들여 문서 내용에서 검색을 하도록 해보려고요.
# API 키를 환경변수로 관리하기 위한 설정 파일
from dotenv import load_dotenv
# API 키 정보 로드
load_dotenv()요
.env 파일의 내용을 읽어와 사용을 합니다
from docling.document_converter import DocumentConverter
#로컬 경로 지정 (URL 가능)
source ="data/SPRI_AI_Brief_2023년12월호_F.pdf"
converter = DocumentConverter()
result = converter.convert(source)
# print(result.document.export_to_json())
print(result.document.export_to_markdown())
## SPRi Al Brief
2023년 12월호
<!-- image -->
<!-- image -->
## CONTENTS
## Ⅰ . 인공지능 산업 동향 브리프
## 1. 정책/법제
| ▹ 미국, 안전하고 신뢰할 수 있는 AI 개발과 사용에 관한 행정명령 발표 ························· 1 ▹ G7, 히로시마 AI 프로세스를 통해 AI 기업 대상 국제 행동강령에 합의 ··························· 2 ▹ 영국 AI 안전성 정상회의에 참가한 28개국, AI 위험에 공동 대응 선언 ··························· 3 ▹ 미국 법원, 예술가들이 생성 AI 기업에 제기한 저작권 소송 기각 ····································· 4 ▹ 미국 연방거래위원회, 저작권청에 소비자 보호와 경쟁 측면의 AI 의견서 제출·················5 ▹ EU AI 법 3자 협상, 기반모델 규제 관련 견해차로 난항 ··················································· 6 |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 2. 기업/산업 |
| ▹ 미국 프런티어 모델 포럼, 1,000만 달러 규모의 AI 안전 기금 조성 ································ 7 ▹ 코히어, 데이터 투명성 확보를 위한 데이터 출처 탐색기 공개 ······································· 8 ▹ 알리바바 클라우드, 최신 LLM '통이치엔원 2.0' 공개 ······················································ 9 ▹ 삼성전자, 자체 개발 생성 AI '삼성 가우스' 공개 ··························································· 10 ▹ 구글, 앤스로픽에 20억 달러 투자로 생성 AI 협력 강화 ················································ 11 ▹ IDC, 2027년 AI 소프트웨어 매출 2,500억 달러 돌파 전망 ··········································· 12 ▹ 빌 게이츠, AI 에이전트로 인한 컴퓨터 사용의 패러다임 변화 전망 ································ 13 ▹ 유튜브, 2024년부터 AI 생성 콘텐츠 표시 의무화 ···························································· 14 3. 기술/연구 ▹ 영국 과학혁신기술부, AI 안전 연구소 설립 발표 ······························································ 15 ▹ 구글 딥마인드, 범용 AI 모델의 기능과 동작에 대한 분류 체계 발표 ······························ 16 ▹ 갈릴레오의 LLM 환각 지수 평가에서 GPT-4가 가장 우수 ··········································· 17 4. 인력/교육 ▹ 영국 옥스퍼드 인터넷 연구소, AI 기술자의 임금이 평균 21% 높아 ······························· 18 Ⅱ . 주요 행사 |
## Ⅰ . 인공지능 산업 동향 브리프
## 미국, 안전하고 신뢰할 수 있는 AI 개발과 사용에 관한 행정명령 발표
## KEY Contents
...
<!-- image -->
홈페이지 : https://spri.kr/ 보고서와 관련된 문의는 AI정책연구실(jayoo@spri.kr, 031-739-7352)으로 연락주시기 바랍니다.
from docling.datamodel.base_models import InputFormat
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.datamodel.pipeline_options import PdfPipelineOptions, TableFormerMode
pipeline_options = PdfPipelineOptions(do_table_structure=True) # 테이블 구조를 유지하도록 설정, 테이블 구조 추출 활성화
pipeline_options.table_structure_options.mode = TableFormerMode.ACCURATE # 테이블 구조 추출 모드를 정확하게 설정
doc_converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options) # PDF 입력 포맷에 대한 파이프라인 옵션 설정 추가
}
)
# 로컬 경로 문서 지정(URL가능)
source = "data/SPRI_AI_Brief_2023년12월호_F.pdf"
result = doc_converter.convert(source)
print(result.document.export_to_markdown()) # 변환 결과를 마크다운 형식으로 출력
문서청킹 (chunking)
- Docling은 문서를 의미 있는 단위로 나누는 청킹기능 제공
- HybridChunker 클래스는 토크나이저 설정을 통해 문서 청킹 수행
- chunk_iter 를 통해 청킹된 문서 단위에 순차적 접근
from docling.document_converter import DocumentConverter from docling.chunking import HybridChunker
#문서에서 청크 생성
conv_res = DocumentConverter().convert("data/SPRI_AI_Brief_2023년12월호_F.pdf")
doc = conv_res.document
chunker = HybridChunker(
tokenizer="BAAI/bge-m3",
chunker_size=1000,
overlap=100,
)
chunk_iter = chunker.chunk(doc) # 청크 생성기 생성
chunkers = list(chunk_iter) # 청크 생성기를 리스트로 변환
print(len(chunkers)) # 청크 개수 출력
print(chunkers[0]) # 청크의 첫 번째 요소 출력
- 문서에서 표 추출 및 CSV 내보내기
import time
from pathlib import Path
import pandas as pd
from docling.document_converter import DocumentConverter
def extract_and_export_tables(input_path, output_directory):
"""문서에서 표를 추출하고 CSV 파일로 저장하는 함수"""
output_directory.mkdir(parents=True, exist_ok=True) # 출력 디렉토리 생성
doc_converter = DocumentConverter() # 문서 변환기 생성
start_time = time.time() # 시작 시간 기록
print("문서 변환 시작 : {input_path}")
# 문서 변환 및 표 추출
conv_res = doc_converter.convert(input_path)
doc_filename = conv_res.input.file.stem
# 표 추출 결과를 CSV 파일로 내보내기
for i, table in enumerate(conv_res.document.tables):
table_df = table.export_to_dataframe() # 표를 데이터프레임으로 변환
print(f"표 {i+1} 추출 완료")
print(table_df.to_markdown()) # 표를 마크다운 형식으로 출력
#표를 cvs로 저장
csv_filename = output_directory / f"{doc_filename}_table_{i+1}.csv"
print(f"saving cvs table to {csv_filename}")
table_df.to_csv(csv_filename, encoding='utf-8') # 표를 CSV 파일로 저장
# 표를 html로 저장
html_filename = output_directory / f"{doc_filename}_table_{i+1}.html"
print(f"Saving HTML table to {html_filename}")
with html_filename.open("w", encoding='utf-8') as f:
f.write(table.export_to_html()) # 표를 HTML 파일로 저장
# 변환 소요 시간 계산
elapsed_time = time.time() - start_time
print(f"문서 변환 및 표 추출 완료 : {input_path} , {elapsed_time:.2f}초 소요")
#추출된 표 수 확인
table_count = len(conv_res.document.tables)
print(f"추출된 표 수 : {table_count} EA")
return table_count
output_dir = Path("output")
output_dir.mkdir(parents=True, exist_ok=True)
try:
table_count = extract_and_export_tables("data/SPRI_AI_Brief_2023년12월호_F.pdf", output_dir)
print(f"성공적으로 표를 추출 : {table_count} EA")
except Exception as e:
print(f"표 추출 중 오류 발생 : {e}")
* 출력 결과
```문서 변환 시작 : {input_path}
표 1 추출 완료
| | 0 |
|---:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 0 | ▹ 미국, 안전하고 신뢰할 수 있는 AI 개발과 사용에 관한 행정명령 발표 ························· 1 ▹ G7, 히로시마 AI 프로세스를 통해 AI 기업 대상 국제 행동강령에 합의 ··························· 2 ▹ 영국 AI 안전성 정상회의에 참가한 28개국, AI 위험에 공동 대응 선언 ··························· 3 ▹ 미국 법원, 예술가들이 생성 AI 기업에 제기한 저작권 소송 기각 ····································· 4 ▹ 미국 연방거래위원회, 저작권청에 소비자 보호와 경쟁 측면의 AI 의견서 제출·················5 ▹ EU AI 법 3자 협상, 기반모델 규제 관련 견해차로 난항 ··················································· 6 |
| 1 | 2. 기업/산업 |
| 2 | ▹ 미국 프런티어 모델 포럼, 1,000만 달러 규모의 AI 안전 기금 조성 ································ 7 ▹ 코히어, 데이터 투명성 확보를 위한 데이터 출처 탐색기 공개 ······································· 8 ▹ 알리바바 클라우드, 최신 LLM '통이치엔원 2.0' 공개 ······················································ 9 ▹ 삼성전자, 자체 개발 생성 AI '삼성 가우스' 공개 ··························································· 10 ▹ 구글, 앤스로픽에 20억 달러 투자로 생성 AI 협력 강화 ················································ 11 ▹ IDC, 2027년 AI 소프트웨어 매출 2,500억 달러 돌파 전망 ··········································· 12 ▹ 빌 게이츠, AI 에이전트로 인한 컴퓨터 사용의 패러다임 변화 전망 ································ 13 ▹ 유튜브, 2024년부터 AI 생성 콘텐츠 표시 의무화 ···························································· 14 3. 기술/연구 ▹ 영국 과학혁신기술부, AI 안전 연구소 설립 발표 ······························································ 15 ▹ 구글 딥마인드, 범용 AI 모델의 기능과 동작에 대한 분류 체계 발표 ······························ 16 ▹ 갈릴레오의 LLM 환각 지수 평가에서 GPT-4가 가장 우수 ··········································· 17 4. 인력/교육 ▹ 영국 옥스퍼드 인터넷 연구소, AI 기술자의 임금이 평균 21% 높아 ······························· 18 Ⅱ . 주요 행사 |
saving cvs table to output\SPRI_AI_Brief_2023년12월호_F_table_1.csv
Saving HTML table to output\SPRI_AI_Brief_2023년12월호_F_table_1.html
표 2 추출 완료
| | 0 | 1 | 2 | 3 |
|---:|:-------------|:-------------|:-------------|:-------------|
| 0 | 1. 정책/법제 | 2. 기업/산업 | 3. 기술/연구 | 4. 인력/교육 |
saving cvs table to output\SPRI_AI_Brief_2023년12월호_F_table_2.csv
Saving HTML table to output\SPRI_AI_Brief_2023년12월호_F_table_2.html
표 3 추출 완료
| | 성능 | 특수 AI 예시 | 범용 AI 예시 |
|---:|:---------------------------------------|:---------------------------------------------------------------------|:---------------------|
| 0 | 0단계: AI 아님 | 계산기 소프트웨어, 컴파일러 | 아마존 메커니컬 터크 |
| 1 | 1단계: 신진(숙련되지 않은 인간) | GOFAI(Good Old Fashioned Artificial Intelligence) | 챗GPT, 바드, 라마2 |
| 2 | 2단계: 유능(숙련된 인간의 50% 이상) | 스마트 스피커(애플 시리, 아마존 알렉사, 구글 어시스턴트), IBM 왓슨 | 미달성 |
| 3 | 3단계: 전문가(숙련된 인간의 90% 이상) | 문법 교정기(그래머리), 생성 이미지 모델(달리2) | 미달성 |
| 4 | 4단계: 거장(숙련된 인간의 99% 이상) | 딥블루, 알파고 | 미달성 |
| 5 | 5단계: 초인간(인간을 100% 능가) | 알파폴드, 알파제로, 스톡피시 | 미달성 |
saving cvs table to output\SPRI_AI_Brief_2023년12월호_F_table_3.csv
...
Saving HTML table to output\SPRI_AI_Brief_2023년12월호_F_table_4.html
문서 변환 및 표 추출 완료 : data/SPRI_AI_Brief_2023년12월호_F.pdf , 134.06초 소요
추출된 표 수 : 4 EA
성공적으로 표를 추출 : 4 EA
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
import os
from pathlib import Path
from tempfile import mkdtemp
from pprint import pprint
from dotenv import load_dotenv
from langchain_core.prompts import PromptTemplate
from langchain_docling.loader import ExportType
# from langchain_docling.vectorstore import MilvusVectorStore
load_dotenv()
os.environ["TOKENIZERS_PARALLELISM"] = "false" # 토크나이저 병렬화 비활성화
xhl
# 문서 경로 및 모델 ID 설정
FILE_PATH = ["data/SPRI_AI_Brief_2023년12월호_F.pdf"]sp
EMBED_MODEL_ID = "Alibaba-NLP/gte-multilingual-base" # 임베딩 모델
RERANKER_MODEL_ID = "Alibaba-NLP/gte-multilingual-reranker-base" # 리랭크모델
EXPORT_TYPE = ExportType.DOC_CHUNKS # 문서 청크 추출 타입 설정
# 프롬프트 설정
RAG_PROMPT_TEMPLATE = """
Context information is below.
-------------------------
{context}
-------------------------
Given the context information and not prior knowledge, anser the query.
Query : {input}
Answer (in 한국어) :
"""
RAG_PROMPT = PromptTemplate.from_template(RAG_PROMPT_TEMPLATE)
MILVUS_URI = "http://localhost:19530"
from langfuse.callback import CallbackHandler
from langfuse import Langfuse
# langfuse handler 설정
langfuse_handler = CallbackHandler()
langfuse = Langfuse()
#정상 작동 확인
assert langfuse_handler.auth_check()
assert langfuse.auth_check()
#문서 로딩 및 청킹
from langchain_docling import DoclingLoader
from docling.chunking import HybridChunker
# DoclingLoader 초기화 및 로딩
loader = DoclingLoader(
file_path=FILE_PATH, #문서 경로
export_type=EXPORT_TYPE.DOC_CHUNKS, # 문서를 청크로 분할
chunker=HybridChunker(tokenizer=EMBED_MODEL_ID), # 문서 청크 추출 타입 설정
)
docs = loader.load() # 문서 로딩
print(f"Loaded {len(docs)} documents") # 로딩된 문서 개수 출력 (청크 개수)
print(docs[0]) # 첫 번째 문서 출력
#print(docs[0].page_content) # 첫 번째 문서의 페이지 내용 출력
#print(docs[0].metadata) # 첫 번째 문서의 청크 내용 출력
Loaded 46 documents
page_content='SPRi Al Brief
2023년 12월호' metadata={'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/1', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 1, 'bbox': {'l': 256.579, 't': 569.993, 'r': 355.424, 'b': 555.967, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 11]}]}], 'headings': ['SPRi Al Brief'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}
#pip install pymilvus langchain
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_milvus import Milvus
# from langchain.embeddings import HuggingFaceEmbeddings
# from langchain_milvus import Milvus
# from langchain.vectorstores import Milvus
# 임베딩 모델 초기화
embedding = HuggingFaceEmbeddings(model_name=EMBED_MODEL_ID, model_kwargs={"trust_remote_code":True})
# 임베딩 생성 모델 초기화
vectorstore = Milvus.from_documents(
documents=docs,
embedding=embedding,
collection_name="docling_transformer", # 컬렉션 이름 설정
connection_args={
"uri": MILVUS_URI, # Milvus URI 설정 연결정보
"db_name" : "default" # edu 데이터베이스 설정
},
index_params={
"index_type": "FLAT", # 인덱스 타입 설정 IVF_FLAT
"metric_type": "COSINE", # 거리 측정 방식 설정 L2, IP, COSINE
},
drop_old=True, # 기존 데이터 삭제
)
from langchain_huggingface import HuggingFaceEndpoint
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
# 검색기 초기화
base_retriever = vectorstore.as_retriever(search_kwargs={"k": 5}) # 검색기 초기화
# CrossEncoderReranker 모델을 사용한 reranker 초기화
re_ranker = CrossEncoderReranker(
model=HuggingFaceCrossEncoder(model_name=RERANKER_MODEL_ID, model_kwargs={"trust_remote_code":True}),
top_n=3, # CrossEncoder 모델 초기화
)
# CrossEncoderReranker를 사용한 검색기 초기화
cross_encoder_reranker_retriever = ContextualCompressionRetriever(
base_compressor=re_ranker,
base_retriever=base_retriever,
)
# 최종 retriever 테스트
retrived_docs = cross_encoder_reranker_retriever.invoke("AI동향 중 23년 12월호 내용은?")
for doc in retrived_docs:
print(doc.page_content)
print(doc.metadata)
print("-"*100)
\huggingface\hub\models--Alibaba-NLP--gte-multilingual-reranker-base. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.
To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development
warnings.warn(message)
SPRi Al Brief
2023년 12월호
{'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/1', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 1, 'bbox': {'l': 256.579, 't': 569.993, 'r': 355.424, 'b': 555.967, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 11]}]}], 'headings': ['SPRi Al Brief'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}, 'pk': 456834544881133880}
----------------------------------------------------------------------------------------------------
KEY Contents
n IDC의 예측에 의하면 AI 소프트웨어 시장은 2027년 2,510억 달러로 달할 전망이며, 생성 AI 플랫폼과 애플리케이션은 2027년까지 283억 달러의 매출을 창출할 전망
n 2023년 기준 AI 소프트웨어 매출의 3분의 1을 차지하는 최대 시장인 AI 애플리케이션은 2027년까지 21.1%의 연평균 성장률을 기록할 전망
{'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/215', 'parent': {'$ref': '#/groups/26'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 15, 'bbox': {'l': 87.36, 't': 689.4, 'r': 533.64, 'b': 659.4, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 102]}]}, {'self_ref': '#/texts/216', 'parent': {'$ref': '#/groups/26'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 15, 'bbox': {'l': 87.36, 't': 647.4, 'r': 533.52, 'b': 617.4, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 95]}]}], 'headings': ['KEY Contents'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}, 'pk': 456834544881133907}
----------------------------------------------------------------------------------------------------
KEY Contents
n 빌 게이츠가 5년 내 일상언어로 모든 작업을 처리할 수 있는 AI 에이전트가 보급되며 컴퓨터를 사용하는 방식이 완전히 바뀔 것으로 예상
n 에이전트의 보급은 컴퓨터 분야를 넘어 산업 전 영역에 영향을 미칠 전망으로 특히 의료와 교육, 생산성, 엔터테인먼트·쇼핑 영역에서 고가로 제공되던 서비스가 대중화될 전망
{'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/235', 'parent': {'$ref': '#/groups/28'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 87.36, 't': 689.4, 'r': 533.88, 'b': 659.4, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 77]}]}, {'self_ref': '#/texts/236', 'parent': {'$ref': '#/groups/28'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 87.36, 't': 647.4, 'r': 533.52, 'b': 617.4, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 96]}]}], 'headings': ['KEY Contents'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}, 'pk': 456834544881133909}
----------------------------------------------------------------------------------------------------
from langchain_ollama import ChatOllama
# model init
llm = ChatOllama(model="gemma3", temperature=0.0) # 4b
llm.invoke("hi~ i'm charls")
AIMessage(content="Hi Charls! It's nice to meet you. 😊 \n\nWhat's up? Is there anything you'd like to chat about, or were you just saying hello?", additional_kwargs={}, response_metadata={'model': 'gemma3', 'created_at': '2025-03-23T02:10:15.0267759Z', 'done': True, 'done_reason': 'stop', 'total_duration': 7623270900, 'load_duration': 66717700, 'prompt_eval_count': 16, 'prompt_eval_duration': 406000000, 'eval_count': 39, 'eval_duration': 7148000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)}, id='run-cf84f57b-c394-49ee-a828-3d2563307e3d-0', usage_metadata={'input_tokens': 16, 'output_tokens': 39, 'total_tokens': 55})
from langchain_core.runnables import RunnablePassthrough
# prompt setting
prompt = PromptTemplate.from_template(RAG_PROMPT_TEMPLATE)
# 문서 포매팅 함수
def format_docs(docs):
"""문서를 포매팅하는 함수"""
# formatted_docs = []
# for doc in docs:
# formatted_doc = f"{doc.page_content}\n{doc.metadata}"
# formatted_docs.append(formatted_doc)
return "\n\n".join([
f"Source : {doc.metadata.get('source', 'Unknown')}\n\n"
f"{doc.page_content}\n\n"
for doc in docs
])
# RAG chain 생성 {context} 를 함께 전달하여 생성
rag_chain = (
{
"source" : cross_encoder_reranker_retriever,
"input" : RunnablePassthrough(),
} | RunnablePassthrough.assign(
answer={"context" : lambda x : format_docs(x["source"]), "input" : lambda x : x["input"]} | prompt | llm
)
)
#질의 실행
question = "23년 12월 동향은 어때?"
response = rag_chain.invoke(
question,
config={"callbacks" : [langfuse_handler]}
)
print(response) # 응답 출력
{'source': [Document(metadata={'pk': 456834544881133880, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/1', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 1, 'bbox': {'l': 256.579, 't': 569.993, 'r': 355.424, 'b': 555.967, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 11]}]}], 'headings': ['SPRi Al Brief'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='SPRi Al Brief\n2023년 12월호'), Document(metadata={'pk': 456834544881133910, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/238', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 73.2, 't': 542.52, 'r': 550.92, 'b': 511.32, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 94]}]}, {'self_ref': '#/texts/239', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 500.632, 'r': 550.302, 'b': 451.896, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 112]}]}, {'self_ref': '#/texts/240', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 445.432, 'r': 550.302, 'b': 415.056, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 89]}]}, {'self_ref': '#/texts/241', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 408.712, 'r': 550.301, 'b': 378.336, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 99]}]}, {'self_ref': '#/texts/242', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 371.872, 'r': 551.501, 'b': 341.616, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 117]}]}], 'headings': ['£ 5년 내 기기에 일상언어로 말하기만 하면 되는 AI 에이전트의 보급 예상'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='£ 5년 내 기기에 일상언어로 말하기만 하면 되는 AI 에이전트의 보급 예상\nn 빌 게이츠 마이크로소프트 창업자가 2023년 11월 9일 공식 블로그를 통해 AI 에이전트가 컴퓨터 사용방식과 소프트웨어 산업을 완전히 변화시킬 것이라는 전망을 제시\n∙ 자연어에 반응하고 사용자에 대한 지식을 바탕으로 다양한 작업을 수행하는 소프트웨어를 의미하는 에이전트는 컴퓨터 사용방식이 키보드 입력에서 아이콘 클릭으로 바뀐 이후 최대의 컴퓨팅 혁명을 가져올 전망\n∙ 현재는 컴퓨터 작업 시 작업 내용에 따라 각각 다른 앱을 사용해야 하지만 5년 내 에이전트의 발전으로 기기에 일상언어로 말하기만 하면 되는 미래가 도래할 것\n∙ 온라인에 접속하는 모든 사람이 AI 기반의 개인 비서를 사용할 수 있게 되며, 에이전트는 사용자에 대한 풍부한 지식을 바탕으로 맞춤화된 대응이 가능하며 시간이 지날수록 개선됨\n∙ 일례로 여행 계획 수립 시 AI 챗봇이 예산에 맞는 호텔을 제안하는데 머문다면, 에이전트는 사용자의 여행 패턴을 분석해 여행지를 제안하고 관심사에 따른 활동을 추천하며 선호하는 스타일의 레스토랑 예약도 가능'), Document(metadata={'pk': 456834544881133922, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/324', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 20, 'bbox': {'l': 65.16, 't': 74.56799999999998, 'r': 304.551, 'b': 64.60799999999995, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 51]}]}], 'headings': ['<갈릴레오의 LLM 환각 지수(RAG 포함 질문과 답변 기준)>'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='<갈릴레오의 LLM 환각 지수(RAG 포함 질문과 답변 기준)>\n☞ 출처: Galileo, LLM Hallucination Index, 2023.11.15.')], 'input': '23년 12월 동향은 어때?', 'answer': AIMessage(content='2023년 12월호 SPRi Brief에 따르면, AI 에이전트가 컴퓨터 사용 방식을 혁신적으로 변화시킬 것이라는 전망이 나왔습니다. 특히, 5년 내에 기기에 일상 언어로 말하기만 하면 되는 AI 에이전트가 보급될 것으로 예상되며, 개인 비서로서 온라인 접속하는 모든 사람이 AI 기반으로 활용될 수 있게 될 것입니다. 또한, AI 챗봇이 사용자의 여행 패턴을 분석하여 맞춤형 여행 계획을 수립하고 추천하는 등 다양한 기능을 제공할 것으로 보입니다.', additional_kwargs={}, response_metadata={'model': 'gemma3', 'created_at': '2025-03-23T03:15:49.6631162Z', 'done': True, 'done_reason': 'stop', 'total_duration': 70034389600, 'load_duration': 18206815200, 'prompt_eval_count': 494, 'prompt_eval_duration': 20176000000, 'eval_count': 124, 'eval_duration': 31643000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)}, id='run-4ab83c1b-994a-487f-98c0-a50261a5bd0d-0', usage_metadata={'input_tokens': 494, 'output_tokens': 124, 'total_tokens': 618})}
response['source']
출력 결과
[Document(metadata={'pk': 456834544881133880, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/1', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 1, 'bbox': {'l': 256.579, 't': 569.993, 'r': 355.424, 'b': 555.967, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 11]}]}], 'headings': ['SPRi Al Brief'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='SPRi Al Brief\n2023년 12월호'),
Document(metadata={'pk': 456834544881133910, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/238', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 73.2, 't': 542.52, 'r': 550.92, 'b': 511.32, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 94]}]}, {'self_ref': '#/texts/239', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 500.632, 'r': 550.302, 'b': 451.896, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 112]}]}, {'self_ref': '#/texts/240', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 445.432, 'r': 550.302, 'b': 415.056, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 89]}]}, {'self_ref': '#/texts/241', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 408.712, 'r': 550.301, 'b': 378.336, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 99]}]}, {'self_ref': '#/texts/242', 'parent': {'$ref': '#/groups/29'}, 'children': [], 'content_layer': 'body', 'label': 'list_item', 'prov': [{'page_no': 16, 'bbox': {'l': 79.32, 't': 371.872, 'r': 551.501, 'b': 341.616, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 117]}]}], 'headings': ['£ 5년 내 기기에 일상언어로 말하기만 하면 되는 AI 에이전트의 보급 예상'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='£ 5년 내 기기에 일상언어로 말하기만 하면 되는 AI 에이전트의 보급 예상\nn 빌 게이츠 마이크로소프트 창업자가 2023년 11월 9일 공식 블로그를 통해 AI 에이전트가 컴퓨터 사용방식과 소프트웨어 산업을 완전히 변화시킬 것이라는 전망을 제시\n∙ 자연어에 반응하고 사용자에 대한 지식을 바탕으로 다양한 작업을 수행하는 소프트웨어를 의미하는 에이전트는 컴퓨터 사용방식이 키보드 입력에서 아이콘 클릭으로 바뀐 이후 최대의 컴퓨팅 혁명을 가져올 전망\n∙ 현재는 컴퓨터 작업 시 작업 내용에 따라 각각 다른 앱을 사용해야 하지만 5년 내 에이전트의 발전으로 기기에 일상언어로 말하기만 하면 되는 미래가 도래할 것\n∙ 온라인에 접속하는 모든 사람이 AI 기반의 개인 비서를 사용할 수 있게 되며, 에이전트는 사용자에 대한 풍부한 지식을 바탕으로 맞춤화된 대응이 가능하며 시간이 지날수록 개선됨\n∙ 일례로 여행 계획 수립 시 AI 챗봇이 예산에 맞는 호텔을 제안하는데 머문다면, 에이전트는 사용자의 여행 패턴을 분석해 여행지를 제안하고 관심사에 따른 활동을 추천하며 선호하는 스타일의 레스토랑 예약도 가능'),
Document(metadata={'pk': 456834544881133922, 'source': 'data/SPRI_AI_Brief_2023년12월호_F.pdf', 'dl_meta': {'schema_name': 'docling_core.transforms.chunker.DocMeta', 'version': '1.0.0', 'doc_items': [{'self_ref': '#/texts/324', 'parent': {'$ref': '#/body'}, 'children': [], 'content_layer': 'body', 'label': 'text', 'prov': [{'page_no': 20, 'bbox': {'l': 65.16, 't': 74.56799999999998, 'r': 304.551, 'b': 64.60799999999995, 'coord_origin': 'BOTTOMLEFT'}, 'charspan': [0, 51]}]}], 'headings': ['<갈릴레오의 LLM 환각 지수(RAG 포함 질문과 답변 기준)>'], 'origin': {'mimetype': 'application/pdf', 'binary_hash': 2763919247102302809, 'filename': 'SPRI_AI_Brief_2023년12월호_F.pdf'}}}, page_content='<갈릴레오의 LLM 환각 지수(RAG 포함 질문과 답변 기준)>\n☞ 출처: Galileo, LLM Hallucination Index, 2023.11.15.')]
응답 출력 요청
pprint(response['answer'].content) # 응답 출력
결과
('2023년 12월호 SPRi Brief에 따르면, AI 에이전트가 컴퓨터 사용 방식을 혁신적으로 변화시킬 것이라는 전망이 나왔습니다. '
'특히, 5년 내에 기기에 일상 언어로 말하기만 하면 되는 AI 에이전트가 보급될 것으로 예상되며, 개인 비서로서 온라인 접속하는 모든 '
'사람이 AI 기반으로 활용될 수 있게 될 것입니다. 또한, AI 챗봇이 사용자의 여행 패턴을 분석하여 맞춤형 여행 계획을 수립하고 '
'추천하는 등 다양한 기능을 제공할 것으로 보입니다.')