1. LLM 소개

대규모 언어 모델(Large Language Models, LLMs)은 LangChain의 핵심 구성 요소입니다. LangChain 자체는 대규모 언어 모델 기능을 제공하지 않고, 대신 다양한 일반 대규모 언어 모델을 캡슐화하여 표준 인터페이스를 제공하여 개발자들이 편리하게 대규모 언어 모델을 조작할 수 있게 합니다.

현재 LangChain은 여러 대규모 언어 모델을 캡슐화하고 사용자 정의 모델도 지원합니다. 개발자들은 새로운 모델 인터페이스를 캡슐화할 수 있습니다.

  • 참고: 현재 많은 오픈 소스 및 상용 대규모 모델이 있습니다. 비용 및 모델 기능의 차이를 고려하여 각자가 다양한 선택을 할 수 있습니다. 또한 모델 변경이 자주 일어날 수 있으며, 모델을 변경할 때 비즈니스 코드를 너무 많이 수정하고 싶어하지 않을 수 있습니다. 이것이 LangChain의 가치가 발휘되는 곳입니다.

2. 설정

2.1 설치

LangChain에서 OpenAI LLM을 사용하려면 사용자는 다음 명령을 실행하여 OpenAI Python 패키지를 설치해야 합니다:

pip install openai

2.2 API Key 설정

OpenAI API에 액세스하려면 OpenAI 플랫폼에서 계정을 만들어 API 키를 얻어야 합니다. API 키를 획득한 후 다음 명령을 사용하여 환경 변수로 설정할 수 있습니다:

export OPENAI_API_KEY="your-api-key"

또는 환경 변수를 설정하고 싶지 않은 경우에는 다음과 같이 OpenAI LLM 클래스를 초기화할 때 API 키를 직접 전달할 수도 있습니다:

from langchain_openai import OpenAI

llm = OpenAI(openai_api_key="your-api-key")

3. LCEL 구현

LangChain에서 LLM은 LangChain Expression Language (LCEL)의 Runnable 인터페이스를 구현합니다. 즉, invoke, stream, batch 등과 같은 다양한 함수 호출을 지원합니다.

LLM은 문자열 입력 또는 문자열 프롬프트로 강제 변환이 가능한 객체인 List[BaseMessage]PromptValue를 받을 수 있습니다.

4. LLM 사용 예시

4.1 호출

특정 프롬프트로 LLM을 호출하려면 다음과 같이 invoke 함수를 사용할 수 있습니다:

llm.invoke("여기에 LLM을 위한 프롬프트를 제공합니다")

4.2 스트리밍

LLM에서 실시간으로 텍스트 출력을 받아오고 처리하는 방법을 스트리밍이라고 합니다. 아래는 LLM을 사용하여 스트리밍 처리하는 예시입니다:

for chunk in llm.stream("LLM 스트리밍을 위한 프롬프트를 제공합니다"):
    print(chunk, end="", flush=True)

4.3 일괄 처리

일괄 처리는 LLM에 대해 여러 입력을 병렬로 처리할 수 있게 합니다. 다음과 같이 일괄 프롬프트를 처리할 수 있습니다:

llm.batch(["프롬프트 1", "프롬프트 2", "프롬프트 3"])

4.4 비동기 작업

효율을 향상시키기 위해 비동기 작업은 LLM과 함께 사용할 수 있습니다. ainvoke, astream, abatch, astream_log와 같은 비동기 작업은 비동기 실행을 가능하게 합니다. 아래는 LLM을 사용하여 비동기 스트리밍 처리하는 예시입니다:

async for chunk in llm.astream("LLM 비동기 스트리밍을 위한 프롬프트를 제공합니다"):
    print(chunk, end="", flush=True)

이러한 예시들은 LangChain 프레임워크 내에서 자연어 처리 작업에 LLM을 활용하는 다양한 방법을 보여줍니다.