[AI] 알려진 모델들의 프롬프트를 정리해 보자. (정리중)

늘 공부하는 괴짜·2025년 6월 8일
1

AI : Langchain (RAG)

목록 보기
31/38

1. 기본 구성

# 필요한 LangChain 모듈과 유틸리티 불러오기
from langchain_core.prompts import PromptTemplate
from langchain_community.llms import LlamaCpp
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from dotenv import load_dotenv
import time
from langchain.prompts.chat import ChatPromptTemplate
from langchain.schema import SystemMessagePromptTemplate, HumanMessagePromptTemplate

# .env 파일에서 환경 변수 로드
load_dotenv()

# 시작 시간 기록
start = time.time()

# 1. LlamaCpp 모델 설정
# 로컬 GGUF 모델 파일(EXAONE-3.5-2.4B-Instruct_Q4_K_M.gguf)을 불러와 LLM으로 사용
llm = LlamaCpp(
    model_path="./EXAONE-3.5-2.4B-Instruct_Q4_K_M.gguf",
    temperature=0.1, # 답변의 무작위성 조절
    verbose=True, # 상세 로그 출력
    n_ctx=2048, # 컨텍스트 크기 설정
    n_gpu_layers=0,  # GPU 사용 안 함 (CPU 전용)
    n_threads=8, # CPU 스레드 수
    n_batch=8, # 배치 처리 크기
    repeat_penalty=1, # 반복 패널티
)

# ================================================== #
# 다양한 LLM에 맞는 프롬프트 템플릿 정의 (각 모델의 고유 형식에 맞춰)
# ================================================== #

# 현재 RAG 시스템에서 사용할 프롬프트는 Gemma 형식
prompt = <<<<<< 선언된 프롬프트 >>>>>>

# 3. 임베딩 모델 설정
# 텍스트를 벡터로 변환할 HuggingFace 임베딩 모델 지정
embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/paraphrase-xlm-r-multilingual-v1"
)

# 4. FAISS 벡터 저장소 로드
# 미리 생성된 FAISS 인덱스(벡터 데이터베이스)를 로드
vectorstore = FAISS.load_local(
    folder_path="/Users/exoluse/Desktop/dev/rag/faiss_index", # 인덱스 파일 경로
    embeddings=embeddings, # 로드 시 사용할 임베딩 모델
    allow_dangerous_deserialization=True # 로컬 파일 역직렬화 허용 (보안 주의)
)

# 5. RAG 체인 구성
# LLM과 검색기를 결합하여 질문 답변 체인 생성
chain = RetrievalQA.from_chain_type(
    llm=llm, # 답변 생성 LLM
    retriever=vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 3}), # 유사도 기반 상위 3개 문서 검색
    chain_type_kwargs={"prompt": prompt} # 사용할 프롬프트 템플릿
)

# 6. 질문 실행 및 결과 출력
# RAG 체인에 질문을 전달하고 답변을 받아와 출력
result = chain({"query": "깜짝 놀란 어린 왕자가 꽃들에게 물은 것은?"})
print(result["result"])

# 총 실행 시간 출력
end = time.time()
print(f"Time taken: {end - start} seconds")

2. 각 모델별 프롬프트

2-1. llama3

llama3_chat_prompt = PromptTemplate(input_variables=["context", "question"], template="""<|begin_of_text|><|start_header_id|>system<|end_header_id|>
당신은 유능한 AI 어시스턴트입니다. 문맥을 바탕으로 질문에 정확하고 간결하게 답하세요.<|eot_id|><|start_header_id|>user<|end_header_id|>
문맥: {context}
질문: {question}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
""".strip())

2-2. llama2

llama2_prompt = PromptTemplate(input_variables=["context", "question"], template="""<s>[INST] <<SYS>>
당신은 유능하고 정직한 AI 어시스턴트입니다. 사용자에게 최대한 도움이 되는 답변을 하세요.
<</SYS>>

문맥: {context}
질문: {question}
[/INST]
""".strip())

2-3. mistral

mistral_prompt = PromptTemplate(input_variables=["context", "question"], template="""### Instruction:
문맥에 따라 다음 질문에 정확히 답하세요.

문맥:
{context}

질문:
{question}

### Response:
""".strip())

2-4. vicuna

vicuna_prompt = PromptTemplate(input_variables=["context", "question"], template="""### Human:
문맥: {context}
질문: {question}

### Assistant:
""".strip())

2-5. openchat

openchat_prompt = PromptTemplate(input_variables=["context", "question"], template="""<|system|>
당신은 똑똑한 AI 어시스턴트입니다.
<|user|>
문맥: {context}
질문: {question}
<|assistant|>
""".strip())

2-6. zephyr

zephyr_prompt = PromptTemplate(input_variables=["context", "question"], template="""### User:
문맥: {context}
질문: {question}

### Assistant:
""".strip())

2-7. gpt

gpt_prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template("당신은 유능한 AI입니다."),
    HumanMessagePromptTemplate.from_template("문맥: {context}\n질문: {question}")
])

2-8. gemma

gemma_prompt = PromptTemplate(input_variables=["context", "question"], template="""<start_of_turn>user
문맥: {context}
질문: {question}
<eot>
<start_of_turn>model
""".strip())

2-9. claude

claude_prompt = PromptTemplate(input_variables=["context", "question"], template="""Human: 문맥: {context}
질문: {question}
Assistant:
""".strip())
profile
인공지능이라는 옷을 입었습니다. 뭔가 멋지면서도 잘 맞습니다.

0개의 댓글