실습 내용 자체는 앞서 수행한 과정과 거의 동일하다.
LLM이 Gemini로 바뀐것 뿐이다.
실습
from IPython.display import Markdown
import os
os.environ["GOOGLE_API_KEY"] = "YOUR_API_KEY"
%pip install -U --quiet langchain-google-genai
from langchain_google_genai import ChatGoogleGenerativeAI
LLM 정의 및 체크
llm = ChatGoogleGenerativeAI(model = "gemini-pro")
result = llm.invoke("네이버에 대해 보고서를 작성해줘")
Markdown(result.content)
Dependency 설치
%pip install -U --quiet langchain tiktoken pypdf sentence_transformers chromadb
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import PyPDFLoader
PDF Loader & Text Splitter & Embedding
loader = PyPDFLoader("/content/drive/MyDrive/코딩/LangChain 실습(모두의AI)/data/[이슈리포트 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
retriever = docsearch.as_retriever(
search_type = 'mmr',
search_kwargs={'k':3,'fetch_k':10}
)
retriever.get_relevant_documents("혁신성장 정책 금융에 대해서 설명해줘")
Prompt Template
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)
chain 구성
gemini = ChatGoogleGenerativeAI(model = "gemini-pro", temperature=0)
chain = RunnableMap({
"context":lambda x: retriever.get_relevant_documents(x['question']),
"question":lambda x: x['question']
}) | prompt | gemini
RunnableMap
으로 관련된 문서를 context로, 질문은 question으로 Prompt Template에 전달하고 이를 기반으로
LLM이 답변을 생성한다.
결과 출력
Markdown(chain.invoke({'question':"혁신성장 정책금융에 대해서 설명해줘"}).content)
LLM의 답변을 markdown 형식으로 출력해준다.
Reference
'인공지능 > RAG' 카테고리의 다른 글
LangChain - RunnablePassTrough (0) | 2024.06.04 |
---|---|
LangChain (11) 오픈소스 LLM으로 RAG 구현 (0) | 2024.06.04 |
What is Elastic Search? (0) | 2024.06.03 |
Langchain - Ensemble Retriever (1) | 2024.05.31 |
Langchain - Hybrid Search 구현 (0) | 2024.05.31 |