AI Engineer의 '사부작' 공간

'팩토리 메서드 디자인 패턴': Langchain의 LLM 모델 선택 구현 사례 본문

Code/Design pattern

'팩토리 메서드 디자인 패턴': Langchain의 LLM 모델 선택 구현 사례

ChoYongHo 2025. 3. 30. 00:54
728x90

안녕하세요. 파이썬에서 객체 지향 프로그래밍을 할 때 자주 사용되는 디자인 패턴 중 하나가 팩토리 메서드 디자인 패턴(Factory Method Design Pattern)입니다. 오늘은 이 패턴의 개념과 Langchain 라이브러리에서 이 패턴을 어떻게 효과적으로 활용하고 있는지 살펴보겠습니다.

팩토리 메서드 디자인 패턴이란?

팩토리 메서드 디자인 패턴은 객체 생성 로직을 캡슐화하여 클라이언트 코드로부터 분리하는 생성 패턴(Creational Pattern)입니다. 이 패턴은 객체를 생성하는 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지는 서브클래스가 결정하도록 합니다.

팩토리 메서드 디자인 패턴의 주요 장점은 다음과 같습니다.
- 캡슐화: 객체 생성 로직을 숨기고 분리
- 유연성: 런타임에 어떤 객체를 생성할지 결정
- 확장성: 새로운 클래스를 추가하기 쉬움
- 느슨한 결합: 객체 생성과 사용 코드 간의 의존성을 줄임


Langchain의 init_chat_model(): 팩토리 메서드 디자인 패턴의 실제 구현

Langchain은 LLM 애플리케이션 개발을 위한 강력한 프레임워크인데, 이 라이브러리에서 팩토리 메서드 디자인 패턴이 매우 효과적으로 구현된 사례가 바로 init_chat_model() 메서드입니다.

많은 LLM 애플리케이션에서는 사용자가 원하는 모델 제공자와 모델을 직접 지정할 수 있어야 합니다. 이를 위해서는 다양한 채팅 모델을 사용자 설정에 따라 초기화하는 로직이 필요합니다. init_chat_model() 메서드는 임포트 경로나 클래스 이름에 대해 걱정할 필요 없이 다양한 모델 통합을 쉽게 초기화할 수 있게 해줍니다

아래의 예제는 팩토리 메서드 디자인 패턴의 핵심을 보여줍니다. init_chat_model() 함수는 파라미터에 따라 다른 구체적인 클래스의 인스턴스를 반환하지만, 사용자는 그 내부 구현에 대해 알 필요가 없습니다. 모든 모델이 동일한 인터페이스(invoke() 메서드)를 구현하고 있어 일관된 방식으로 사용할 수 있습니다.

from langchain.chat_models import init_chat_model

# OpenAI 모델 인스턴스 생성
gpt_4o = init_chat_model("gpt-4o", model_provider="openai")

# Anthropic 모델 인스턴스 생성
claude_opus = init_chat_model("claude-3-opus-20240229", model_provider="anthropic")

# Google VertexAI 모델 인스턴스 생성
gemini_15 = init_chat_model("gemini-1.5-pro", model_provider="google_vertexai")

# 모든 모델은 동일한 인터페이스로 사용 가능
print("GPT-4o: " + gpt_4o.invoke("what's your name").content + "\n")
print("Claude Opus: " + claude_opus.invoke("what's your name").content + "\n")
print("Gemini 1.5: " + gemini_15.invoke("what's your name").content + "\n")

결론

팩토리 메서드 디자인 패턴은 객체 생성 로직을 캡슐화하고 분리하여 코드의 유연성과 확장성을 높이는 효과적인 방법입니다. LangChain의 init_chat_model() 구현은 이 패턴을 활용한 실제 사례로, 다양한 LLM(대규모 언어 모델)을 통합하고 런타임에서 모델을 전환하며 애플리케이션의 다른 부분과 원활하게 연동할 수 있도록 설계되었습니다.

이러한 구조를 우리의 애플리케이션에 적용하면 더 나은 AI 서비스를 제공할 수 있을 뿐만 아니라, 팀원들과의 협업에서도 높은 효율성을 발휘할 수 있습니다.


■ 참고자료

https://python.langchain.com/docs/how_to/chat_models_universal_init/

 

How to init any model in one line | 🦜️🔗 LangChain

Many LLM applications let end users specify what model provider and model they want the application to be powered by. This requires writing some logic to initialize different chat models based on some user configuration. The initchat_model() helper method

python.langchain.com

 

728x90