있는 그대로 말하자면 그렇고, 선언된 llm과, Retriever, Prompt 를 묶어서 뭔가 해주겠다는 의미같다.
from dotenv import load_dotenv
from langchain_community.embeddings import OllamaEmbeddings
load_dotenv()
embeddings = OllamaEmbeddings(
model="llama3.2:1b"
)
from langchain_chroma import Chroma
chroma_database = Chroma.from_documents(
documents=document_list,
embedding=embeddings,
persist_directory="./chroma_db",
collection_name="chroma_nintendo"
)
from langchain_community.chat_models import ChatOllama
# pull 받은 모델 사용
llm = ChatOllama(
model="llama3.2:1b"
)
# 랭체인 허브 설치.
%pip install -U langchain langchainhub --quiet
from langchain import hub
# 프롬프트를 제공한다.
prompt = hub.pull("rlm/rag-prompt")
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm, # llama3.2:1b
retriever=chroma_database.as_retriever(), # 다양하게 사용됨. 이걸로 데이터를 가져옴.
chain_type_kwargs={"prompt": prompt}
)
ai_message = qa_chain({"query": "닌텐도가 만든 게임은?"})
역시 모델이 구려서 그런가... 답변도 시원찮다.
지난번에 워드 문서로 가지고 놀때...
질의(query) 와 retrieved_docs (유사검색 결과), 모델(llm), 질문 프롬프트(retrieved_docs와 query 설정)를 조금 조잡하게 설정했던 기억이 있다. RetrievalQA 는 이런 부분을 어느 정도는 해소해 주는 느낌이다. 중간에 llm이나 retriever, query 가 변경이 될 경우 qa_chain 쪽 소스만 변경하면 되니 좀더 간결하게 코딩이 가능해질 것이다.