23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
$ ollama list
NAME ID SIZE MODIFIED
ggml-q5-km:latest c3ebb32b93a5 7.7 GB 2 weeks ago
$import os
from langchain.document_loaders import TextLoader
import warnings
warnings.filterwarnings("ignore")
############################################################################
## TextLoader
############################################################################
#loader = TextLoader('little.prince.txt')
#pages = loader.load()
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("2024.kbo.rules.pdf")
pages = loader.load()
text = pages[0].page_content
import tiktoken
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 문장 임베딩 및 벡터 저장소 생성
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
############################################################################
## TextSplitter
############################################################################
# 문서를 문장으로 분리
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
)
docs = text_splitter.split_documents(pages)
#print(docs[0])
#print(docs[1])
############################################################################
## Text Vector Embedding
############################################################################
# 문장을 임베딩으로 변환하고 벡터 저장소에 저장
embeddings = HuggingFaceEmbeddings(
#model_name='jhgan/ko-sroberta-nli',
model_name='BAAI/bge-m3',
#model_kwargs={'device':'cpu'},
model_kwargs={'device':'mps'},
encode_kwargs={'normalize_embeddings':True},
)
############################################################################
## VectorStore(Chroma)
############################################################################
vectorstore = Chroma.from_documents(docs, embeddings)
# 벡터 저장소 경로 설정
vectorstore_path = 'vectorstore'
os.makedirs(vectorstore_path, exist_ok=True)
# 벡터 저장소 생성 및 저장
vectorstore = Chroma.from_documents(docs, embeddings, persist_directory=vectorstore_path)
vectorstore.persist()
print("Vectorstore created and persisted")
############################################################################
## retriever
############################################################################
from langchain_core.runnables import RunnablePassthrough
from langchain_community.chat_models import ChatOllama
model = ChatOllama(model="ggml-q5-km", temperature=0)
# 검색 쿼리
query = "승률계산법을 알려 줘"
retriever = vectorstore.as_retriever(search_kwargs={'k': 3})
docs = retriever.get_relevant_documents(query)
#print(len(docs))
#print(docs[0].page_content)
#print(docs[0].metadata)
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# Prompt
template = '''Answer the question in korean based only on the following context:
{context}
Question: {question}
'''
prompt = ChatPromptTemplate.from_template(template)
def format_docs(docs):
return '\n\n'.join([d.page_content for d in docs])
# RAG Chain 연결
rag_chain = (
{'context': retriever | format_docs, 'question': RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# Chain 실행
query = "승률계산법을 알려 줘"
answer = rag_chain.invoke(query)
print("Answer:", answer)$ python rag_concept.py
Answer: 승률을 계산하기 위해서는 다음과 같은 공식을 사용할 수 있습니다:
승률 = (승리수 / 경기수) x 100
여기서 승리수는 팀이 이긴 게임의 수를, 경기수는 총 플레이한 게임의 수를 의미합니다. 예를 들어, 팀이 60경기 중 40경기를 이겼다면, 그 팀의 승률을 계산하려면 다음과 같이 하면 됩니다:
승률 = (40 / 60) x 100 = 67%
이는 해당 팀이 시즌 동안 67%의 경기에서 승리했음을 의미합니다.[+] 참고 사이트 : https://www.youtube.com/watch?v=NfQrRQmDrcc
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.