brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 23. 2024

AI 1탄-2. 랭체인을 활용한 LLM AI -2/3

랭체인을 활용한 LLM기반의 AI서비스 개발하기-2/3

# OPENAI API 실행 = OPENAI 패키지 설치.  OPENAI API 키 설정 , OPENAI 코드 생성 , 실행

# 랭체인 실행 = 랭체인과 OPENAI 패키지 설치.  OPENAI API 키 설정 , 랭체인용 코드 생성 , 실행

# 버전 변경등으로 코드가 동작하지 않을 수 있습니다!!





<1> 챗GPT 콘솔 사용과 OPENAI API 사용

<2> 실습환경 구축 - 구글 코랩 가입 (실습)

<3> 실습환경 구축 -  OPENAI  API키 발급 (실습)

<4> 허깅 페이스에 있는 다른 LLM 사용 - 가입하기  (선택)

<5> 랭체인 주요 모듈 5가지 알아보기

<6> 랭체인-모델 I/O - 코랩 (실습) - 4장

<7> 랭체인-데이터 연결- 코랩 (실습)

<8> 랭체인-체인 - 코랩 (실습)

<9> 랭체인-에이전트/툴 - 코랩 (실습)

<10>  실습환경 구축 - Windows PC에 아나콘다 설치, 주피터 노트북  (실습)

<11> 실습 환경 구축 - Windows PC에 아나콘다 설치, 주피터 노트북(선택) (실습)

<12> 랭체인- 데이터 연결- 아나콘다 (선택) (실습)

<13> 랭체인-메모리- 아나콘다  (선택) (실습)

<14> 체크 리스트

<15> 서비스 만들기



AI 개발환경?

코랩 가입 - 코랩으로 실습

아나콘다 설치 - 아나콘다로 실습

OPENAI API 가입-유료







<1> 챗GPT 콘솔 사용과 OPENAI API 사용


1

콘솔 - FM 모델의 데이터로 답변 준다. 채팅으로 질문하면 답을 준다.

OPENAI API - 좀 더 세부적으로 FM 모델을 제어할 수 있다. 



2

OPENAI API를 사용하는 개발 환경을 구축해서, 실습해 보자.

OPENAI에서는 파이썬과 노드를 지원한다. 

대부분 파이썬으로 작업한다.


3

파이썬이 되는 실습환경 구축 방법 4가지 중 하나를 선택해 사용하자.

구글에서 제공하는 코랩 사용.

개인 PC에 아나콘다(파이썬) 설치해 사용.

개인 PC에 VSCODE 설치해 사용.

AWS Cloud9 사용 (사용 불가- 신규 aws계정에서는 cloud9 지원하지 않음.)



4

랭체인 주요 모듈 5가지 알아보자.





<2> 실습환경 구축 - 구글 코랩 가입 (실습)



1

# 구글 코랩 사용

코랩 = 협력자, 공동 작업

웹 브라우저에서 파이썬을 사용할 수 있다.

12시간 동안 작업을 하지 않으면 끊어진다. 업로드해서 사용한 데이터는 모두 삭제된다.


장점

오류 발생 시 AI인 제미나이가 오류내용과 조치법을 알려준다.

구글 코랩을 사용하면 따로 파이썬 프로그램을 설치하지 않아도 된다.




https://colab.research.google.com/?hl=ko

+새 노트




2

환경 설정 (선택)

도구 > 설정 > 편집기 > 행번호 체크~

런타임 > 런타임 유형 변경


3

코드 실행은 

SHIFT + ENTER   = 셀을 실행하고 커서를 다음 셀로 가게 함.

ALT + ENTER = 셀을 실행하고, 셀을 새로 생성함.





<3> 실습환경 구축 -  OPENAI  API키 발급 (실습)


유료 가입하여 테스트하자.

무료 제공 API는 제약으로 사용이 힘들다.

OPENAI  API key 발급받기


1

GPT(Generative pre-trained transformer) 란?

미리 훈련된 transformer 생성형 AI 

transformer = 딥러닝 아키텍처 중 하나.

GPT는 transformer 계열의 모델.



2

ChatGPT는 웹으로 사용 = 별도 결재

OpenAI API는 CLI로 사용  = 별도 결재.


OPENAI API 사용

가입 필요, 월 10달러 = 1만 5천 원 결제 필요.



3

OPENAI 가입하기?

https://platform.openai.com/docs/overview

나는 구글 계정으로 가입



4

OPENAI  API key 발급받기?


오른쪽 위 Dashboard  >  왼쪽 아래  APIkeys 클릭해 발급


openai-api-2024-11-28



# 왼쪽 아래 API KEY발급




5

결재

10달러 결제 = 1달 , 1만 5천 원 정도 결재

왼쪽 Billing 메뉴

나는 매달 자동 결재는 OFF 하여 가입. 

빌링 히스토리 확인하자 - 지출된 금액 확인하자! , 카톡으로 온 결재 내역이다.



6

https://platform.openai.com/account/billing/overview






7

# 코랩  왼쪽에 키  >  미리 등록해서 사용하자.


코랩 > 새 노트 사용

파일이름 변경   오늘 날자로   12-05


https://colab.research.google.com/?hl=ko


OPENAI_API_KEY





<4> 허깅 페이스에 있는 다른 LLM 사용 - 가입하기  (선택)



허깅 페이스?

다양한 모델과 학습 스크립트를 구현해 놓은 모듈.

챗GPT 모델과 응답에 대해 비교가 가능하다.  챗GPT가 더 좋다?


https://brunch.co.kr/@topasvga/4170






<5> 랭체인 주요 모듈 5가지 알아보기



1

랭체인 주요 모듈 5가지








<6> 랭체인-모델 I/O - 코랩 (실습) - 4장


1

모델 I/O (Model I/O)

언어 모델과 상호 작용을 위한 모듈이다. 


3가지가 있다.

LLM에 전달될 프롬프트 생성

답변을 받기 위해 랭귀지 모델 API 호출

답변 출력


2

소스

https://github.com/gilbutITbook/080413/blob/main/%EC%8B%A4%EC%8A%B5/4%EC%9E%A5/%EB%AA%A8%EB%8D%B8_I_O_(Model_I_O)_%EC% BD%94% EB% 9E% A9.ipynb



3

1) Model I/O -  LLM에 전달될 프롬프트 생성

# 전달할 프롬프트만 표시하는 예제이다.

# 코랩 접속  실습  - alt + enter  실행이다.



// 아래 오류 해결을 위해 openai 버전과 httpx 버전 변경함.

//TypeError: Client.__init__() got an unexpected keyword argument 'proxies' 

!pip install --upgrade openai==1.55.3

!pip install --upgrade httpx==0.27.2

!pip install langchain_community



!pip install langchain

!pip install openai

!pip install huggingface-hub

!pip install langchain_community



from langchain import PromptTemplate

template = "{product}를 홍보하기 위한 좋은 문구를 추천해줘?"

prompt = PromptTemplate(

    input_variables=["product"],

    template=template,

)

prompt.format(product="카메라")



결과

카메라를 홍보하기 위한 좋은 문구를 추천해줘?



# 프롬프트 템플릿을 이용하는 방법을 배웠다.

문구를 바꿔보자. 카메라 대신 게임 


prompt.format(product="게임")




2)  Model I/O   답변을 받기 위해 랭귀지 모델 API 호출

# LLM 호출 ,  직접 api 입력하고 응답 받아보자.

# LLM을 호출해 물어보자.

# import os 해서 소스에 OPENAI_API_KEY를 넣고 실행하는 방법과 Colab에 넣어둔 OPENAI_API_KEY를 호출하는 방법이 있다. 여기서는 import os 해서 소스에 OPENAI_API_KEY를 넣고 실행 하자.




import os

os.environ["OPENAI_API_KEY"] = "sk-proj-febmAeqjO-fMLWHM_1ENA06iDl86IA" #openai 키 입력



from langchain.chat_models import ChatOpenAI

llm1 = ChatOpenAI(temperature=0,  # 창의성 0으로 설정

                 model_name='gpt-4',  # 모델명

                )

prompt = "진희는 강아지를 키우고 있습니다. 진희가 키우고 있는 동물은?"

print(llm1.predict(prompt))



강아지입니다.






3)  Model I/O   출력 형식을 정하자.

# 답변 출력 , 콤마로 구분하는 출력을 내보자.



# 입력1-1


from langchain.output_parsers import CommaSeparatedListOutputParser

from langchain.prompts import PromptTemplate

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0,  # 창의성 0으로 설정

                 max_tokens=2048,  # 최대 토큰수

                 model_name='gpt-4',  # 모델명

                )

output_parser = CommaSeparatedListOutputParser() #파서 초기화

format_instructions = output_parser.get_format_instructions() #출력 형식 지정

prompt = PromptTemplate(

    template="7개의 팀을 보여줘 {subject}.\n{format_instructions}",

    input_variables=["subject"],

    partial_variables={"format_instructions": format_instructions}

)




#입력1-2


query = "한국의 야구팀은?"


# 출력 결과 생성

output = llm.predict(text=prompt.format(subject=query))


# 출력에 대한 포맷 변경

parsed_result = output_parser.parse(output)

print(parsed_result)





결과

['두산 베어스', '롯데 자이언츠', '삼성 라이온즈', 'SK 와이번스', 'KIA 타이거즈', 'LG 트윈스', 'NC 다이노스']




#

query = "한국의 축구팀은?"


['FC 서울', '전북 현대 모터스', '수원 삼성 블루윙즈', '울산 현대', '포항 스틸러스', '성남 FC', '인천 유나이티드']



query = "한국의 농구팀은?"


['서울 삼성 썬더스', '인천 전자랜드 엘리펀츠', '원주 DB 프로미', '부산 KT 소닉붐', '서울 SK 나이츠', '창원 LG 세이커스', '고양 오리온스']





<7> 랭체인-데이터 연결- 코랩 (실습)



1

데이터 연결!!!

사용자가 질문하고, PDF 등 데이터에서 정보를 가져오려면  데이터 연결이 필요하다.


2

데이터 연결 순서 ?

미리 벡터 데이터 베이스에 저장해 놓는다.


3

상세 ?



4




5

# 데이터 연결  실습 예제 , t.pdf 다운로드 


https://github.com/gilbutITbook/080413/blob/main/%EC%8B%A4%EC%8A%B5/4%EC%9E%A5/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%97%B0%EA%B2%B0(Data_Connection)_%EC%BD%94%EB%9E%A9.ipynb




6

# 실습

5



7

# 데이터 연결을 위해서는 필요 라이브러리 설치

랭체인 설치, 오픈 AI 설치, pdf 라이브러리 등 설치


# 문서 가져오기 - 다양한 곳에서 문서를 가져온다.

문서 변환(document transformers) - 입력 데이터를 청킹하여 분할 하거나 다시 결합 작업등 진행한다. 분할해야 응답을 잘한다.

문서 임베딩(embedding model) - 데이터를 벡터 형태로 변환한다.

벡터 데이터 베이스(벡터 저장소,vector stores) - 변환된 벡터를 저장/검색/관리한다.

검색기가 필요하다. (retrievers) - 정보검색 역할을 한다.



8

# 데이터 연결을 위해서는 필요 라이브러리 설치


!pip install langchain

!pip install openai


!pip install pypdf

!pip install tiktoken

!pip install faiss-cpu

!pip install sentence-transformers


!pip install langchain-community




9

# 문서 가져오기 다양한 곳에서 문서를 가져온다.


# pdf파일은 코랩에 올려놓는다

# 코랩 왼쪽  폴더 클릭  >  업로드 클릭  > 파일 올리기  > 파일이름은 t.pdf 로 하자.




10

문서 변환(document transformers) 

입력 데이터를 청킹하여 분할 하거나 다시 결합 작업등 진행한다. 분할해야 응답을 잘한다.

아래 내용은 PDF 6 페이지중 5,000 글자를 읽어오라는  의미이다.


from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader("t.pdf")

document = loader.load()

document[5].page_content[:5000]





11

문서 임베딩(embedding model) 데이터를 벡터 형태로 변환한다.

임베딩이란 자연어처리에서 사람이 쓰는 자연어를 기계가 이해할 수 있도록 숫자형태인 vector로 바꾸는 과정 혹은 일련의 전체 과정을 의미합니다.

단어나 문장 각각을 벡터로 변환해 벡터 공간(Vector space)으로 끼워넣는다는 의미에서 임베딩이라고 합니다.


벡터 데이터 베이스(벡터 저장소,vector stores) 변환된 벡터를 저장/검색/관리한다.



# 임베딩을 오픈 AI에서 제공하는 임베딩 모델 사용

# 벡터 데이터베이스로 파이스 사용


import os

os.environ["OPENAI_API_KEY"] = "sk-proj-febmAeqQRjKvXZvNr8kWiYSgcTc-x29UrIEFtLRKL40qa2QijO-fMLWHM_1ENA06iDl86IA" #openai 키 입력

from langchain.vectorstores import FAISS

from langchain.embeddings import OpenAIEmbeddings


embeddings = OpenAIEmbeddings() #임베딩 처리

db = FAISS.from_documents(document, embeddings)





12


# 문장을 벡터로 바꿔보자~


from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

text = "진희는 강아지를 키우고 있습니다. 진희가 키우고 있는 동물은?"

text_embedding = embeddings.embed_query(text)

print(text_embedding)


# 결과

[-0.0024335071671338295, -0.02026344598441443, -0.012884016077137517, -0.016665264


# 문장이 숫자의 나열인 벡터로 변경된다.



13

검색기가 필요하다. (retrievers) 정보검색 역할을 한다.



from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0,  # 창의성 0으로 설정

                 model_name='gpt-3.5-turbo',  # 모델명

                )

from langchain.chains import RetrievalQA

retriever = db.as_retriever()

qa = RetrievalQA.from_chain_type(

    llm=llm,

    chain_type="stuff",

    retriever=retriever)

query = "마을 무덤에 있던 남자를 죽인 사람은 누구니?"

result = qa({"query": query})

print(result['result'])



답변

마을 무덤에서 남자를 죽인 사람은 Injun Joe입니다.





<8> 랭체인-체인 - 코랩 (실습)


체인?

여러 구성 요소를 조합해서 하나의 파이프라인을 구성해주는 역할을 한다.

예를 들어 질문이 입력 되면 LLM 1과 LLM2를 거쳐 결과가 생생되는 과정을 하나의 파이프라인으로 수성하는것이 체인이다.


1



2

체인 실습 예1) 





from langchain.chains import LLMChain

from langchain import PromptTemplate

from langchain.chat_models import ChatOpenAI

import os

os.environ["OPENAI_API_KEY"] = "sk-proj-wOtiq6TRyfjC7X_r_3ThhCJ-QewfqXIA" #openai 키 입력

llm = ChatOpenAI(temperature=0,  # 창의성 0으로 설정

                 model_name='gpt-4',  # 모델명

                )

prompt = PromptTemplate(

  input_variables=["country"],

  template= "{country}의 수도는 어디야?",

)

chain = LLMChain(llm=llm, prompt=prompt) #프롬프트와 모델을 체인으로 연결

chain.run("대한민국")




# 체인 실습2

영어를 한글로 번역

번역한 부분을 요약하기



https://github.com/gilbutITbook/080413/blob/main/%EC%8B%A4%EC%8A%B5/4%EC%9E%A5/%EC%B2%B4%EC%9D%B8(Chain)_%EC%BD%94%EB%9E%A9.ipynb







<9> 랭체인-에이전트/툴 - 코랩 (실습)




1

!pip install wikipedia

!pip install numexpr



2


import os

os.environ["OPENAI_API_KEY"] = "sk-proj-wOtiq6TRyfjCyEgJ-iQewfqXIA" #openai 키 입력

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0,  # 창의성 0으로 설정

                 model_name='gpt-4',  # 모델명

                )

from langchain.agents import load_tools

from langchain.agents import initialize_agent

from langchain.agents import AgentType

tools = load_tools(["wikipedia", "llm-math"], llm=llm) #llm-math의 경우 나이 계산을 위해 사용

agent = initialize_agent(tools,

                         llm,

                         agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,

                         description='계산이 필요할 때 사용',

                         verbose=True)

agent.run("에드 시런이 태어난 해는? 2024년도 현재 에드 시런은 몇 살?")




3

실행 결과

참조한 문서를 보여주고 거기서 정보를 가져와서 질문에 답변을 한다.

위키 피디아에서 정보를 가져온다.






<10>  실습환경 구축 - Windows PC에 아나콘다 설치, 주피터 노트북  (실습)


1

https://brunch.co.kr/@topasvga/4145



<10>  실습환경 구축 - Windows PC에 아나콘다 설치, 주피터 노트북 (선택) (실습)


1

# Windows PC에 아나콘다 환경 설치법

ChatGPT API 사용 - 가입 필요, 월 10달러 = 1만 5천 원 정도 결재 필요.


1)

Email 하나 준비


2) 

아나콘다 다운로드 - Email 필요


https://www.anaconda.com/download




3)

Add PATH 체크하여 설치





4)

# 가상환경 설정 = 파이썬 버전과 라이브러리 충돌을 방지 한다. 



Anaconda Prompt 

실행


(base) C:\Users\seo> conda env list

# conda environments:

#

base                  *  C:\Users\seo\anaconda3



conda create -n llm python=3.8

y


Proceed ([y]/n)?  y




# 가상환경 활성화

 conda env list


 conda activate llm


 conda env list




(base) C:\Users\seo> conda env list

# conda environments:

#

base                  *  C:\Users\seo\anaconda3

llm                      C:\Users\seo\anaconda3\envs\llm


(base) C:\Users\seo> conda activate llm



(llm) C:\Users\seo> conda env list

# conda environments:

#

base                     C:\Users\seo\anaconda3

llm                   *  C:\Users\seo\anaconda3\envs\llm



5)

#삭제 시

conda env remove -n llm   

// LLM 삭제





2

주피터 노트북 설치

작업용 노트북 설치하는 것이다.


1

pip install ipykernel



# 가상환경에 커널 연결하기

python -m ipykernel install --user --name 11m --display-name "llm"



# 주피터 노트북에 연결

jupyter notebook


FILE > NEW > notebook > llm




2


# 라이브러리 설치 =  아나콘다에서! 를 붙여 설치한다.

# 10초 후 설치 시작함


!pip install langchain==0.0.350





# langchain version check

#

import langchain; print('the version of install langcahin is',langchain.__version__)


the version of install langcahin is 0.0.350




3

# 오픈 AI , 허깅페이스 , 스트림릿을 설치한다.

허깅페이스 = 학습된 모델을 공유하는 사이트 

스트림릿= 데이터 분석과 시각화를 함께 간편하게 수행할 수 있는 파이썬 오픈 소스 라이브러리이다.


!pip install openai==1.4.0


!pip install huggingface-hub==0.19.4


!pip install streamlit==1.29.0





<11> 랭체인-데이터 연결- 아나콘다 (선택) (실습)


1


2

아나콘다 환경


Anaconda Prompt 

jupyter notebook



File - New  notebook 


https://github.com/gilbutITbook/080413/blob/main/%EC%8B%A4%EC%8A%B5/4%EC%9E%A5/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%97%B0%EA%B2%B0(Data_Connection)_%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4.ipynb





3

# 설치


!pip install langchain

!pip install openai

!pip install pypdf

!pip install tiktoken

!pip install faiss-cpu

!pip install sentence-transformers

!pip install langchain-community 




실행은 SHIFT + ENTER 키

(5분 걸림)




4

샘플 pdf 다운로드

https://github.com/gilbutITbook/080413/blob/main/Data/The_Adventures_of_Tom_Sawyer.pdf





5


from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader("c:/3/The_Adventures_of_Tom_Sawyer.pdf")

document = loader.load()

document[5].page_content[:5000]




6

pip show langchain





<12> 랭체인-메모리- 아나콘다  (선택) (실습)


1

메모리 = 데이터를 저장하는 공간

데이터 = 대화 과정에서 발생하는 데이터 


2

메모리 실습


https://github.com/gilbutITbook/080413/blob/main/%EC%8B%A4%EC%8A%B5/4%EC%9E%A5/%EB%AA%A8%EB%8D%B8_I_O_(Model_I_O)_%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4.ipynb




<13> 체크 리스트


1. 코랩 가입?  사용법?

2. OPENAI API 생성?




<14> 서비스 만들기


https://brunch.co.kr/@topasvga/4148




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari