5️⃣RAG with Gemini
LangChain RAG: Google Gemini API
from IPython.display import Markdown
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("GOOGLE_API_KE")Last updated
from IPython.display import Markdown
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("GOOGLE_API_KE")Last updated
%pip install -U --quiet langchain-google-genai%pip install -U --quiet langchain tiktoken pypdf sentence_transformers chromadbfrom langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-pro")
result = llm.invoke("네이버에 대해 보고서를 작성해줘")
Markdown(result.content)# from langchain.chains import RetrievalQA
# from langchain.chat_models import ChatOpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import PyPDFLoaderloader = PyPDFLoader("/content/drive/MyDrive/강의 자료/[이슈리포트 2022-2호] 혁신성장 정책금융 동향.pdf")
pages = loader.load_and_split()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(pages)
from langchain.embeddings import HuggingFaceEmbeddings
model_name = "jhgan/ko-sbert-nli"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
hf = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs
)
docsearch = Chroma.from_documents(texts, hf) retriever = docsearch.as_retriever(
search_type="mmr",
search_kwargs={'k':3, 'fetch_k': 10})
retriever.get_relevant_documents("혁신성장 정책금융에 대해서 설명해줘")[Document(page_content='혁신성장 정책금융 동향 : ICT 산업을 중심으로\n CIS이슈리포트 2022-2 호 | 3 |1. 들어가며\n▶혁신성장 정책금융기관은 건강한 혁신산업 생태계를 조성하기 위해 기업 성장에 필요한 자금을 \n지원하는 혁신성장 정책금융 제도를 시행하고 있음\n○혁신성장 정책금융기관은 혁신성장에 대한 정의를 구체화한 정책금융 가이드라인*에 따라 혁신성장 \n산업육성을 위한 정책금융 업무를 추진 중임\n * 혁신성장 기업발굴 및 금융지원을 위해 활용하는 기준으로 , ‘9대 테마-46개 분야-296개 품목’으로 구성\n▶혁신성장 정책금융 제도 시행 이후 공급 규모가 매년 증가하는 등, 미래 혁신성장 분야의 글로벌 \n경쟁력 확보를 위한 금융지원이 지속 추진 중임\n○정책금융기관의 혁신성장 분야 정책금융 공급규모는 2017년 240,787 억 원에서 연평균 37.2% 증가\n하여 2021 년 854,338 억 원에 이르는 등 그 외연을 확장해나가고 있음', metadata={'page': 2, 'source': '/content/drive/MyDrive/강의 자료/[이슈리포트 2022-2호] 혁신성장 정책금융 동향.pdf'}),
Document(page_content='○또한, 미래 성장성은 유망하나 단기 수익 창출이 어려운 산업의 지원 강화를 위해 정책금융 뿐만 아니라 \n민관주도의 역동적 금융으로 혁신성장 금융지원 영역을 확대할 필요가 있음', metadata={'page': 1, 'source': '/content/drive/MyDrive/강의 자료/[이슈리포트 2022-2호] 혁신성장 정책금융 동향.pdf'}),
Document(page_content='동 품목으로의 정책금융 공급은 지속 증가할 것으로 전망됨\n▶센서측정 테마의 경우 정보통신 , 전기전자 테마 대비 정책금융 공급 규모는 작은 편이나 , 객체탐지 분야\n로의 정책금융 공급이 꾸준한 것을 확인함\n○스마트팜 , 자율주행차 등 스마트센서를 필요로 하는 산업으로부터의 수요가 증가함에 따라 동 품목 \n시장의 성장이 전망되며 , 이에 정책금융 공급 또한 지속 증가할 것임\n▶원천기술 경쟁력 강화 등에 혁신성장 정책금융이 중요한 역할을 하고 있으며 , 미래먹거리 산업 육성을 위해 \n역동적인 혁신금융으로서의 변화가 기대됨\n○혁신 ICT 산업은 관련 시장이 지속적으로 성장할 것으로 전망되나 , 원천기술 미확보 및 높은 \n해외 의존도가 약점으로 지적되어 국내 기업의 경쟁력 강화가 필요함\n○이에 혁신기업을 발굴하는 가이드라인의 지속적인 최신화 ·내실화에 노력을 기하는 한편, 정책금융\n기관 뿐만 아니라 전 금융권으로 혁신기업에 대한 금융지원을 확대할 필요가 있음', metadata={'page': 17, 'source': '/content/drive/MyDrive/강의 자료/[이슈리포트 2022-2호] 혁신성장 정책금융 동향.pdf'})]from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnableMap
template = """Answer the question as based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)gemini = ChatGoogleGenerativeAI(model="gemini-pro", temperature = 0)
chain = RunnableMap({
"context": lambda x: retriever.get_relevant_documents(x['question']),
"question": lambda x: x['question']
}) | prompt | geminiMarkdown(chain.invoke({'question': "혁신성장 정책금융에 대해서 설명해줘"}).content)