M-05 / jump2langchain

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jump2langchain

Document Loader

from langchain_community.document_loaders import ArxivLoader

docs = ArxivLoader(query="2403.05568", load_max_docs=2).load()
with open("./data/langchainPaper.txt", "w") as f:
    f.write(docs[0].page_content[480:])

CharacterTextSplitter : 기본적으로 "\n\n" 을 기준으로 문자 단위로 텍스트를 분할하고, 청크의 크기를 문자 수로 측정

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

text_splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=50,
                                      length_function=len,
                                      is_separator_regex=False,)
split_docs = TextLoader("data/langchainPaper.txt").load_and_split(text_splitter)

HuggingFaceEmbeddings : 텍스트 데이터를 숫자로 이루어진 벡터로 변환하는 과정

from langchain_community.embeddings import HuggingFaceEmbeddings

embeddings_model = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-mpnet-base-v2" # maximum sequence length of 2048
              # 'jhgan/ko-sbert-nli', # 최대 시퀀스 길이는 128 토큰
              # 'BM-K/KoSimCSE-roberta'
    model_kwargs={'device':'mps'}, # 'cpu', 'gpu', 'cuda'
    encode_kwargs={'normalize_embeddings':True},
)

Faiss : 밀집 벡터의 효율적인 유사도 검색과 클러스터링을 위한 라이브러리

Facebook AI Similarity Search

from langchain_community.vectorstores import FAISS
from langchain_community.vectorstores.utils import DistanceStrategy

vectorstore = FAISS.from_documents(split_docs,
                                   embedding = embeddings_model,
                                   distance_strategy = DistanceStrategy.COSINE
                                  )
retriever = vectorstore.as_retriever(),

GPT4All : 언어 모델을 사용하여 프롬프트에 대한 응답을 생성하는 LLMChain을 구현
StreamingStdOutCallbackHandler() : 답변을 받기 위한 콜백

from langchain_community.llms import GPT4All
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

local_path = (
    "./ggufModels/EEVE-Korean-Instruct-10.8B-v1.0-Q5_K_M.gguf"
)
llm = GPT4All(
    model=local_path,
    callbacks=[StreamingStdOutCallbackHandler()],
    backend="mps", # GPU 설정
    streaming=True,
    verbose=True,
)

PromptTemplate : LLMs에 메시지를 전달하기 전에 문장 구성을 편리하게 만들어주는 기능
RunnablePassthrough : 데이터를 전달하는 역할
StrOutputParser : 모델의 출력을 문자열 형태로 파싱하여 최종 결과를 반환

from langchain_core.prompts import PromptTemplate

template = """
당신은 영어를 가르치는 10년차 영어 선생님입니다. 상황에 [FORMAT]에 영어 회화를 작성해 주세요.

상황:
{question}

FORMAT:
- 영어 회화:

- 한글 해석:
"""

prompt = PromptTemplate.from_template(template)

chain = (
        { "context": retriever,
          "question": RunnablePassthrough()} | 
        prompt | 
        llm | 
        StrOutputParser()
            )
query = "저는 식당에 가서 음식을 주문하고 싶어요"
print(chain.invoke({"question": query}))

RunnablePassthrough : 데이터를 전달하는 역할

from langchain_core.runnables import RunnableParallel, RunnablePassthrough

runnable = RunnableParallel(
    passed=RunnablePassthrough(),    
    extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
    modified=lambda x: x["num"] + 1,
)

runnable.invoke({"num": 1})
> {'passed': {'num': 1}, 'extra': {'num': 1, 'mult': 3}, 'modified': 2}

About


Languages

Language:Jupyter Notebook 100.0%