13. 다양한 LLM 활용하기 Bedrock과 Azure
지금까지 우리는 주로 OpenAI의 모델을 사용하여 애플리케이션을 구축했습니다. 하지만 LangChain의 가장 큰 장점 중 하나는 특정 언어 모델(LLM) 제공업체에 종속되지 않는다는 것입니다. 이 장에서는 LangChain의 유연성을 활용하여, Amazon Bedrock과 Microsoft Azure에서 제공하는 다른 강력한 LLM들을 우리 코드에 얼마나 쉽게 통합할 수 있는지 배웁니다.
이 장에서 배울 내용
- LLM의 다양성: OpenAI 외에도 Amazon Bedrock, Microsoft Azure 등 다양한 LLM 제공업체가 있음을 이해합니다.
- Amazon Bedrock 연동: LangChain과
boto3
라이브러리를 사용하여 Amazon Bedrock에서 호스팅하는 Anthropic의 Claude 모델을 호출하는 방법을 배웁니다. - Azure OpenAI 연동: LangChain을 사용하여 Microsoft Azure 클라우드에 배포된 OpenAI 모델을 사용하는 방법을 익힙니다.
- LangChain의 추상화: 기본 LLM이 바뀌더라도 LangChain의 핵심 로직(프롬프트, 체인)은 거의 변경되지 않는다는 점을 통해 LangChain의 강력한 추상화 능력을 확인합니다.
LangChain의 LLM 유연성
LangChain은 다양한 LLM 제공업체와의 연동을 지원하는 ‘Chat Model’ 클래스들을 제공합니다. ChatOpenAI
, BedrockChat
, AzureChatOpenAI
등이 그 예입니다. 이 클래스들은 모두 동일한 기본 인터페이스를 따르기 때문에, 우리는 애플리케이션의 핵심 로직을 수정하지 않고도 필요에 따라 기본 LLM을 손쉽게 교체할 수 있습니다. 이는 특정 기술이나 회사에 얽매이지 않는 유연하고 확장 가능한 애플리케이션을 만드는 데 매우 중요합니다.
Amazon Bedrock 연동: Claude 모델 사용하기
첫 번째로, Amazon의 LLM 서비스인 Bedrock에 연결하여 Anthropic사의 Claude 모델을 사용해 보겠습니다. 이를 위해 AWS 서비스와 통신하기 위한 boto3
라이브러리가 필요합니다.
학습 목표
- LangChain을 사용하여 OpenAI 이외의 다른 LLM 제공업체(Amazon Bedrock)와 연동하는 방법 배우기
boto3
라이브러리를 사용하여 AWS 서비스에 인증하고 클라이언트를 생성하는 방법 익히기- LangChain의
BedrockChat
클래스를 사용하여 Bedrock에서 호스팅되는 모델(예: Claude)을 호출하는 방법 배우기
변경된 파일: notebook.ipynb
1 | # notebook.ipynb |
단계 1: AWS 인증 및 클라이언트 생성
Amazon Bedrock을 사용하려면 먼저 AWS에 인증해야 합니다. boto3
는 파이썬용 AWS SDK(소프트웨어 개발 키트)입니다.
boto3.Session(...)
:.env
파일 등에 저장된AWS_ACCESS_KEY
와AWS_SECRET_KEY
를 사용하여 AWS 세션을 시작합니다.session.client("bedrock-runtime", "us-east-1")
: 생성된 세션을 통해 Bedrock 모델을 실시간으로 호출할 수 있는bedrock-runtime
클라이언트를 만듭니다. 리전(region)을us-east-1
로 지정했습니다.
단계 2: BedrockChat
사용하기
LangChain은 Bedrock 연동을 위해 BedrockChat
클래스를 제공합니다.
client=client
: 위에서 생성한boto3
클라이언트를 전달하여 인증 정보를 제공합니다.model_id="anthropic.claude-v2"
: Bedrock 내에서 사용할 특정 모델의 ID를 지정합니다. 여기서는 Anthropic사의 Claude v2 모델을 선택했습니다.model_kwargs
:temperature
와 같이 모델에 특화된 파라미터를 전달할 수 있습니다.
단계 3: 체인 실행
가장 주목할 점은 BedrockChat
객체(chat
)를 생성한 이후의 코드는 이전과 완전히 동일하다는 것입니다. ChatPromptTemplate
을 만들고, LCEL을 사용하여 prompt | chat
으로 체인을 구성하고, invoke
로 실행하는 방식은 LLM 제공업체가 바뀌어도 변하지 않습니다.
이것이 바로 LangChain의 추상화가 제공하는 강력한 힘입니다. 개발자는 각 LLM 제공업체의 세세한 API 차이에 신경 쓸 필요 없이, 일관된 방식으로 애플리케이션의 핵심 로직을 구현하는 데 집중할 수 있습니다.
체크리스트
-
boto3
를 사용하여 AWS 서비스에 연결할 수 있나요? -
BedrockChat
클래스를 초기화하고model_id
를 지정하는 방법을 이해했나요? - LLM 제공업체가 바뀌어도 LangChain의 프롬프트와 체인 구성 방식은 동일하다는 것을 확인했나요?
Azure OpenAI 연동: 클라우드 플랫폼의 유연성
이번에는 또 다른 주요 클라우드 제공업체인 Microsoft Azure의 OpenAI 서비스를 사용해 보겠습니다. Azure는 OpenAI 모델에 엔터프라이즈급 보안과 관리 기능을 더하여 제공합니다. 이 또한 LangChain을 통해 쉽게 연동할 수 있습니다.
학습 목표
- LangChain을 사용하여 Microsoft Azure OpenAI Service에 배포된 모델을 연동하는 방법 배우기
AzureChatOpenAI
클래스의 주요 설정(azure_deployment
,api_version
) 이해하기- 다양한 LLM 제공업체를 사용하더라도 LangChain의 핵심 로직(프롬프트, 체인)은 변경되지 않음을 확인하기
변경된 파일: notebook.ipynb
1 | # notebook.ipynb |
단계 1: AzureChatOpenAI
사용하기
LangChain은 Azure OpenAI Service 연동을 위해 AzureChatOpenAI
클래스를 제공합니다. 이 클래스는 ChatOpenAI
와 매우 유사하지만, Azure 환경에 특화된 몇 가지 설정을 사용합니다.
- 인증:
AzureChatOpenAI
는 별도의 클라이언트 객체 대신, 다음과 같은 표준 환경 변수를 통해 자동으로 인증 정보를 읽어옵니다.OPENAI_API_TYPE
:"azure"
로 설정OPENAI_API_KEY
: Azure에서 발급받은 API 키OPENAI_API_BASE
: Azure에 배포된 모델의 엔드포인트 주소
azure_deployment="gpt-35-turbo"
: Azure 포털에서 모델을 배포할 때 지정한 배포 이름을 입력합니다. 이는 모델 이름(gpt-3.5-turbo
)과 다를 수 있다는 점에 유의해야 합니다.api_version="2023-05-15"
: 호출하려는 Azure OpenAI API의 버전을 명시합니다.
단계 2: LangChain의 일관성
Bedrock 예제와 마찬가지로, AzureChatOpenAI
객체(chat
)를 생성하고 나면 나머지 코드는 완전히 동일합니다. 프롬프트 템플릿을 만들고, LCEL로 체인을 구성하고, invoke
하는 방식은 전혀 변하지 않았습니다.
13장 요약
이번 장을 통해 우리는 LangChain의 가장 중요한 가치 중 하나인 **이식성(Portability)**과 **유연성(Flexibility)**을 직접 확인했습니다. OpenAI, Amazon Bedrock, Microsoft Azure 등 주요 LLM 제공업체들을 단지 몇 줄의 초기 설정 코드만 변경하여 손쉽게 교체할 수 있었습니다. 핵심 비즈니스 로직(프롬프트 엔지니어링, 체인 구성 등)은 그대로 유지하면서 기본 기술 스택을 자유롭게 바꿀 수 있다는 것은, 변화가 빠른 AI 분야에서 매우 강력한 장점입니다.
체크리스트
- Azure OpenAI Service를 사용하기 위해 어떤 환경 변수들이 필요한지 알고 있나요?
-
azure_deployment
가 모델 이름이 아닌, Azure 내의 ‘배포 이름’을 의미한다는 것을 이해했나요? - LangChain을 사용하면 OpenAI, Bedrock, Azure 간에 모델을 전환하더라도 핵심 코드는 거의 동일하게 유지된다는 점을 확인했나요?