Llama 2는 메타에서 공개한 대형 언어 오픈소스 모델이다. ChatGPT에서 제공하는 API를 사용해 애플리케이션을 개발할 수도 있지만, 비용, 보안, 안정성 등 다양한 이슈가 있을 수 있다.
그럼에도 범용 LLM을 위해선 ChatGPT를 사용하는 게 좋겠지만, 특정 도메인을 위해 사용할 애플리케이션은 sLLM (소형 언어 모델)을 사용하는 경우가 많아지고 있다.
이를 위해 가장 먼저 시작해야 하는 단계가 llama 2를 로컬환경에 띄우는 것이다. 그리고 여기에 LangChain을 결합하면 손쉽게 애플리케이션을 만들 수 있다.
Steps
- ollama로 로컬 환경에 llama 2 실행하기
- LangChain과 연결하기
- 대화형 애플리케이션 만들기
1. Ollama로 로컬 환경에 llama 2 실행하기
ollama는 로컬 환경에서 다양한 언어 모델을 실행할 수 있게 지원하는 오픈소스이다.
https://ollama.ai/ 여기에서 설치 및 문서를 확인할 수 있다.
ollama run llama2
2. LangChain과 연결하기
langchain은 LLM 애플리케이션을 기능을 위한 도구함이다. 간단히 설치할 수 있다.
pip install langchain
이제 langchain에서 제공하는 인터페이스로 Ollma에 질의할 수 있다.
from langchain_community.llms import Ollama
llm = Ollama(model="llama2")
llm("Hi")
# 응답
# Hello! It's nice to meet you. Is there something I can help you with or would you like to chat?
3. 대화형 애플리케이션 만들기
Step1에서 llama 2를 ollama를 통해 손쉽게 실행했다.
Step2에서 ollama와 대화하기 위한 인터페이스를 langchain을 통해 구축했다.
이제 정말 간단한 streamlit application을 만들어보자.
사용자가 입력하면 llama 2 모델이 답변하는 ChatGPT와 같은 대화형 애플리케이션이다.
# app.py
from langchain_community.llms import Ollama
import streamlit as st
# 모델 초기화
llm = Ollama(model="llama2")
# 세션 상태 초기화
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
def add_to_chat_history(user_input, bot_response):
st.session_state.chat_history.("사용자: " + user_input)
st.session_state.chat_history.("봇: " + bot_response)
def display_chat_history():
for message in st.session_state.chat_history:
st.write(message)
# 사용자 입력 필드
user_input = st.text_input("사용자 입력")
# 사용자가 입력을 제출했을 때
if user_input:
# LLM으로부터 응답받기
bot_response = llm(user_input)
# 대화 기록에 추가
add_to_chat_history(user_input, bot_response)
# 입력 필드 초기화
st.session_state.user_input = ""
# 대화 기록 표시
display_chat_history()
실행하자.
streamlit run app.py
아래와 같이 사용자 입력을 받아 결과를 반환하는 애플리케이션이 완성됐다.
코드에서 확인할 수 있듯이 대화 히스토리를 streamlit session에 저장했지만, prompt에 전달하진 않아서 문맥을 이해할 수 없다. 이를 어떻게 활용하고 애플리케이션을 개선해 나갈 수 있을지. langchain에서 제공하는 다양한 도구들을 어떻게 활용해 볼 수 있을지 스터디해서 포스팅해보자.