prompt.format vs. chain.invoke

샤워실의 바보·2025년 2월 5일

GPT

목록 보기
10/11
from langchain.chat_models import ChatOpenAI
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.prompts.prompt import PromptTemplate

chat = ChatOpenAI(
    temperature=0.1,
    streaming=True,
    callbacks=[
        StreamingStdOutCallbackHandler(),
    ],
)


examples = [
    {
        "question": "What do you know about France?",
        "answer": """
        Here is what I know:
        Capital: Paris
        Language: French
        Food: Wine and Cheese
        Currency: Euro
        """,
    },
    {
        "question": "What do you know about Italy?",
        "answer": """
        I know this:
        Capital: Rome
        Language: Italian
        Food: Pizza and Pasta
        Currency: Euro
        """,
    },
    {
        "question": "What do you know about Greece?",
        "answer": """
        I know this:
        Capital: Athens
        Language: Greek
        Food: Souvlaki and Feta Cheese
        Currency: Euro
        """,
    },
]


example_prompt = PromptTemplate.from_template("Human: {question}\nAI:{answer}")

prompt = FewShotPromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
    suffix="Human: What do you know about {country}?",
    input_variables=["country"],
)

chain = prompt | chat

chain.invoke({"country": "Turkey"})

Step-by-Step Pseudocode:
1. prompt.format(country=“Germany”) 실행 시:
• FewShotPromptTemplate의 내부 로직이 동작하여, 예시들과 suffix(“Human: What do you know about {country}?”)를 포함한 최종 프롬프트 문자열을 생성.
• 변수 country에 “Germany”가 대입되어 프롬프트 내의 해당 부분이 “Germany”로 채워짐.
• 결과적으로 모델 호출 없이 완성된 텍스트 프롬프트 문자열만 반환.
2. chain.invoke({“country”: “Turkey”}) 실행 시:
• 동일한 방식으로 프롬프트를 생성하지만, 생성된 프롬프트가 ChatOpenAI 모델로 전송됨.
• 모델은 해당 프롬프트를 바탕으로 응답(답변)을 생성함.
• 결과적으로 모델이 생성한 응답을 반환.

최종 차이점:
• prompt.format(country="Germany"):
단순히 완성된 프롬프트 문자열을 출력하며, 모델 호출 없이 텍스트 포맷만 수행합니다.
• chain.invoke({"country": "Turkey"}):
프롬프트를 생성한 후, 이를 ChatOpenAI 모델에 보내어 실제 답변을 생성하고 그 응답을 반환합니다.

profile
공부하는 개발자

0개의 댓글