LangChain

랭체인, LangChain (Language Chain)


Langchain은 애플리케이션에 LLM을 쉽게 추가할 수 있도록하는 프레임워크입니다.

랭체인 공식 홈페이지 바로가기
랭체인 공식 깃허브 페이지

LangChain 기본 사용 방법


ChatOpenAI 클래스를 이용해, 로컬 LLM을 이용해, LLM과 질의응답하기

VLLM으로 내 PC에서 서빙중인 로컬 LLM 모델을 이용해 OpenAi Compatible 한 API를 끌어다가 사용할 수 있다. 나는 Image, Text -> to -> Text 모델인 Qwen2.5-VL 32GB 모델을 이용해 테스트 해보았다.


  • VLLM은 Ubuntu(Linux) 환경에서 가장 호환이 높기 때문에 되도록 우분투 환경에서 테스트하는 것을 추천한다.

VLLM 공식 홈페이지 바로가기

  • VLLM에 대한 자세한 내용은 공식 홈페이지 Docs를 참고하면 자세히 나와있다.
# 로컬 실행
import subprocess

base_cmd = [
            "vllm", "serve", "Qwen/Qwen2.5-VL-32B-Instruct-AWQ",
            "--host", "0.0.0.0",
            "--port", "50001",
            "--tensor-parallel-size", "2",
            "--max-model-len", "50000",
            "--enable-auto-tool-choice",
            "--tool-call-parser", "hermes",
        ]
subprocess.run(base_cmd, check=True)


위 코드를 이용해, 직접 VLLM을 통해서 서빙을 해주었다. 서빙을 해주었다면, 다음 주소를 통해 Swagger API 웹 페이지를 확인할 수 있다. 나는 port=50001로 사용해주었기 때문에 포트번호가 50001이다.

http://localhost:50001/docs


확인을 해보았다면, 다음과 같이 ChatOpenAI 클래스를 이용해서, 랭체인에 내 로컬 LLM을 붙여줄 수 있다.

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

llm = ChatOpenAI(
        base_url="http://localhost:50001/v1",
        api_key="설정한 경우에만 입력",
        model="모델은 내가 서빙한 모델과 이름이 일치해야한다. 내 경우는 : Qwen/Qwen2.5-VL-32B-Instruct-AWQ",
        streaming=True,          # 스트리밍 사용
        temperature="모델의 창의성을 설정하는 값",
    )


chat_template =  ChatPromptTemplate(
    [
        ("system", "You are a helpful assistant. Your name is {name}"),
        ("human", "Hello how are you?"),
        ("ai", "I'm doing well, Thanks!"),
        ("human", "{user_input}")
    ]
)

messages = (chat_template.format_messages(name="Minseo", user_input="What is your name?"))

    print(messages)

    print(llm.invoke(messages))
  • 랭체인은 프롬프트 관리를 쉽게 해주기 위해서 ChatPromptTemplate과 같은 클래스를 제공한다. 이외에도 여러 종류의 프롬프트 클래스가 존재한다.


여기까지가 기본적으로 vllm을 통해 로컬 llm 구동 후, langchain을 통해 쉽게 llm과 질의응답을 할 수 있는 환경을 만드는 방법이다.

results matching ""

    No results matching ""