[AI] Langchain 에 llama.cpp 를 묶어보자.

늘 공부하는 괴짜·2025년 6월 3일
0

AI : Langchain (RAG)

목록 보기
24/38

1. 아낌없이 주는 나무 : Langchain

LlamaCpp + Langchain 이 된다... Langchain 기능을 뒤져보다가 llm 코너에서 발견!
https://python.langchain.com/docs/integrations/llms/llamacpp/

Ollama 도 되고... llama.cpp 도 되고... 허깅페이스도 되고... 다~ 된다.

2. pyenv 환경

% pyenv install 3.13.3
% pyenv local 3.13.3

% uv venv .venv
% source .venv/bin/activate

3. 간단 예제 구현

콜백 기능도 사용 가능한데 이게 반환을 Stream으로 해줘서 일반적인 함수는 적용이 안된다.

from langchain_community.llms import LlamaCpp
from langchain_core.callbacks import CallbackManager, BaseCallbackHandler
from langchain_core.prompts import PromptTemplate

# 1. 커스텀 콜백 핸들러 정의
# 모델이 새로운 토큰을 생성할 때마다 호출됨
class PrintCallbackHandler(BaseCallbackHandler):
    def on_llm_new_token(self, token: str, **kwargs) -> None:
        # 토큰 생성 시마다 실시간으로 출력
        print(token, end='', flush=True)

# 2. CallbackManager 생성
# 핸들러를 리스트로 받아서 등록할 수 있음
callback_manager = CallbackManager([PrintCallbackHandler()])

# 3. LlamaCpp 모델 설정
# 로컬 모델 경로 지정, 콜백 매니저 연결
llm = LlamaCpp(
    model_path="./models/EXAONE-3.5-2.4B-Instruct/EXAONE-3.5-2.4B-Instruct_Q8_0.gguf",
    temperature=0.75,
    max_tokens=2000,
    top_p=1,
    callback_manager=callback_manager,
    verbose=True
)

# 4. 프롬프트 템플릿 정의
# {question} 자리에 입력을 넣어주는 형식
template = """
    질문: {question}

    답변: 
"""

# 템플릿을 PromptTemplate 객체로 변환
prompt = PromptTemplate.from_template(template)

# 5. 프롬프트와 LLM을 파이프로 연결
# prompt의 결과가 llm 입력으로 전달됨
llm_chain = prompt | llm

# 6. 질문을 주고 결과 받기
result = llm_chain.invoke({"question": "안녕하세요. 제주도는 어떤 곳인가요?"})

# 7. 전체 결과 출력이 필요하면 아래 주석 해제
# print("\n\n=== 최종 결과 ===")
# print(result)

콜백을 설정하지 않으면 그냥 한번에 빡 나온다.

profile
인공지능이라는 옷을 입었습니다. 뭔가 멋지면서도 잘 맞습니다.

0개의 댓글