1
예제코드 다운로드 6장
https://wikibook.co.kr/llm-projects/
2
# VSCODE
File > 폴더 열기
ch06
3
# 가상환경 생성하기
command 창에서
C:\0ai\07-ai\ch06\>python -m venv ch06_env
C:\0ai\07-ai\ch06\ch06_env\Scripts>activate.bat
(ch04_env) C:\0ai\07-ai\ch06\ch06_env\Scripts>
pip install pandas
pip install openai
pip install langchain
pip install langchain_experimental
pip install langchain_openai
pip install langchain_community
pip install pypdf
pip install pymupdf
pip install chromadb
pip install faiss-cpu
pip install tiktoken
1
# 텍스트 임베딩 , 텍스트를 벡터화
인공지능 모델은 벡터(vector)연산을 한다.
인공지능은 텍스트를 벡터로 수치화한 뒤에 처리한다.
벡터로 만드는 임베딩 기술.
코사인 유사도를 사용해 두 벡터의 유사도를 할수 있다.
최종적으로 검색 시스템을 구현하기 위해 사용된다.
2
# 벡터 유사도를 구하는 대표적인 방법 코사인 유사도
# 코사인 유사도 확인 ,
ch06_VECTOR_SIMILARITY.ipynb
import numpy as np
from numpy import dot
from numpy.linalg import norm
def cos_sim(A, B):
return dot(A, B)/(norm(A)*norm(B))
vec1 = np.array([0,1,1,1])
vec2 = np.array([1,0,1,1])
vec3 = np.array([2,0,2,2])
print('벡터1과 벡터2의 유사도 :',cos_sim(vec1, vec2))
print('벡터1과 벡터3의 유사도 :',cos_sim(vec1, vec3))
print('벡터2와 벡터3의 유사도 :',cos_sim(vec2, vec3))
벡터1과 벡터2의 유사도 : 0.6666666666666667
벡터1과 벡터3의 유사도 : 0.6666666666666667
벡터2와 벡터3의 유사도 : 1.0000000000000002
2
ch06_OPENAI_EMBEDDING.ipynb
# 임베딩 결과
0 저는 배가 고파요[-0.016628302994777876, -0.021754816646823914,...
1 저기 배가 지나가네요[-0.0033146261427528688, -0.027557911195226485...
2 굶어서 허기가 지네요[-0.006115510937439029, -0.0070621542151335275...
3 허기 워기라는 게임이 있는데 즐거워[-0.011373619934562202, -0.011753614427933356,...
4 스팀에서 재밌는 거 해야지[-0.016117957883498426, -0.014398175804554103,...
5 스팀에어프라이어로 연어구이 해먹을거야[-0.002163747705450216, -0.03004803712770594, ...
# 유사도 상위 3개 결과
text embedding similarity
2 굶어서 허기가 지네요[-0.006115510937439029, -0.0070621542151335275...0.836827
5 스팀에어프라이어로 연어구이 해먹을거야[-0.002163747705450216, -0.030048030594, ...0.815895
0 저는 배가 고파요[-0.016628302994777876, -0.021754816646823914,...0.812362
#랭체인에서 chatOpenAI 사용하기
1
# 필요한 라이브러리 설치
!pip install langchain langchain_openai langchain_community
2
import os
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain.callbacks.tracers import ConsoleCallbackHandler
3
#랭체인 패키지를 사용해 ChatGPT를 사용하기 위해서는 ChatOpenAI() 함수를 사용해 llm 객체를 생성해야 한다.
os.environ['OPENAI_API_KEY'] = "sk-proj-RsA"
# 객체 생성
llm = ChatOpenAI(
temperature=0.1, # 창의성 (0.0 ~ 2.0)
max_tokens=2048, # 최대 토큰수
model_name="gpt-3.5-turbo", # 모델명
)
# 질의내용
question = "세종대왕이 누구인지 설명해주세요"
# 질의
result = llm.invoke(question)
print(result.content)
4
좀더 복잡한 프롬프트를 전달하기 위해서는 랭체인에서는 프롬프트 템플릿을 사용한다.
ChatGpt에서 입력을 전달하는 프롬프트의 템플릿을 만들어 두는것이다.
1
ChatGPT같은 언어 모델들은 입력 길이가 제한되어 있어 정해진 입력 길이를 넘는 문서는 한번에 입력이 안된다.
긴 입력은 언어 모델이 검색해야할 양이 많아 답변의 정확도가 떨어진다.
이런 이유로 초기 긴 입력 문서를 작게 분할하여 처리한다.
텍스트를 자르는 함수를 사용한다.
입력에 관한 부분.
어느정도 문맥의 의미가 고려되어 청크들을 분할한다.
1
PyPDFLoader
가장 많이쓰는 PDF Loader.
페이지 단위로 로드한다.
27페이지라면 27개의 청크로 로드한다.
2
PyMuPDFLoader
속도가 빠르다, 메타 데이터가 다양하다.
3
PDFPlumberLoader
메티데이터가 다양한다.
읽기 속도가 상대적으로 느리다.
1
앞에서 각 텍스트를 임베딩할대 파이썬의 Pandas를 이용해 각 문서와 임베딩을 적재하고, 그 후 Numpy를 이용해 코사인 유사도를 이용해 유사도를 구했다.
실무에서는 판다스가 아닌 벡터 데이터베이스를 사용한다.
Milvus,Faiss,Chroma 등.
2
크로마 사용
3
파이스 사용
다음
https://brunch.co.kr/@topasvga/4159