23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
스터디 운영자님의 스터디 운영 경과와 함께 스터디 내용 요약 정리해보았습니다.
대부분의 멤버가 OpenLLM을 이용한 RAG 코드 개념 이해하는 것으로 확인되어
다음 스터디(6/19) 전(6/16)까지 3개 주제별로 OpenLLM 을 이용한 챗봇까지 개발해서
충분한 주석을 포함하고 챗봇 화면을 캡처해서 완성된 코드 버전을 제출할 예정입니다.
Llama3-KO 를 이용해 RAG 를 구현해 보겠습니다.
RAG 에 사용할 PDF로 근로기준법을 다운로드하여 사용했습니다.
https://www.law.go.kr/법령/근로기준법
필요한 라이브러리 임포트
import os
import warnings
warnings.filterwarnings("ignore")Text(PDF) Loader
from langchain_community.document_loaders import PyMuPDFLoader
# PyMuPDFLoader 을 이용해 PDF 파일 로드
loader = PyMuPDFLoader("labor_low.pdf")
pages = loader.load()TextSplitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 문서를 문장으로 분리
## 청크 크기 500, 각 청크의 50자씩 겹치도록 청크를 나눈다
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
)
docs = text_splitter.split_documents(pages)Text Vector Embedding
from langchain.embeddings import HuggingFaceEmbeddings
# 문장을 임베딩으로 변환하고 벡터 저장소에 저장
embeddings = HuggingFaceEmbeddings(
model_name='BAAI/bge-m3',
#model_kwargs={'device':'cpu'},
model_kwargs={'device':'cuda'},
encode_kwargs={'normalize_embeddings':True},
)VectorStore(Chroma)
# 벡터 저장소 생성
from langchain.vectorstores import Chroma
vectorstore = Chroma.from_documents(docs, embeddings)
# 벡터 저장소 경로 설정
## 현재 경로에 'vectorstore' 경로 생성
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")Model
from langchain_community.chat_models import ChatOllama
# Ollama 를 이용해 로컬에서 LLM 실행
## llama3-ko-instruct 모델 다운로드는 Ollama 사용법 참조
model = ChatOllama(model="llama3-ko-instruct", temperature=0)Retriever
retriever = vectorstore.as_retriever(search_kwargs={'k': 3})LangChain
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
# Prompt 템플릿 생성
template = '''친절한 챗봇으로서 상대방의 요청에 최대한 자세하고 친절하게 답하자. 모든 대답은 한국어(Korean)으로 대답해줘.":
{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("Query:", query)
print("Answer:", answer)teddylee777/Llama-3-Open-Ko-8B-gguf 모델
Answer: 연장근로수당은 근로기준법 제56조에 따라 통상임금의 50%를 가산하여 지급해야 합니다
teddylee777/Llama-3-Open-Ko-8B-Instruct-preview-gguf 모델
Answer: 연장근로수당은 주휴일에 지급됩니다.
제71조(연장근로수당) ① 사용자는 근로시간을 초과하여 근로한 경우에는 그 초과된 시간에 대하여 연장근로수당을 지급하여야 한다. 다만, 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다.
「근로기준법」 제56조제2항에 따라 휴일근로를 한 경우
「근로기준법」 제57조제2항에 따라 야간근로를 한 경우
「근로기준법」 제58조제2항에 따라 휴일에 근로한 경우
「근로기준법」 제59조제2항에 따라 휴일근로 및 야간근로를 한 경우
...
Get up and running with large language models locally.
오픈소스 LLM 모델을 local에서 띄워서 구동하는 가장 손쉬운 방법
windows, macos에서도 구동되기 때문에 리눅스 환경이 아니어도 간단하게 모델들을 다운로드 받아서 구동시킬 수 있다
구동되면 langchain과도 바로 연결된다
단일 바이너리에 모든 구현체(서버 + 클라이언트) 를 다 집어넣은 형태
llamap.cpp 기반
설치
curl -fsSL https://ollama.com/install.sh | sh모델 다운로드 (Pull)
https://ollama.com/ 에서 Docker Hub 처럼 모델을 다운로드(Pull) 할 수 있다.

# ollama pull <model>
ollama pull llama3모델 실행
# ollama run <model>
ollama run llama3현재 로컬의 모델 조회
ollama listHuggingFace 에 업로드된 gguf 모델을 Ollama 를 이용해 로컬에서 돌려봅니다.
GGUF(Georgi Gerganov Unified Format)
오픈소스 모델을 로컬 환경에서 쉽고 빠르게 실행할 수 있는 파일 형식
GGML을 사용하여 대형 모델을 실행하는 프로그램과 모델을 저장하는 파일 형식
GGML : 컴퓨터에서도 큰 모델을 빠르게 돌릴 수 있는 ML용 라이브러리
모델을 빠르고 쉽게 불러오고 저장할 수 있게 해주는 바이너리(0, 1) 형식으로 설계됨
개발자들은 보통 PyTorch 같은 프로그래밍 도구를 사용해 모델을 만든 후, GGML에서 쓸 수 있도록 GGUF 형식으로 저장한다

# wget <허깅페이스 모델 url>
wget https://huggingface.co/teddylee777/Llama-3-Open-Ko-8B-gguf/resolve/main/Llama-3-Open-Ko-8B-Q8_0.ggufFROM Llama-3-Open-Ko-8B-Q8_0.gguf
TEMPLATE """{{- if .System }}
<s>{{ .System }}</s>
{{- end }}
<s>Human:
{{ .Prompt }}</s>
<s>Assistant:
"""
SYSTEM """A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions."""
PARAMETER temperature 0
PARAMETER num_predict 3000
PARAMETER num_ctx 4096
PARAMETER stop <s>
PARAMETER stop </s># ollama create <생성 및 실행할 모델명> -f Modelfile
ollama create llama3-ko -f Modelfile이렇게 생성한 모델을 ollama run llama3-ko 와 같이 즉시 실행할 수도 있고
RAG 등과 함께 사용할 때 다음 코드 형태로 사용할 수도 있다.
from langchain_community.chat_models import ChatOllama
# Ollama 를 이용해 로컬에서 LLM 실행
model = ChatOllama(model="llama3-ko")https://devocean.sk.com/internal/board/viewArticleForAjax.do?id=166016
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.