본문 바로가기
📚도서 공부/LangChain으로 구현하는 LLM

3. LangChain 시작해보기(GPT4ALL)

by Majestyblue 2024. 4. 18.

1. 환경 구성하기
도커 환경이 잘 안되서 그냥 아나콘다로 하기로 함!

  1. 아나콘다 설치
  2. 가상환경 생성 conda create -n my_gpt4all python=3.10
  3. 패키지 설치
    pip install openai==0.28
    pip install gradio==4.21 gradio 에러나면 에러부분 encoding을 ‘UTF-8’로 바꾸니까 되더라
    pip install langchain
    pip install gpt4all
    pip install langchain_experimental
    pip install langchain_decorators
    pip install jupyter notebook → 여기서 에러날 수 있는데 chardet? 이거 설치하니까 되더라
  4. 허깅페이스 모델 내려받기
    TheBloke/Mistral-7B-Instruct-v0.2-GGUF at main (huggingface.co)
     

    TheBloke/Mistral-7B-Instruct-v0.2-GGUF at main

     

    huggingface.co


    여기서 mistral-7b-instruct-v0.2.Q4_0.gguf 이란 모델을 다운받기(어느 것을 받아도 상관없는데 시간 + 효율을 생각하면 4비트 양자화 모델(Q4)가 나은 것 같음.


  5. 모델 경로 지정하기
    본인은 D:\gpt4all\Download model 에 모델을 저장함.
    즉 모델 경로는 D:\gpt4all\Download model\mistral-7b-instruct-v0.2.Q4_0.gguf 이 됨

 

 

 

2. 가짜 LLM

# Fake LM
from langchain.llms.fake import FakeListLLM
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain_experimental.tools import PythonREPLTool

tools = PythonREPLTool()
responses = ["Action: Python_REPL\\nAction Input: print(2 + 2)", "Final Answer: 4"]
llm = FakeListLLM(responses=responses)
agent = initialize_agent(
    tools=[tools] ,llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("whats 2 + 2")

가짜 LLM은 테스트 중에 실제 API를 호출할 필요 없이 LLM 응답을 시뮬레이션할 수 있다. 빠른 프로토타이핑 및 에이전트의 단위 테스트에 유용하다. 테스트 중에 히트율(hitting rate)제한을 피할 수 있으며 다양한 응답을 모방해 해당 응답을 올바르게 처리하는지 확인할 수 있다.

 

  1. from langchain.llms.fake import FakeListLLM: LangChain 라이브러리의 가짜 LLM(Large Language Model) 모듈에서 FakeListLLM 클래스를 가져온다. 이 클래스는 테스트 목적으로 사전 정의된 응답을 반환하는 가짜 언어 모델을 생성한다.
  2. from langchain.agents import initialize_agent: 에이전트를 초기화하는 함수인 initialize_agent를 가져온다. 이 함수는 도구들과 LLM을 사용하여 에이전트를 설정한다
  3. from langchain.agents import AgentType: 에이전트 유형을 정의하는 열거형 AgentType을 가져온다. 이는 에이전트가 어떤 방식으로 작동할지 결정하는 데 사용된다.
  4. from langchain_experimental.tools import PythonREPLTool: PythonREPLTool 클래스를 가져온다. 이 도구는 Python 코드를 실행하는 REPL(Read-Eval-Print Loop) 환경을 제공한다. 쉽게 생각하면 Python 설치하면 제공되는 Shell 환경임. 값의 출력을 보려면 print(...)을 사용해야 한다.
  5. PythonREPLTool() 클래스의 인스턴스를 tools로 생성한다. Python 코드를 실행하는데 사용된다.
  6. responses = ["Action: Python_REPL\\nAction Input: print(2 + 2)", "Final Answer: 4"]: 입력에 따라 변하지 않는 가짜 LLM이 반환할 응답 2가지를 정의한다. 이 예제에서는 Python REPL 도구를 사용하여 2 + 2를 계산하는 명령과 그 결과인 '4'를 포함한다.
  7. llm = FakeListLLM(responses=responses): FakeListLLM을 사용하여 사전 정의된 응답을 반환하는 가짜 LLM을 생성한다.
  8. agent = initialize_agent(tools=[tools], llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True): 정의된 도구, 가짜 LLM, 그리고 에이전트 유형(ZERO_SHOT_REACT_DESCRIPTION)을 사용하여 에이전트를 초기화한다. verbose=True는 에이전트의 작동 과정에서 상세한 정보를 출력하도록 설정한다.
  9. agent.run("whats 2 + 2"): 초기화된 에이전트에게 "whats 2 + 2"라는 질문을 실행하도록 요청한다. 에이전트는 이 질문을 처리하고 사전 정의된 응답을 기반으로 결과를 반환한다.

<출력결과>

> Entering new AgentExecutor chain...
Action: Python_REPL
Action Input: print(2 + 2)
Observation: 4

Thought:Final Answer: 4

> Finished chain.
'4'

 

 

만약 입력을 바꾸면 어떻게 될까?

agent.run("whats 3 + 2")

답은, 위의 출력과 그대로 나온다. 입력과 전혀 상관이 없다.

 

 

만약 response를 바꾸면 어떻게 될까?

responses = ["Action: Python_REPL\\nAction Input: print(2 + 2)", "Final Answer: 5"]
llm = FakeListLLM(responses=responses)
agent = initialize_agent(
    tools=[tools] ,llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("whats 2 + 2")

 

 

print( 2 + 2 ) 로 인해 4가 발견되었지만 최종 출력은 5로 설정하였으므로 5가 출력되고 체인이 끝난다.

> Entering new AgentExecutor chain...
Action: Python_REPL
Action Input: print(2 + 2)
Observation: 4

Thought:Final Answer: 5

> Finished chain.
'5'

 

 

3. GPT4All 실행시켜 보기

from langchain.llms import GPT4All
model = "D:\\gpt4all\\Download model\\mistral-7b-instruct-v0.2.Q4_0.gguf"
llm = GPT4All(model=model)
text = "We can run large language models locally for all kinds of applications, "
response = llm(text)
print(response)

 

<출력결과>

but it’s not always practical or cost-effective. In this tutorial, we will learn how to use Hugging Face's Transformers library and Google Colab to fine-tune a pretrained model on your own dataset without the need for expensive hardware.

## Prerequisites:
 1. Basic understanding of Python programming language.
 2. Familiarity with Jupyter Notebook or Google Colab environment.

 Let's get started!

 **Step 1:** Set up your development environment

 First, make sure you have the following tools installed on your system:
 - Python (preferably version >=3.7)
 - pip (Python package installer)
 - Google Colab account and access to it via a web browser or Jupyter Notebook.

 **Step 2:** Install required packages

 Open a new notebook in your preferred environment, be it Google Colab or Jupyter Notebook. In the first cell, write:

 ```python
 !pip install torch torchvision transformers
 import torch
 print(torch.__version__)
 import transformers
 from transformers import AutoTokenizer, AutoModelFor
 
 
 
 
 ## 전제 조건:
1. 파이썬 프로그래밍 언어에 대한 기본적인 이해.
2. Jupyter 노트북 또는 Google Colab 환경에 익숙합니다.

시작하겠습니다!

**1단계:** 개발 환경 설정

먼저 시스템에 다음과 같은 도구가 설치되어 있는지 확인합니다:
- Python(prefer 가능한 버전 >= 3.7)
- pip(Python 패키지 설치 프로그램)
- 구글 콜랩 계정과 웹 브라우저 또는 주피터 노트북을 통해 액세스할 수 있습니다.

**2단계:** 필수 패키지 설치

Google Colab이든 Jupyter 노트북이든 원하는 환경에서 새 노트북을 엽니다. 첫 번째 칸에 다음과 같이 적습니다:
 ```python
 !pip install torch torchvision transformers
 import torch
 print(torch.__version__)
 import transformers
 from transformers import AutoTokenizer, AutoModelFor