[LangChain] LangChain 시작하기

DH·2024년 8월 2일
0

LangChain

목록 보기
1/5
post-thumbnail

🦜🔗LangChain이란?


  • LangChain은 LLM(대형 언어 모델)을 기반으로 하는 Application을 개발하기 위한 Framework이다.
  • Third party 통합이 가능하여 Open AI, Gemini 등 다양한 기업의 LLM 모델을 사용할 수 있다.
  • LangSmith, LangGraph와 같은 플랫폼을 제공하여 LangChain의 테스트, 모니터링, 배포 등의 기능을 지원한다.

REF

https://github.com/langchain-ai/langchain

https://python.langchain.com/v0.1/docs/integrations/chat/google_generative_ai/

https://wikidocs.net/233345

⚙ 환경설정


# 구글(Gemini) AI 모델 세팅
# https://python.langchain.com/v0.1/docs/integrations/chat/google_generative_ai/

%pip install --upgrade --quiet  langchain-google-genai pillow

import os
import getpass

os.environ['GOOGLE_API_KEY'] = getpass.getpass()

🌱 ChatGoogleCenerativeAI 사용예시


Message 스키마 적용

from langchain_google_genai import ChatGoogleGenerativeAI

llm = ChatGoogleGenerativeAI(model="gemini-pro")
result = llm.invoke("2024년 올림픽 개최지는 어디야?") # 모델 호출
print(result.content)
from langchain_core.messages import HumanMessage, SystemMessage

llm = ChatGoogleGenerativeAI(model="gemini-pro",# 모델 종류
                             convert_system_message_to_human=True, #ChatGoogleGenerativeAI각 SystemMessage를 지원하지 않아 해당 파라미터를 True로 전달하여 SystemMessage 사용 가능
                             temperature=0.2, # 창의성 정도 0~1
                            )
message = [
    SystemMessage(content="앞으로 다, 나 까 로 말이 끝나도록 군대식으로 대답해."),
    HumanMessage(content="오늘 점심 메뉴 추천해봐"),
]
llm.invoke(message)

Steaming & Batching

ChatGoogleGenerativeAI는 자체적으로 스트리밍, 배치 기능을 제공한다.

# Streaing
for chunk in llm.stream("개발자에 관련된 시를 지어줘"):
    print(chunk.content)
    print("---")

# Batching
results = llm.batch(
    [
        "이번주에 등, 가슴 운동을 했는데 오늘 어떤 부위 운동을 할까?",
        "내일은 어떤 부위를 운동하는게 좋을까?"
    ]
)

for res in results:
    print(res.content)
    print("---")

📑 Prompt Template


PromptTemplate은 사용자의 입력으로부터 변수를 생성해 특정 양식으로 변환하여 LLM에게 전달하기 위해 사용한다.

from langchain.prompts import PromptTemplate

template = '{company}이 무슨 기업인지 간략하게 소개해줘'
prompt = PromptTemplate(template=template, input_variables=['company'])

# 연결된 체인(Chain)객체 생성
llm_chain = prompt | llm

# 체인 실행: run() 
print(llm_chain.invoke('애플'))

🔬 Output Parser


OutputParser는 llm 모델의 반환 값 중 content를 파싱하며 LCEL(LangChain Expression Language)를 구성하기 위해 사용한다.

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

llm = ChatGoogleGenerativeAI(model="gemini-pro",# 모델 종류
                             convert_system_message_to_human=True, #ChatGoogleGenerativeAI각 SystemMessage를 지원하지 않아 해당 파라미터를 True로 전달하여 SystemMessage 사용 가능
                             temperature=0.2, # 창의성 정도 0~1
                            )

template = '{company}이 무슨 기업인지 간략하게 소개해줘'
prompt = PromptTemplate(template=template, input_variables=['company'])
output_parser = StrOutputParser()

# 연결된 체인(Chain)객체 생성
llm_chain = prompt | llm | output_parser

print(llm_chain.invoke({'company': '애플'}))

🦜🛠LangSmith 연결


  • LangSmith는 LLM Application 모니터링, 테스트 지원, 배포 지원 도구이다.
  • 프로젝트 및 API Key를 생성하고 .env 파일에 아래의 4개 값을 추가하면 동작하는 LLM Application을 LangSmith와 연동할 수 있다.
  • 추후 RAG 구축 시 어떤 문서가 llm 모델에 전달되는지 또한 모니터링이 가능하다.
  • https://smith.langchain.com/

profile
To infinity and beyond!

0개의 댓글