import os
def list_files(directory):
file_list = []
for root, dirs, files in os.walk(directory):
for file in files:
file_list.append(os.path.join(root, file))
return file_list
file_names = list_files('./data')
print(file_names)
['./data/.DS_Store', './data/constitution_of_Korea.pdf']
from langchain.embeddings import HuggingFaceEmbeddings
embeddings_model = HuggingFaceEmbeddings(
model_name='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2',
model_kwargs={'device':'cpu'},
encode_kwargs={'normalize_embeddings':True},
)
embeddings_model
/var/folders/kv/jhs4vb392hb9h62z_b83xjwm0000gn/T/ipykernel_89511/3679939528.py:9: LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-huggingface package and should be used instead. To use it run `pip install -U :class:`~langchain-huggingface` and import as `from :class:`~langchain_huggingface import HuggingFaceEmbeddings``.
embeddings_model = HuggingFaceEmbeddings(
HuggingFaceEmbeddings(client=SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 384, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
), model_name='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2', cache_folder=None, model_kwargs={'device': 'cpu'}, encode_kwargs={'normalize_embeddings': True}, multi_process=False, show_progress=False)
from langchain.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
loader = PyMuPDFLoader(file_names[1])
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=256, chunk_overlap=16)
docs = text_splitter.split_documents(documents)
db_constitution = Chroma.from_documents(
documents=docs, embedding=embeddings_model, collection_name="db_constitution"
)
aa = db_constitution.similarity_search("대통령", k=10)
print(aa[9].page_content, end = "")
제83조 대통령은 국무총리ㆍ국무위원ㆍ행정각부의 장 기타 법률이 정하는 공사의 직을 겸할 수
없다.
제84조 대통령은 내란 또는 외환의 죄를 범한 경우를 제외하고는 재직중 형사상의 소추를 받지
아니한다.
제85조 전직대통령의 신분과 예우에 관하여는 법률로 정한다.
제2절 행정부
제1관 국무총리와 국무위원
Local LLM 사용하기 (250620)
from langchain_openai import ChatOpenAI
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = ChatOpenAI(
base_url="http://localhost:1234/v1",
api_key="lm-studio",
model = "lmstudio-community/gemma-2-2b-it-GGUF",
temperature=0.1,
streaming=True,
callbacks=[StreamingStdOutCallbackHandler()],
)
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template(
"{input} 한국어로 답변해줘."
)
chain = prompt | llm | StrOutputParser()
response = chain.invoke({'input' : "안녕!"})
안녕하세요! 😊 무엇을 도와드릴까요? 😄 한국어로 편하게 말씀해주세요. 😉
query = '탄핵'
retriever = db_constitution.as_retriever(search_kwargs={'k': 20})
docs = retriever.get_relevant_documents(query)
/var/folders/kv/jhs4vb392hb9h62z_b83xjwm0000gn/T/ipykernel_89511/2826324057.py:8: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 1.0. Use :meth:`~invoke` instead.
docs = retriever.get_relevant_documents(query)
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
template = '''Answer the question based only on the following context:
{context} Please answer all the answers in Korean.:
Question: {question}
'''
prompt = ChatPromptTemplate.from_template(template)
def format_docs(docs):
return '\n\n'.join([d.page_content for d in docs])
rag_chain = prompt | llm | StrOutputParser()
query = "대통령에 관한 내용으로 초등학생들을 대상으로 4지선다형의 문제를 5개 생성해주세요."
answer = rag_chain.invoke({'context': (format_docs(docs)), 'question': query})
## 대통령에 관한 초등학생 맞춤형 퀴즈 (4지선다형)
**1. 대한민국 헌법에서 대통령은 어떤 권력을 가지고 있나요?**
a) 군사권만 가지고 있다.
b) 국회의 의결을 받아야 한다.
c) 모든 사람에게 행동을 지시한다.
d) 국민들에게 답변하고, 법률을 만들어준다.
**2. 대통령은 어떤 일에 대해 국가 안전과 국토 방위를 책임지게 된다고 생각하나요?**
a) 군사적 전투와 외교 활동만 담당한다.
b) 국민의 의견을 반영하여 정책을 만들어야 한다.
c) 국가 안전과 국토 방위를 책임지고, 법률을 만들어준다.
d) 모든 사람에게 행동을 지시하고, 법률을 만들어준다.
**3. 대통령은 어떤 권한이 있는가?**
a) 군사적 전투와 외교 활동만 담당한다.
b) 국민의 의견을 반영하여 정책을 만들어야 한다.
c) 국가 안전과 국토 방위를 책임지고, 법률을 만들어준다.
d) 모든 사람에게 행동을 지시하고, 법률을 만들어준다.
**4. 대통령은 어떤 일에 대해 국민의 의견을 반영해야 하는가?**
a) 군사적 전투와 외교 활동만 담당한다.
b) 국민의 의견을 반영하여 정책을 만들어야 한다.
c) 국가 안전과 국토 방위를 책임지고, 법률을 만들어준다.
d) 모든 사람에게 행동을 지시하고, 법률을 만들어준다.
**5. 대통령은 어떤 권한이 있는가?**
a) 군사적 전투와 외교 활동만 담당한다.
b) 국민의 의견을 반영하여 정책을 만들어야 한다.
c) 국가 안전과 국토 방위를 책임지고, 법률을 만들어준다.
d) 모든 사람에게 행동을 지시하고, 법률을 만들어준다.
**정답:**
1. d
2. c
3. c
4. b
5. d