Wiki: https://wikidocs.net/book/14314
Github: https://github.com/teddylee777/langchain-kr
Few-shotプロンプト
rom langchain_core.prompts.few_shot import FewShotPromptTemplate
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
examples = [
{
"question": "스티브 잡스와 아인슈타인 중 누가 더 오래 살았나요?",
"answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 스티브 잡스는 몇 살에 사망했나요?
중간 답변: 스티브 잡스는 56세에 사망했습니다.
추가 질문: 아인슈타인은 몇 살에 사망했나요?
중간 답변: 아인슈타인은 76세에 사망했습니다.
최종 답변은: 아인슈타인
""",
},
{
"question": "네이버의 창립자는 언제 태어났나요?",
"answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 네이버의 창립자는 누구인가요?
중간 답변: 네이버는 이해진에 의해 창립되었습니다.
추가 질문: 이해진은 언제 태어났나요?
중간 답변: 이해진은 1967년 6월 22일에 태어났습니다.
최종 답변은: 1967년 6월 22일
""",
}
]
example_prompt = PromptTemplate.from_template(
"Question:\n{question}\nAnswer:\n{answer}"
)
print(example_prompt.format(**examples[0]))
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="Question:\n{question}\nAnswer:",
input_variables=["question"],
)
question = "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"
final_prompt = prompt.format(question=question)
print(final_prompt)
Example Selector
SemanticSimilarityExampleSelector
Semantic Example Selectorを使用すると、複数のExampleの中からコサイン類似度を基準にいくつかを選択してFew-shotとして提供できる。
from langchain_core.example_selectors import (
MaxMarginalRelevanceExampleSelector,
SemanticSimilarityExampleSelector,
)
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# Vector DBの作成(ストア名、エンベディングクラス)
chroma = Chroma("example_selector", OpenAIEmbeddings())
example_selector = SemanticSimilarityExampleSelector.from_examples(
# ここには選択可能な例のリストがあります。
examples,
# ここには意味的類似性を測定するためのエンベディングを生成するエンベディングクラスがあります。
OpenAIEmbeddings(),
# ここにはエンベディングを保存し、類似性検索を実行するためのVectorStoreクラスがあります。
Chroma,
# これは生成する例の数です。
k=1,
)
# 入力に最も類似した例を選択します。
selected_examples = example_selector.select_examples({"question": question})
question = "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"
print(f"入力に最も類似した例:\n{question}\n")
for example in selected_examples:
print(f'question:\n{example["question"]}')
print(f'answer:\n{example["answer"]}')
MaxMarginalRelevanceExampleSelector
多様性と関連性の両方を考慮して結果を選択するために使用される。
クイズ
Q1: 「ch02 LangChain ノート」の主なトピックは何ですか?
ch02 LangChain ノート
Q2: Example Selectorとは何ですか?
SemanticSimilarityExampleSelector Semantic Example
Selectorを使用すると、複数のExampleの中からコサイン類似度を基準にいくつかを選択してFew-shotとして提供できる。
MaxMarginalRelevanceExampleSelector 多様性と関連性の両方を考慮して結果を選択するために使用される。