LangChain CH02-Prompt

Jeong-yun Lee·2025년 11월 1일

LangChain

목록 보기
2/3
post-thumbnail

0. 개요

  • 목표: LangChain에서 프롬프트 설계를 체계화하고, 템플릿/대화 이력/예시(Few-shot)/선택기/Hub 업로드/RAG/요약 체인까지 핵심 코드를 한 번에 참조할 수 있게 정리.

1. 프롬프트의 필요성과 기본 구조

핵심 포인트

  • 문맥 설정(Contexting): 모델이 상황과 목적을 이해하도록 돕는다.
  • 정보 통합(Info Fusion): 서로 다른 출처의 내용을 통합해 일관성 있는 답을 유도.
  • 응답 품질 향상(Quality): 잘 만든 프롬프트가 응답 품질을 좌우.

RAG 프롬프트 기본 형태

[지시사항 / role 설정]
[질문]
[문맥]

2. PromptTemplate (프롬프트 템플릿)

2.1 from_template()로 빠르게 생성

from langchain_core.prompts import PromptTemplate

template = "{country}의 수도는 어디인가요?"
prompt = PromptTemplate.from_template(template)

# 변수 대입
print(prompt.format(country="대한민국"))
# -> '대한민국의 수도는 어디인가요?'

체인에 연결

# 예: LLM 객체가 llm 이라고 가정
chain = prompt | llm
print(chain.invoke({"country":"대한민국"}).content)

langchain result 1

2.2 input_variables로 유효성 강화

prompt = PromptTemplate(
    template="{country}의 수도는 어디인가요?",
    input_variables=["country"],  # 템플릿 변수와 불일치하면 예외 발생
)

print(prompt.format(country="대한민국"))

2.3 partial_variables로 공통 값/함수 주입

from datetime import datetime

def get_today():
    return datetime.now().strftime("%B %d")

prompt = PromptTemplate(
    template="오늘은 {today}. 오늘 생일인 유명인 {n}명을 나열해 주세요.",
    input_variables=["n"],
    partial_variables={"today": get_today},
)

chain = prompt | llm
print(chain.invoke({"n": 3}).content)

img2
img3


3. 파일에서 템플릿 로드 (YAML)

# prompts/fruit_color.yaml
_type: "prompt"
template: "{fruit}의 색깔이 뭐야?"
input_variables: ["fruit"]
from langchain_core.prompts import load_prompt

prompt = load_prompt("prompts/fruit_color.yaml", encoding="utf-8")
print(prompt.format(fruit="사과"))

4. MessagesPlaceholder

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 요약 전문 AI 어시스턴트입니다."),
    MessagesPlaceholder(variable_name="conversation"),
    ("human", "지금까지의 대화를 {word_count} 단어로 요약합니다."),
])

chain = chat_prompt | llm

messages placeholder


5. FewShotPromptTemplate

from langchain_core.prompts.few_shot import FewShotPromptTemplate
from langchain_core.prompts import PromptTemplate

examples = [
    {"question": "스티브 잡스와 아인슈타인 중 누가 더 오래 살았나요?", "answer": "아인슈타인"},
]

example_prompt = PromptTemplate(
    input_variables=["question", "answer"],
    template="Q: {question}\nA: {answer}\n",
)

prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question:\n{question}\nAnswer:",
    input_variables=["question"],
)

fewshot1


6. Example Selector

from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

selector = SemanticSimilarityExampleSelector.from_examples(
    examples=examples,
    embeddings=OpenAIEmbeddings(),
    vectorstore_cls=Chroma,
    k=1,
)

example selector


7. FewShotChatMessagePromptTemplate

from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate

example_prompt = ChatPromptTemplate.from_messages([
    ("human", "{instruction}:\n{input}"),
    ("ai", "{answer}"),
])

few_shot = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

final_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant."),
    few_shot,
    ("human", "{instruction}\n{input}"),
])

fewshot chat


요약 표

개념목적주요 코드/객체
PromptTemplate변수 기반 프롬프트 생성PromptTemplate.from_template()
partial_variables공통 변수 자동 채움partial_variables={"today": get_today}
MessagesPlaceholder대화 이력 삽입MessagesPlaceholder(variable_name="conversation")
FewShotPromptTemplate예시 기반 학습 유도FewShotPromptTemplate(examples=..., example_prompt=...)
ExampleSelector관련 예시 자동 선택SemanticSimilarityExampleSelector
FewShotChatMessagePromptTemplateChat 모델용 FewShotChatPromptTemplate.from_messages()
LangChain Hub프롬프트 공유 및 관리hub.push()
Chain of Density점진적 요약 고도화JSON 구조 기반 반복 요약
RAG PromptRetrieval 기반 QA시스템 + 휴먼 메시지 구조
profile
push hard 🥕

0개의 댓글