[LangChain] LangServe를 이용한 LLM앱 배포

DH·2024년 8월 5일
0

LangChain

목록 보기
2/5
post-thumbnail

🦜🛠 LangSmith 연결


LangSmith 연결을 위해 .env 파일에 LangSmith API Key를 작성하자.
이 작업만 해주면 자동으로 세팅한 프로젝트명으로 LangSmith에서 Application 모니터링이 가능하다.

# .env
LANGCHAIN_API_KEY="Your API Key"
LANGCHAIN_PROJECT="Project Name"
# app.py
from dotenv import load_dotenv

load_dotenv()

🤖 LLM 모델 세팅


LangChain은 ChatGPT, Ollama, Gemini, Huggingface 등 다양한 LLM을 이용할 수 있다.
상황에 따라 본인이 사용하고자 하는 모델을 로드하기만 하면 된다.
아래의 Document에서 LangChain이 어떤 LLM을 지원하는지 확인할 수 있다.

https://python.langchain.com/v0.1/docs/integrations/llms/

from langchain_google_genai import ChatGoogleGenerativeAI

# Google의 gemini-pro 모델 사용
model = ChatGoogleGenerativeAI(model="gemini-pro",
                               convert_system_message_to_human=True,
                               )

📢 OutputParser


LLM은 사용자의 질문에 대해 AIMessage형태의 데이터를 반환한다.
이 데이터에는 다양한 메타데이터도 함께 포함되기 때문에 OutputParser를 통해 질문에 대한 대답만 파싱할 수 있다.

# app.py
from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()

📑 Prompt Template


특정 기업이 어떤 사업으로 돈을 벌고 있는지 분석해주는 LLM Application을 만든다고 가정해보자. 사용자는 ~~ 기업이 어떤 사업으로 돈을 버는지 분석해서 알려줘 라는 특정 양식의 질문을 계속해서 반복해야 할 것이다.

Prompt Template을 이용하면 사용자로부터 최소한의 Input 정보만을 받아 Template으로 만들어 LLM 모델에 완성된 질문을 전달하는 것이 가능해진다.

아래의 template을 이용하면 사용자는 company 변수에 해당하는 부분만 입력해도 완성된 질문을 LLM에 전달할 수 있다.

# app.py
from langchain_core.prompts import ChatPromptTemplate

system_template = "{company}가 어떤 사업으로 돈을 버는지 알려줘"
prompt_template = ChatPromptTemplate.from_messages(
    [("system", system_template), ("user", "{company}")]
)

🔗 LCEL문법을 이용한 Chain생성


앞서 준비한 LLM 모델, Prompt Template, Output Parser 세가지를 LCEL 문법을 통해 Chain을 생성한다.

chain = prompt_template | model | parser

🦜🏓 LangServe를 이용한 어플리케이션 배포


langserve를 이용해 LLM Application을 localhost에 배포해보자.

langserve 패키지에서 제공하는 add_routes 메소드를 이용해 Application에 대한 정보, LLM Chain, 경로 세가지를 지정해준다.

pip install "langserve[all]"
from langserve import add_routes

...

# define app
app = FastAPI(
  title="LangChain Server",
  version="1.0",
  description="A simple API server using LangChain's Runnable interfaces",
)

# adding chain route
add_routes(
  app,
  chain,
  path="/chain"
)

if __name__ == "__main__":
  import uvicorn
  
  uvicorn.run(app, host="localhost", port=8000)

아래의 명령어로 application을 실행할 수 있다.

python app.py

🎢 Playground


http://localhost:8000/chain/playground/ 경로로 이동하면 Playground를 통해 LLM Application 테스트가 가능하다.

LangSmith에서도 모니터링이 연동되는것을 확인할 수 있다.

Ref: https://python.langchain.com/v0.2/docs/tutorials/llm_chain/

profile
To infinity and beyond!

0개의 댓글