LangChain을 사용하여 LLM과 작업하기 - openai, Hugging Face 등

GoGoComputer·2024년 9월 30일
0

LangChain Basics

목록 보기
4/40

LangChain을 사용하여 LLM과 작업하기

안녕하세요! LLM(Large Language Models)로 작업하는 강의에 오신 것을 환영합니다. 이 강의에서는 LangChain 라이브러리를 사용하여 대형 언어 모델과 상호 작용하는 방법을 배우게 됩니다.


LangChain이란 무엇인가요?

LangChain은 대형 언어 모델(LLM)과 쉽게 상호 작용할 수 있도록 도와주는 파이썬 라이브러리입니다. 이 라이브러리를 사용하면 다양한 LLM 서비스에 연결하여 텍스트 생성, 대화형 AI, 데이터 처리 등을 수행할 수 있습니다.


LLM의 두 가지 주요 카테고리

LLM은 크게 두 가지로 나뉩니다:

  1. 텍스트 완성 모델: 입력된 텍스트를 기반으로 다음에 올 텍스트를 예측하여 생성합니다.
    • 예시: "강아지가 울타리를 뛰어넘었다"라는 입력이 주어지면, 모델은 그 다음에 올 법한 문장을 생성합니다.
  2. 채팅 모델: 대화형 형태로 메시지를 주고받으며 상호 작용합니다.
    • 예시: 사용자가 질문을 하면 AI가 답변하고, 이 과정을 반복하여 대화를 이어갑니다.
    • 시스템 수준 프롬프트를 사용하여 AI의 역할이나 성격을 설정할 수 있습니다.
      • 예: "당신은 수학을 가르치는 튜터입니다."

LangChain이 지원하는 서비스들

LangChain은 다양한 LLM 서비스와 통합되어 있습니다. 주요 서비스로는:

  • OpenAI: GPT-3, GPT-4 등
  • Google Cloud Vertex AI: Google의 LLM 서비스
  • Anthropic: Claude 모델 등
  • Hugging Face: 다양한 오픈 소스 모델 제공

이 강의에서는 OpenAI의 API를 사용하여 예제를 진행하겠습니다. 그러나 LangChain의 장점은 다른 서비스로 쉽게 전환할 수 있다는 것입니다. 필요한 경우 임포트(import) 구문만 변경하면 됩니다.


주피터 노트북에서 환경 변수를 설정하는 방법 두 가지

1. 코드 내에서 환경 변수 설정하기

주피터 노트북 내에서 특정 환경 변수만 설정하고 싶다면, Python의 os 모듈을 사용하면 됩니다. 이렇게 설정된 변수는 주피터 노트북이 실행되는 동안에만 유효합니다.

import os

# 환경 변수 설정
os.environ['MY_VAR'] = 'my_value'

# 확인
print(os.getenv('MY_VAR'))

이 방법은 주피터 노트북에서만 환경 변수를 적용하고 싶을 때 유용합니다. 주피터 노트북을 닫으면 해당 환경 변수는 삭제됩니다【6†source】【7†source】.

2. .env 파일 사용하기

.env 파일을 만들어 환경 변수를 관리할 수 있습니다. 이를 위해서는 python-dotenv 패키지를 설치해야 합니다.

pip install python-dotenv

설치 후, .env 파일에 환경 변수를 추가하고 노트북에서 이를 불러옵니다:

# .env 파일 내용
MY_VAR=my_value

주피터 노트북에서 .env 파일을 불러오려면 다음 명령어를 사용합니다:

%load_ext dotenv
%dotenv

이후, os.getenv()를 사용해 해당 변수를 호출할 수 있습니다【7†source】【10†source】.

이 두 가지 방법을 통해, 주피터 노트북에서 환경 변수를 설정하고 사용할 수 있습니다. 필요에 따라 코드 내에서 바로 설정하거나, .env 파일을 사용하여 관리할 수 있습니다.


vsCode 에서 환경 변수를 설정하는 방법

Visual Studio Code(VSCode)에서 OpenAI API 키를 .env 파일에 저장하고 파이썬 코드에서 불러오는 방법을 안내해드리겠습니다.


1. .env 파일 생성 및 API 키 저장

프로젝트의 루트 디렉토리에 .env 파일을 생성하고 다음과 같이 API 키를 저장합니다:

OPENAI_API_KEY=your_api_key_here

주의: your_api_key_here 부분에 실제 OpenAI API 키를 입력하세요.


파이썬 가상환경 만들기

python3 -m venv venv
  • 설명: Python의 venv 모듈을 사용하여 새로운 가상 환경을 생성합니다.
  • 동작: 현재 디렉토리에 venv라는 이름의 폴더가 생성되며, 이 폴더에는 가상 환경을 위한 필요한 Python 실행 파일과 라이브러리들이 포함됩니다.
  • 목적: 프로젝트마다 독립적인 패키지 관리가 가능하도록 하여, 패키지 충돌이나 버전 문제를 방지합니다.
source venv/bin/activate
  • 설명: 생성한 가상 환경을 활성화합니다.
  • 동작: venv/bin/activate 스크립트를 실행하여 현재 셸 세션에서 Python 명령어와 패키지들이 가상 환경을 참조하도록 설정합니다.
  • 결과: 터미널 프롬프트에 (venv)와 같이 가상 환경 이름이 표시되어 활성화 상태임을 나타냅니다.
source venv/bin/deactivate
  • 설명: 가상 환경을 비활성화합니다.
  • 동작: deactivate 스크립트를 실행하여 셸 세션을 원래 상태로 복원합니다.
  • 참고: 일반적으로 가상 환경을 비활성화할 때는 단순히 deactivate 명령어만 입력하면 됩니다.

추가 정보:

  • 가상 환경(Virtual Environment): Python 프로젝트마다 독립적인 패키지와 설정을 유지할 수 있도록 해주는 도구입니다.
  • venv 모듈: Python 3에서 기본 제공하는 가상 환경 생성 모듈로, 외부 패키지 설치 없이 사용할 수 있습니다.
  • 활성화와 비활성화: 가상 환경을 활성화하면 해당 환경에 설치된 패키지들이 우선적으로 사용되며, 비활성화하면 시스템의 기본 Python 환경으로 돌아갑니다.

이렇게 하면 프로젝트 간에 패키지 버전 충돌을 방지하고, 보다 일관된 개발 환경을 유지할 수 있습니다.

2. python-dotenv 패키지 설치

파이썬에서 .env 파일의 환경 변수를 불러오기 위해 python-dotenv 패키지를 설치합니다.

pip install python-dotenv

3. 파이썬 코드에서 환경 변수 로드 및 사용

파이썬 스크립트에서 .env 파일을 로드하고, os.getenv()를 사용하여 환경 변수를 가져옵니다.

from dotenv import load_dotenv
import os
import openai  # OpenAI 패키지가 설치되어 있어야 합니다.

# .env 파일 로드
load_dotenv()

# .env 파일에서 API 키 로드
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

# API 키가 제대로 로드되었는지 확인
if openai_api_key is None:
    raise ValueError("OPENAI_API_KEY가 .env 파일에 설정되지 않았습니다.")

4. .gitignore.env 파일 추가 (Git 사용 시)

.env 파일이 버전 관리 시스템에 포함되지 않도록 .gitignore 파일에 추가합니다.

# .gitignore 파일에 추가
.env

5. 추가 설정 (선택 사항)

  • VSCode 확장 프로그램 설치: 환경 변수 관리에 도움이 되는 확장 프로그램을 설치할 수 있습니다.
  • OpenAI 패키지 설치: OpenAI 라이브러리가 설치되어 있지 않다면 다음 명령어로 설치하세요.
pip install openai

요약

  • 보안 유지: API 키를 코드에 직접 작성하지 않고 .env 파일에 저장하여 보안을 유지합니다.
  • 환경 변수 로드: python-dotenvload_dotenv() 함수를 사용하여 .env 파일의 내용을 환경 변수로 로드합니다.
  • API 키 사용: os.getenv()로 환경 변수를 가져와 OpenAI API 키로 설정합니다.

이렇게 설정하면 VSCode에서 안전하게 OpenAI API 키를 관리하고 파이썬 코드에서 사용할 수 있습니다.

OpenAI API 설정하기

OpenAI의 API를 사용하기 위해서는 API 키를 생성하고 환경 변수에 설정해야 합니다.

  1. OpenAI 계정 생성 및 API 키 발급

  2. API 키 환경 변수에 설정하기

    파이썬 코드나 시스템 환경 변수에 API 키를 설정할 수 있습니다.

    • 시스템 환경 변수 설정 (추천)

      • 터미널에서 다음 명령어를 실행합니다:
        export OPENAI_API_KEY='your-api-key-here'
      • 또는 Windows의 경우 시스템 환경 변수에 OPENAI_API_KEY를 설정합니다.
    • 파이썬 코드에서 설정

      import os
      os.environ['OPENAI_API_KEY'] = 'your-api-key-here'

LangChain으로 OpenAI 모델 사용하기

이제 LangChain을 사용하여 OpenAI의 LLM과 상호 작용해보겠습니다.

1. LangChain 설치하기

pip install langchain openai
pip install langchain_community

2. 기본 텍스트 완성 모델 사용하기

from dotenv import load_dotenv
import os

# .env 파일 로드
load_dotenv()

# .env 파일에서 API 키 로드
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

# API 키가 제대로 로드되었는지 확인
if openai_api_key is None:
    raise ValueError("OPENAI_API_KEY가 .env 파일에 설정되지 않았습니다.")

from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage

# 채팅 모델 인스턴스 생성
chat = ChatOpenAI(model_name='gpt-4o')

# 사용자 메시지
human_message = HumanMessage(content="Python에서 리스트를 정렬하는 방법을 알려줘.")

# 메시지 리스트 생성
messages = [human_message]

# 응답 생성
response = chat(messages)
print(response.content)

3. 여러 프롬프트에 대한 응답 생성

# 여러 프롬프트 리스트
prompts = ([
    "명왕성에 대한 재미있는 사실을 알려줘.",
    "화성에 대한 흥미로운 사실을 알려줘."
])

# 각 프롬프트에 대해 응답 생성
for prompt in prompts:
    response = llm(prompt)
    print(f"질문: {prompt}\n답변: {response}\n")

채팅 모델 사용하기

OpenAI의 GPT-3.5 및 GPT-4 모델은 채팅 형식으로 상호 작용합니다.

1. ChatOpenAI 사용하기

from dotenv import load_dotenv
import os

# .env 파일 로드
load_dotenv()

# .env 파일에서 API 키 로드
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

# API 키가 제대로 로드되었는지 확인
if openai_api_key is None:
    raise ValueError("OPENAI_API_KEY가 .env 파일에 설정되지 않았습니다.")


from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage

# 채팅 모델 인스턴스 생성
chat = ChatOpenAI(model_name='gpt-3.5-turbo')

# 시스템 메시지로 AI의 역할 설정 (선택 사항)
system_message = SystemMessage(content="당신은 친절한 도우미입니다.")

# 사용자 메시지
human_message = HumanMessage(content="Python에서 리스트를 정렬하는 방법을 알려줘.")

# 메시지 리스트 생성
messages = [system_message, human_message]

# 응답 생성
response = chat(messages)
print(response.content)

출력 예시:

Python에서 리스트를 정렬하려면 `sort()` 메서드를 사용할 수 있습니다. 예를 들어:

```python
my_list = [5, 2, 9, 1]
my_list.sort()
print(my_list)  # 출력: [1, 2, 5, 9]

또는 내림차순으로 정렬하려면 sort(reverse=True)를 사용합니다.


#### **2. 대화 이어나가기**

```python
# 이전 메시지들
messages.append(response)

# 새로운 사용자 메시지 추가
messages.append(HumanMessage(content="내림차순 정렬은 어떻게 하나요?"))

# 응답 생성
response = chat(messages)
print(response.content)

출력 예시:

내림차순으로 리스트를 정렬하려면 `sort()` 메서드에 `reverse=True` 매개변수를 전달하면 됩니다. 예:

```python
my_list = [5, 2, 9, 1]
my_list.sort(reverse=True)
print(my_list)  # 출력: [9, 5, 2, 1]

이렇게 하면 리스트가 큰 값부터 작은 값 순으로 정렬됩니다.


---

### **다른 서비스로 전환하기**

LangChain을 사용하면 다른 LLM 서비스로 쉽게 전환할 수 있습니다. 예를 들어, Hugging Face의 모델을 사용하려면:

#### **1. Hugging Face Hub 설치**

```bash
pip install huggingface_hub

2. Hugging Face 모델 사용하기

from langchain import HuggingFaceHub

# Hugging Face Hub 토큰 설정
import os
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'your-huggingface-api-token'

# Hugging Face 모델 인스턴스 생성
llm = HuggingFaceHub(repo_id="gpt2")  # 원하는 모델로 변경 가능

# 프롬프트에 대한 응답 생성
prompt = "자연어 처리가 무엇인가요?"
response = llm(prompt)
print(response)

마무리

이 강의에서는 LangChain을 사용하여 OpenAI의 LLM과 상호 작용하는 방법을 배웠습니다. LangChain은 다양한 LLM 서비스와 통합되어 있어, 코드의 작은 변경만으로도 다른 모델로 전환할 수 있습니다.

앞으로의 강의에서는 더 복잡한 예제와 LangChain의 고급 기능을 탐구할 것입니다. 특히 프롬프트 템플릿체인을 사용하여 여러 작업을 연결하는 방법을 배울 것입니다.

다음 강의에서 뵙겠습니다!


추가 참고 자료


profile
IT를 좋아합니다.

0개의 댓글