본문 바로가기
머신러닝과 딥러닝(ML&DL)/LLM(Large Language Models)

GPT API와 LangChain 사용법

by whisperscope_ai 2024. 3. 10.
반응형

LangChain 이란?

LangChain은 언어 모델을 이용한 애플리케이션 개발을 위한 프레임워크입니다. 이 프레임워크는 애플리케이션이 컨텍스트를 인식하고, 여러 소스로부터의 컨텍스트(프롬프트 지시사항, 예시, 응답의 근거가 될 내용 등)에 연결될 수 있도록 지원합니다. 또한, 언어 모델을 이용한 추론(제공된 컨텍스트를 바탕으로 어떻게 응답할지, 어떤 행동을 취할지 등에 대한 추론)에 의존합니다​​.

LangChain은 데이터 인식과 에이전트 행위에 초점을 맞춘 강력하고 오픈 소스의 프레임워크로, 다양한 데이터 소스와의 연결을 가능하게 하여 보다 풍부하고 개인화된 경험을 제공합니다​​. 이 프레임워크는 유연성과 모듈성을 강조하며, 자연어 처리 파이프라인을 개별 구성 요소로 분해하여 개발자가 필요에 따라 워크플로우를 맞춤 설정할 수 있게 해줍니다. 이러한 적응성은 다양한 시나리오와 부문에서 AI 애플리케이션을 구축하는 데 이상적입니다​.
LangChain home

핵심 기능

LangChain은 다음과 같은 핵심 기능을 제공합니다:

  • 컨텍스트 인식: 애플리케이션이 사용자의 요구 사항과 상황을 이해하고 적절하게 반응할 수 있도록 합니다.
  • 다양한 데이터 소스와의 연결: 정보의 근거가 될 수 있는 다양한 소스로부터의 데이터를 활용할 수 있게 합니다.
  • 유연성과 모듈성: 개발자가 필요에 따라 자연어 처리 파이프라인을 맞춤 설정할 수 있게 해줍니다.

외부 데이터 소스와의 통합

LangChain을 사용하여 다음과 같은 서비스와 통합할 수 있습니다:

Hugging Face 연결

Hugging Face는 다양한 사전 훈련된 모델과 데이터셋을 제공합니다. LangChain을 사용하여 Hugging Face의 모델을 호출할 수 있습니다.

Notion 연결

Notion은 정보를 정리하고 관리할 수 있는 도구입니다. LangChain을 통해 Notion 데이터베이스에 저장된 정보를 읽고 쓸 수 있습니다.

Google과 Wikipedia 연결

Google 검색 API나 Wikipedia API를 통해 실시간 검색 결과나 위키백과 정보를 조회하고, 이를 사용자의 질문에 대한 답변 생성에 활용할 수 있습니다.

통합 방법

각 서비스와의 통합을 위해서는 해당 서비스의 API 키, 인증 방식, API 요청 구조 등을 이해해야 합니다. LangChain에서는 이러한 외부 API와의 통신을 용이하게 해주는 도구와 인터페이스를 제공합니다.

시작하기

LangChain을 사용하여 애플리케이션을 개발하기 위한 첫 걸음은 프레임워크를 설치하는 것입니다. 이후, 필요한 외부 데이터 소스와의 연결을 설정하고, 애플리케이션의 기능을 구현하게 됩니다.


LangChain 기본 사용법

필요한 라이브러리 설치하기

  • 필요한 패키지들을 설치하는 단계입니다. langchain, openai, 그리고 langchain-community를 설치합니다.(만약 anaconda&python 환경구축이 아직 안되어있다면  아래 링크를 참고하세요)
 

머신러닝 환경 구축 Anaconda & Pycharm (window )

Python 파이참(Pycharm) 및 아나콘다(Anaconda) 다운로드, 설치, 가상환경 연동하기 (window) 1. Anaconda 설치 방법 아나콘다 최신 버전을 다운로드합니다. Anaconda 다운로드 JustMe 선택 (전체 사용은 권한 선택

class.soyiyou.com

pip install langchain
pip install openai
pip install -U langchain-community

OpenAI API 키 설정하기

  • OpenAI API 키를 환경 변수로 설정하거나 코드 내에서 직접 전달할 수 있습니다.
from langchain.llms import OpenAI

# 환경변수를 통한 설정
llm = OpenAI()
# 직접 전달
# llm = OpenAI(openai_api_key=api_key)

LLM 호출하기

1) ChatOpenAI (ChatGPT) 호출하기

from langchain.chat_models import ChatOpenAI
# 대화 시작
response = chat_model.chat("사용자 메시지")
print(response)
from langchain.chat_models import ChatOpenAI
# ChatOpenAI 인스턴스 생성
chat_model = ChatOpenAI(
    model_name='gpt-3.5-turbo',  # 사용할 모델명
    api_key='your_openai_api_key'  # OpenAI API 키
)
# chat_model = ChatOpenAI() 시스템 환경변수에 api key 등록 되어있을 경우
print(chat_model.predict("좋은 프로그래머가 되려면 어떻게 해야 할까?"))

2) Message 객체를 활용하여 ChatGPT 호출하기

from langchain.schema import HumanMessage
text = "좋은 프로그래머가 되려면 어떻게 해야 할까?"
messages = [HumanMessage(content=text)]
print(chat_model.predict_messages(messages, temperature=0.1))

Prompt Template 작성하기

a) 기본 formatting 활용하기

from langchain.prompts import PromptTemplate

my_template = """아래의 질문에 대해 한 줄로 명확하고 친절하게 답변하세요.
질문: {question}"""
prompt = PromptTemplate.from_template(my_template)
print(chat_model.predict(prompt.format(question="좋은 프로그래머가 되려면 어떻게 해야 할까?")))

b) ChatMessageTemplate 활용하기

from langchain.prompts.chat import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate

template = """
You are a helpful assistant to help teenagers learn {output_language}.
Answer the question in <{output_language}> within 1~2 sentences.
YOU MUST USE <{output_language}> TO ANSWER THE QUESTION.
Question:"""

system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

# 샘플 쿼리 실행
query = chat_prompt.format_messages(output_language="English", text="좋은 프로그래머가 되려면 어떻게 해야 될지 대답해줘")
chat_model.predict_messages(query)

# 또 다른 쿼리 실행
query = chat_prompt.format_messages(output_language="Japanese", text="좋은 프로그래머가 되려면 어떻게 해야 될지 대답해줘")
chat_model.predict_messages(query)

CommaSeparatedListOutputParser 사용하기

from langchain.schema import BaseOutputParser
class CommaSeparated(BaseOutputParser):
    """LLM 출력에서 '|'로 구분된 목록을 반환하는 파서."""

    def parse(self, text: str):
        return text.strip().split("|")

CommaSeparated().parse("머신러닝|딥러닝")

LLMChain으로 조합하기

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser

class CommaSeparated(BaseOutputParser):
    """LLM 출력에서 '|'로 구분된 목록을 반환하는 파서."""

    def parse(self, text: str):
        return text.strip().split("|")

template = """
너는 대화에서 중요한 토픽을 찾고 해당 토픽과 관련된 중요한 단어를 제안해 주는 AI야.
대화에서 중요한 토픽을 찾고 최근 유행하는 또는 관련 있는 토픽을 찾아서 제안하고(한글[영문]) 간단한 단어의 설명도 해줘. 최소 5개 단어를 나열해야 해.
이때 각 단어는 반드시 comma(|)로 분리해서 대답하고, 이외의 말은 하지 마.
예를 들면 다음과 같아.

user: 최근 유전자 가위 기술은 중요한 것 같아
result: '유전자가위기술(Gene editing technology) | 유전자 수정(Genetic modification) | 생명공학(Biotechnology) | 유전자 조작(Gene manipulation) | 유전자 조작 도구 (Gene editing tools)'

질문:"""

system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
print(chat_prompt)

chain = LLMChain(
    llm=ChatOpenAI(),
    prompt=chat_prompt,
    output_parser=CommaSeparated()
)
print(chain.run("최근 머신러닝 기술과 생성모델이 중요한 것 같아."))

 

위 예제들은 LangChain의 핵심 클래스들을 활용하는 방법을 보여줍니다. 각 클래스의 세부 설정은 프로젝트의 요구 사항에 따라 조정할 수 있습니다. LangChain을 사용하면 개발자는 복잡한 자연어 처리 파이프라인을 더 쉽게 구성하고, 다양한 언어 모델을 활용한 애플리케이션을 효과적으로 개발할 수 있습니다.

반응형