LangChain 으로 Ollama LLM 모델 연동하기

LangChain을 사용해 Ollama 플랫폼내 있는 AI모델과 연동이 가능하다. python 언어를 통해 복잡한 작업을 간편하게 자동화 할 수 있도록 매뉴얼이 제공되고 있고, 이 글에서는 ChatOllamaChatPromptTemplate 클래스를 활용해 언어 번역 기능을 구현하는 방법을 따라하면서 과정을 기록해보려 한다.

ChatOllama

우선 langchain-ollama 를 설치한다.

$ pip install langchain-ollama

gemma2 AI 모델을 이용해서 번역하는 기능을 python 으로 만들어보려한다. 먼저 아까 설치한 패키지에서 ChatOllama 를 불러온다.

from langchain_ollama import ChatOllama

ChatOllama 객체를 생성할 때, 사용할 모델과 매개변수를 설정한다. Ollama 로 이미 로컬에 설치해놓은 gemma2:2b 모델을 사용할 예정이다. temperature는 모델의 출력 변화를 제어하는 매개변수인데, 이 값이 0에 가까울수록 일관성 있는 번역을 제공한다. 그리고 python 을 docker 로 설치해 사용하다보니, base_url을 입력해야 했는데, docker 를 사용하지 않는다면 입력하지 않아도 된다.

llm = ChatOllama(
    model="gemma2:2b",
    temperature=0,
    base_url="http://host.docker.internal:11434"
)

ChatOllama를 사용해 간단한 영어-프랑스어 번역 기능을 구현했다. 아래 코드는 시스템 메시지를 통해 역할을 정의하고, 사용자가 입력한 문장을 번역하는 예시이다.

messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming."),
]

출력 결과는 다음과 같다.

ai_msg = llm.invoke(messages)
print(ai_msg.content)

# 출력결과
J'adore programmer.

ChatPromptTemplate

ChatPromptTemplate에서는 체인을 사용해 더욱 복잡한 작업을 처리할 수 있다. 입력 언어와 출력 언어를 변수로 받아 다양한 언어 간 번역을 처리하도록 하려 한다.

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are a helpful assistant that translates {input_language} to {output_language}.",
        ),
        ("human", "{input}"),
    ]
)

chain = prompt | llm

이제 영어에서 한국어로 번역을 수행하도록 파라메터 설정을 했다.

ai_msg = chain.invoke(
    {
        "input_language": "English",
        "output_language": "Korean",
        "input": "I love programming.",
    }
)

결과는 다음과 같이 잘 번역된다.

print(ai_msg.content)

# 출력결과
나는 프로그래밍을 좋아해요. 😊

더 보면 좋을 글들