LangChain을 사용해 Ollama 플랫폼내 있는 AI모델과 연동이 가능하다. python 언어를 통해 복잡한 작업을 간편하게 자동화 할 수 있도록 매뉴얼이 제공되고 있고, 이 글에서는 ChatOllama
와 ChatPromptTemplate
클래스를 활용해 언어 번역 기능을 구현하는 방법을 따라하면서 과정을 기록해보려 한다.
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)
# 출력결과
나는 프로그래밍을 좋아해요. 😊