examples = [
{
"question": "세상에서 가장 가난한 왕은?",
"answer": "최저임금!."
},
{
"question": "오리가 얼면?",
"answer": "언덕!"
},
{
"question": "김밥이 죽으면 뭐가 될까?",
"answer": "김밥천국!"
},
{
"question": "고구려가 백제한테 이긴 이유는?",
"answer": "고구려가 백제보다 ‘고’(高)퀄리티니까!"
},
{
"question": "컴퓨터가 싫어하는 바람은?",
"answer": "윈도우 업데이트!"
},
{
"question": "소금이 죽으면 뭐가 될까?",
"answer": "죽염!"
},
{
"question": "일본인이 토끼 주둥이를 보고 하는 말은?",
"answer": "코Y네!"
},
]
from langchain_core.prompts import FewShotPromptTemplate
example_prompt = PromptTemplate.from_template("질문: {question}\n{answer}")
# FewShotPromptTemplate을 생성합니다.
prompt = FewShotPromptTemplate(
examples=examples, # 사용할 예제들
example_prompt=example_prompt, # 예제 포맷팅에 사용할 템플릿
suffix="질문: {input}", # 예제 뒤에 추가될 접미사
input_variables=["input"], # 입력 변수 지정
)
chain = prompt | llm
chain.invoke({"input": "일본인이 토끼 주둥이를 보고 하는 말은?"}) # 🐰코Y네
5) Example Selector
2022
주어진 예제들에서 사용자의 입력과 가장 유사한 예제를 선택하도록 도와주는 컴포넌트
실습에서 사용할 SemanticSimilarityExampleSelector는 의미적 유사성(Semantic Similarity)을 기준으로 예제를 선택한다.
# ExampleSelector
from langchain_chroma import Chroma
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_openai import OpenAIEmbeddings
# SemanticSimilarityExampleSelector
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples, # 사용할 예제들
OpenAIEmbeddings(), # 임베딩 모델 -> 의미적 유사성을 측정하기 위해 사용하는 클래스
Chroma, # 벡터 저장소 -> 임베딩을 저장할 저장소
k=1, # 생성할 예제 수
)
# 새로운 질문에 대해 가장 유사한 예제를 선택합니다.
question = "섹시한 소금은?" # 요염
selected_examples = example_selector.select_examples({"question": question})
print(f"입력과 가장 유사한 예제: {question}") # 소금이 죽으면? 죽염
for example in selected_examples:
print(f'question:\n{example["question"]}')
print(f'answer:\n{example["answer"]}')
# FewShotPromptTemplate에 ExampleSelector추가
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Question:\n{question}\nAnswer:",
input_variables=["question"],
)
chain = prompt | llm
chain.invoke(
{"question": "섹시한 소금은?"}
)