mirror of https://github.com/hwchase17/langchain
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
357 lines
12 KiB
Plaintext
357 lines
12 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "raw",
|
|
"id": "94c3ad61",
|
|
"metadata": {},
|
|
"source": [
|
|
"---\n",
|
|
"sidebar_position: 3\n",
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b91e03f1",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Few-shot prompt templates\n",
|
|
"\n",
|
|
"In this tutorial, we'll learn how to create a prompt template that uses few-shot examples. A few-shot prompt template can be constructed from either a set of examples, or from an Example Selector object.\n",
|
|
"\n",
|
|
"### Use Case\n",
|
|
"\n",
|
|
"In this tutorial, we'll configure few-shot examples for self-ask with search.\n",
|
|
"\n",
|
|
"\n",
|
|
"## Using an example set\n",
|
|
"\n",
|
|
"### Create the example set\n",
|
|
"\n",
|
|
"To get started, create a list of few-shot examples. Each example should be a dictionary with the keys being the input variables and the values being the values for those input variables."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "a44be840",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from langchain_core.prompts.few_shot import FewShotPromptTemplate\n",
|
|
"from langchain_core.prompts.prompt import PromptTemplate\n",
|
|
"\n",
|
|
"examples = [\n",
|
|
" {\n",
|
|
" \"question\": \"Who lived longer, Muhammad Ali or Alan Turing?\",\n",
|
|
" \"answer\": \"\"\"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: How old was Muhammad Ali when he died?\n",
|
|
"Intermediate answer: Muhammad Ali was 74 years old when he died.\n",
|
|
"Follow up: How old was Alan Turing when he died?\n",
|
|
"Intermediate answer: Alan Turing was 41 years old when he died.\n",
|
|
"So the final answer is: Muhammad Ali\n",
|
|
"\"\"\",\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"question\": \"When was the founder of craigslist born?\",\n",
|
|
" \"answer\": \"\"\"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the founder of craigslist?\n",
|
|
"Intermediate answer: Craigslist was founded by Craig Newmark.\n",
|
|
"Follow up: When was Craig Newmark born?\n",
|
|
"Intermediate answer: Craig Newmark was born on December 6, 1952.\n",
|
|
"So the final answer is: December 6, 1952\n",
|
|
"\"\"\",\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"question\": \"Who was the maternal grandfather of George Washington?\",\n",
|
|
" \"answer\": \"\"\"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the mother of George Washington?\n",
|
|
"Intermediate answer: The mother of George Washington was Mary Ball Washington.\n",
|
|
"Follow up: Who was the father of Mary Ball Washington?\n",
|
|
"Intermediate answer: The father of Mary Ball Washington was Joseph Ball.\n",
|
|
"So the final answer is: Joseph Ball\n",
|
|
"\"\"\",\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"question\": \"Are both the directors of Jaws and Casino Royale from the same country?\",\n",
|
|
" \"answer\": \"\"\"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who is the director of Jaws?\n",
|
|
"Intermediate Answer: The director of Jaws is Steven Spielberg.\n",
|
|
"Follow up: Where is Steven Spielberg from?\n",
|
|
"Intermediate Answer: The United States.\n",
|
|
"Follow up: Who is the director of Casino Royale?\n",
|
|
"Intermediate Answer: The director of Casino Royale is Martin Campbell.\n",
|
|
"Follow up: Where is Martin Campbell from?\n",
|
|
"Intermediate Answer: New Zealand.\n",
|
|
"So the final answer is: No\n",
|
|
"\"\"\",\n",
|
|
" },\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "55ff3100",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Create a formatter for the few-shot examples\n",
|
|
"\n",
|
|
"Configure a formatter that will format the few-shot examples into a string. This formatter should be a `PromptTemplate` object.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "8c6e48ad",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Question: Who lived longer, Muhammad Ali or Alan Turing?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: How old was Muhammad Ali when he died?\n",
|
|
"Intermediate answer: Muhammad Ali was 74 years old when he died.\n",
|
|
"Follow up: How old was Alan Turing when he died?\n",
|
|
"Intermediate answer: Alan Turing was 41 years old when he died.\n",
|
|
"So the final answer is: Muhammad Ali\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"example_prompt = PromptTemplate(\n",
|
|
" input_variables=[\"question\", \"answer\"], template=\"Question: {question}\\n{answer}\"\n",
|
|
")\n",
|
|
"\n",
|
|
"print(example_prompt.format(**examples[0]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "dad66af1",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Feed examples and formatter to `FewShotPromptTemplate`\n",
|
|
"\n",
|
|
"Finally, create a `FewShotPromptTemplate` object. This object takes in the few-shot examples and the formatter for the few-shot examples.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "e76fa1ba",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Question: Who lived longer, Muhammad Ali or Alan Turing?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: How old was Muhammad Ali when he died?\n",
|
|
"Intermediate answer: Muhammad Ali was 74 years old when he died.\n",
|
|
"Follow up: How old was Alan Turing when he died?\n",
|
|
"Intermediate answer: Alan Turing was 41 years old when he died.\n",
|
|
"So the final answer is: Muhammad Ali\n",
|
|
"\n",
|
|
"\n",
|
|
"Question: When was the founder of craigslist born?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the founder of craigslist?\n",
|
|
"Intermediate answer: Craigslist was founded by Craig Newmark.\n",
|
|
"Follow up: When was Craig Newmark born?\n",
|
|
"Intermediate answer: Craig Newmark was born on December 6, 1952.\n",
|
|
"So the final answer is: December 6, 1952\n",
|
|
"\n",
|
|
"\n",
|
|
"Question: Who was the maternal grandfather of George Washington?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the mother of George Washington?\n",
|
|
"Intermediate answer: The mother of George Washington was Mary Ball Washington.\n",
|
|
"Follow up: Who was the father of Mary Ball Washington?\n",
|
|
"Intermediate answer: The father of Mary Ball Washington was Joseph Ball.\n",
|
|
"So the final answer is: Joseph Ball\n",
|
|
"\n",
|
|
"\n",
|
|
"Question: Are both the directors of Jaws and Casino Royale from the same country?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who is the director of Jaws?\n",
|
|
"Intermediate Answer: The director of Jaws is Steven Spielberg.\n",
|
|
"Follow up: Where is Steven Spielberg from?\n",
|
|
"Intermediate Answer: The United States.\n",
|
|
"Follow up: Who is the director of Casino Royale?\n",
|
|
"Intermediate Answer: The director of Casino Royale is Martin Campbell.\n",
|
|
"Follow up: Where is Martin Campbell from?\n",
|
|
"Intermediate Answer: New Zealand.\n",
|
|
"So the final answer is: No\n",
|
|
"\n",
|
|
"\n",
|
|
"Question: Who was the father of Mary Ball Washington?\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"prompt = FewShotPromptTemplate(\n",
|
|
" examples=examples,\n",
|
|
" example_prompt=example_prompt,\n",
|
|
" suffix=\"Question: {input}\",\n",
|
|
" input_variables=[\"input\"],\n",
|
|
")\n",
|
|
"\n",
|
|
"print(prompt.format(input=\"Who was the father of Mary Ball Washington?\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "bbe1f843",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Using an example selector\n",
|
|
"\n",
|
|
"### Feed examples into `ExampleSelector`\n",
|
|
"\n",
|
|
"We will reuse the example set and the formatter from the previous section. However, instead of feeding the examples directly into the `FewShotPromptTemplate` object, we will feed them into an `ExampleSelector` object.\n",
|
|
"\n",
|
|
"\n",
|
|
"In this tutorial, we will use the `SemanticSimilarityExampleSelector` class. This class selects few-shot examples based on their similarity to the input. It uses an embedding model to compute the similarity between the input and the few-shot examples, as well as a vector store to perform the nearest neighbor search.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "80c5ac5c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Examples most similar to the input: Who was the father of Mary Ball Washington?\n",
|
|
"\n",
|
|
"\n",
|
|
"answer: \n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the mother of George Washington?\n",
|
|
"Intermediate answer: The mother of George Washington was Mary Ball Washington.\n",
|
|
"Follow up: Who was the father of Mary Ball Washington?\n",
|
|
"Intermediate answer: The father of Mary Ball Washington was Joseph Ball.\n",
|
|
"So the final answer is: Joseph Ball\n",
|
|
"\n",
|
|
"question: Who was the maternal grandfather of George Washington?\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from langchain_chroma import Chroma\n",
|
|
"from langchain_core.example_selectors import SemanticSimilarityExampleSelector\n",
|
|
"from langchain_openai import OpenAIEmbeddings\n",
|
|
"\n",
|
|
"example_selector = SemanticSimilarityExampleSelector.from_examples(\n",
|
|
" # This is the list of examples available to select from.\n",
|
|
" examples,\n",
|
|
" # This is the embedding class used to produce embeddings which are used to measure semantic similarity.\n",
|
|
" OpenAIEmbeddings(),\n",
|
|
" # This is the VectorStore class that is used to store the embeddings and do a similarity search over.\n",
|
|
" Chroma,\n",
|
|
" # This is the number of examples to produce.\n",
|
|
" k=1,\n",
|
|
")\n",
|
|
"\n",
|
|
"# Select the most similar example to the input.\n",
|
|
"question = \"Who was the father of Mary Ball Washington?\"\n",
|
|
"selected_examples = example_selector.select_examples({\"question\": question})\n",
|
|
"print(f\"Examples most similar to the input: {question}\")\n",
|
|
"for example in selected_examples:\n",
|
|
" print(\"\\n\")\n",
|
|
" for k, v in example.items():\n",
|
|
" print(f\"{k}: {v}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "89ac47fe",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Feed example selector into `FewShotPromptTemplate`\n",
|
|
"\n",
|
|
"Finally, create a `FewShotPromptTemplate` object. This object takes in the example selector and the formatter for the few-shot examples.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "de69a214",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Question: Who was the maternal grandfather of George Washington?\n",
|
|
"\n",
|
|
"Are follow up questions needed here: Yes.\n",
|
|
"Follow up: Who was the mother of George Washington?\n",
|
|
"Intermediate answer: The mother of George Washington was Mary Ball Washington.\n",
|
|
"Follow up: Who was the father of Mary Ball Washington?\n",
|
|
"Intermediate answer: The father of Mary Ball Washington was Joseph Ball.\n",
|
|
"So the final answer is: Joseph Ball\n",
|
|
"\n",
|
|
"\n",
|
|
"Question: Who was the father of Mary Ball Washington?\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"prompt = FewShotPromptTemplate(\n",
|
|
" example_selector=example_selector,\n",
|
|
" example_prompt=example_prompt,\n",
|
|
" suffix=\"Question: {input}\",\n",
|
|
" input_variables=[\"input\"],\n",
|
|
")\n",
|
|
"\n",
|
|
"print(prompt.format(input=\"Who was the father of Mary Ball Washington?\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "bf06d2a6",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|