mirror of
https://github.com/hwchase17/langchain
synced 2024-10-31 15:20:26 +00:00
307 lines
18 KiB
Plaintext
307 lines
18 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f8b01b97",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Few Shot Prompt examples\n",
|
||
"Notebook showing off how canonical prompts in LangChain can be recreated as FewShotPrompts"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "18c67cc9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from langchain.prompts.few_shot import FewShotPromptTemplate\n",
|
||
"from langchain.prompts.prompt import PromptTemplate"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "2a729c9f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Self Ask with Search\n",
|
||
"\n",
|
||
"examples = [\n",
|
||
" {\n",
|
||
" \"question\": \"Who lived longer, Muhammad Ali or Alan Turing?\",\n",
|
||
" \"answer\": \"Are follow up questions needed here: Yes.\\nFollow up: How old was Muhammad Ali when he died?\\nIntermediate answer: Muhammad Ali was 74 years old when he died.\\nFollow up: How old was Alan Turing when he died?\\nIntermediate answer: Alan Turing was 41 years old when he died.\\nSo the final answer is: Muhammad Ali\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"When was the founder of craigslist born?\",\n",
|
||
" \"answer\": \"Are follow up questions needed here: Yes.\\nFollow up: Who was the founder of craigslist?\\nIntermediate answer: Craigslist was founded by Craig Newmark.\\nFollow up: When was Craig Newmark born?\\nIntermediate answer: Craig Newmark was born on December 6, 1952.\\nSo the final answer is: December 6, 1952\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Who was the maternal grandfather of George Washington?\",\n",
|
||
" \"answer\": \"Are follow up questions needed here: Yes.\\nFollow up: Who was the mother of George Washington?\\nIntermediate answer: The mother of George Washington was Mary Ball Washington.\\nFollow up: Who was the father of Mary Ball Washington?\\nIntermediate answer: The father of Mary Ball Washington was Joseph Ball.\\nSo the final answer is: Joseph Ball\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Are both the directors of Jaws and Casino Royale from the same country?\",\n",
|
||
" \"answer\": \"Are follow up questions needed here: Yes.\\nFollow up: Who is the director of Jaws?\\nIntermediate Answer: The director of Jaws is Steven Spielberg.\\nFollow up: Where is Steven Spielberg from?\\nIntermediate Answer: The United States.\\nFollow up: Who is the director of Casino Royale?\\nIntermediate Answer: The director of Casino Royale is Martin Campbell.\\nFollow up: Where is Martin Campbell from?\\nIntermediate Answer: New Zealand.\\nSo the final answer is: No\"\n",
|
||
" }\n",
|
||
"]\n",
|
||
"example_prompt = PromptTemplate(input_variables=[\"question\", \"answer\"], template=\"Question: {question}\\n{answer}\")\n",
|
||
"\n",
|
||
"prompt = FewShotPromptTemplate(\n",
|
||
" examples=examples, \n",
|
||
" example_prompt=example_prompt, \n",
|
||
" suffix=\"Question: {input}\", \n",
|
||
" input_variables=[\"input\"]\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "95fc0059",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# ReAct\n",
|
||
"\n",
|
||
"examples = [\n",
|
||
" {\n",
|
||
" \"question\": \"What is the elevation range for the area that the eastern sector of the Colorado orogeny extends into?\",\n",
|
||
" \"answer\": \"Thought 1: I need to search Colorado orogeny, find the area that the eastern sector of the Colorado orogeny extends into, then find the elevation range of that area.\\nAction 1: Search[Colorado orogeny]\\nObservation 1: The Colorado orogeny was an episode of mountain building (an orogeny) in Colorado and surrounding areas.\\nThought 2: It does not mention the eastern sector. So I need to look up eastern sector.\\nAction 2: Lookup[eastern sector]\\nObservation 2: (Result 1 / 1) The eastern sector extends into the High Plains and is called the Central Plains orogeny.\\nThought 3: The eastern sector of Colorado orogeny extends into the High Plains. So I need to search High Plains and find its elevation range.\\nAction 3: Search[High Plains]\\nObservation 3: High Plains refers to one of two distinct land regions\\nThought 4: I need to instead search High Plains (United States).\\nAction 4: Search[High Plains (United States)]\\nObservation 4: The High Plains are a subregion of the Great Plains. From east to west, the High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130 m).[3]\\nThought 5: High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer is 1,800 to 7,000 ft.\\nAction 5: Finish[1,800 to 7,000 ft]\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Musician and satirist Allie Goertz wrote a song about the \\\"The Simpsons\\\" character Milhouse, who Matt Groening named after who?\",\n",
|
||
" \"answer\": \"Thought 1: The question simplifies to \\\"The Simpsons\\\" character Milhouse is named after who. I only need to search Milhouse and find who it is named after.\\nAction 1: Search[Milhouse]\\nObservation 1: Milhouse Mussolini Van Houten is a recurring character in the Fox animated television series The Simpsons voiced by Pamela Hayden and created by Matt Groening.\\nThought 2: The paragraph does not tell who Milhouse is named after, maybe I can look up \\\"named after\\\".\\nAction 2: Lookup[named after]\\nObservation 2: (Result 1 / 1) Milhouse was named after U.S. president Richard Nixon, whose middle name was Milhous.\\nThought 3: Milhouse was named after U.S. president Richard Nixon, so the answer is Richard Nixon.\\nAction 3: Finish[Richard Nixon]\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Which documentary is about Finnish rock groups, Adam Clayton Powell or The Saimaa Gesture?\",\n",
|
||
" \"answer\": \"Thought 1: I need to search Adam Clayton Powell and The Saimaa Gesture, and find which documentary is about Finnish rock groups.\\nAction 1: Search[Adam Clayton Powell]\\nObservation 1 Could not find [Adam Clayton Powell]. Similar: [’Adam Clayton Powell III’, ’Seventh Avenue (Manhattan)’, ’Adam Clayton Powell Jr. State Office Building’, ’Isabel Washington Powell’, ’Adam Powell’, ’Adam Clayton Powell (film)’, ’Giancarlo Esposito’].\\nThought 2: To find the documentary, I can search Adam Clayton Powell (film).\\nAction 2: Search[Adam Clayton Powell (film)]\\nObservation 2: Adam Clayton Powell is a 1989 American documentary film directed by Richard Kilberg. The film is about the rise and fall of influential African-American politician Adam Clayton Powell Jr.[3][4] It was later aired as part of the PBS series The American Experience.\\nThought 3: Adam Clayton Powell (film) is a documentary about an African-American politician, not Finnish rock groups. So the documentary about Finnish rock groups must instead be The Saimaa Gesture.\\nAction 3: Finish[The Saimaa Gesture]\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"What profession does Nicholas Ray and Elia Kazan have in common?\",\n",
|
||
" \"answer\": \"Thought 1: I need to search Nicholas Ray and Elia Kazan, find their professions, then find the profession they have in common.\\nAction 1: Search[Nicholas Ray]\\nObservation 1: Nicholas Ray (born Raymond Nicholas Kienzle Jr., August 7, 1911 - June 16, 1979) was an American film director, screenwriter, and actor best known for the 1955 film Rebel Without a Cause.\\nThought 2: Professions of Nicholas Ray are director, screenwriter, and actor. I need to search Elia Kazan next and find his professions.\\nAction 2: Search[Elia Kazan]\\nObservation 2: Elia Kazan was an American film and theatre director, producer, screenwriter and actor.\\nThought 3: Professions of Elia Kazan are director, producer, screenwriter, and actor. So profession Nicholas Ray and Elia Kazan have in common is director, screenwriter, and actor.\\nAction 3: Finish[director, screenwriter, actor]\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Which magazine was started first Arthur’s Magazine or First for Women?\",\n",
|
||
" \"answer\": \"Thought 1: I need to search Arthur’s Magazine and First for Women, and find which was started first.\\nAction 1: Search[Arthur’s Magazine]\\nObservation 1: Arthur’s Magazine (1844-1846) was an American literary periodical published in Philadelphia in the 19th century.\\nThought 2: Arthur’s Magazine was started in 1844. I need to search First for Women next.\\nAction 2: Search[First for Women]\\nObservation 2: First for Women is a woman’s magazine published by Bauer Media Group in the USA.[1] The magazine was started in 1989.\\nThought 3: First for Women was started in 1989. 1844 (Arthur’s Magazine) < 1989 (First for Women), so Arthur’s Magazine was started first.\\nAction 3: Finish[Arthur’s Magazine]\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"question\": \"Were Pavel Urysohn and Leonid Levin known for the same type of work?\",\n",
|
||
" \"answer\": \"Thought 1: I need to search Pavel Urysohn and Leonid Levin, find their types of work, then find if they are the same.\\nAction 1: Search[Pavel Urysohn]\\nObservation 1: Pavel Samuilovich Urysohn (February 3, 1898 - August 17, 1924) was a Soviet mathematician who is best known for his contributions in dimension theory.\\nThought 2: Pavel Urysohn is a mathematician. I need to search Leonid Levin next and find its type of work.\\nAction 2: Search[Leonid Levin]\\nObservation 2: Leonid Anatolievich Levin is a Soviet-American mathematician and computer scientist.\\nThought 3: Leonid Levin is a mathematician and computer scientist. So Pavel Urysohn and Leonid Levin have the same type of work.\\nAction 3: Finish[yes]\"\n",
|
||
" }\n",
|
||
"]\n",
|
||
"example_prompt = PromptTemplate(input_variables=[\"question\", \"answer\"], template=\"Question: {question}\\n{answer}\")\n",
|
||
"\n",
|
||
"prompt = FewShotPrompt(\n",
|
||
" examples=examples, \n",
|
||
" example_prompt=example_prompt, \n",
|
||
" suffix=\"Question: {input}\", \n",
|
||
" input_variables=[\"input\"]\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "897d4e08",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# LLM Math\n",
|
||
"examples = [\n",
|
||
" {\n",
|
||
" \"question\": \"What is 37593 * 67?\",\n",
|
||
" \"answer\": \"```python\\nprint(37593 * 67)\\n```\\n```output\\n2518731\\n```\\nAnswer: 2518731\"\n",
|
||
" }\n",
|
||
"]\n",
|
||
"example_prompt = PromptTemplate(input_variables=[\"question\", \"answer\"], template=\"Question: {question}\\n\\n{answer}\")\n",
|
||
"\n",
|
||
"prompt = FewShotPromptTemplate(\n",
|
||
" examples=examples, \n",
|
||
" example_prompt=example_prompt, \n",
|
||
" suffix=\"Question: {input}\", \n",
|
||
" input_variables=[\"input\"]\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "7ab7379f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# NatBot\n",
|
||
"example_seperator = \"==================================================\"\n",
|
||
"content_1 = \"\"\"<link id=1>About</link>\n",
|
||
"<link id=2>Store</link>\n",
|
||
"<link id=3>Gmail</link>\n",
|
||
"<link id=4>Images</link>\n",
|
||
"<link id=5>(Google apps)</link>\n",
|
||
"<link id=6>Sign in</link>\n",
|
||
"<img id=7 alt=\"(Google)\"/>\n",
|
||
"<input id=8 alt=\"Search\"></input>\n",
|
||
"<button id=9>(Search by voice)</button>\n",
|
||
"<button id=10>(Google Search)</button>\n",
|
||
"<button id=11>(I'm Feeling Lucky)</button>\n",
|
||
"<link id=12>Advertising</link>\n",
|
||
"<link id=13>Business</link>\n",
|
||
"<link id=14>How Search works</link>\n",
|
||
"<link id=15>Carbon neutral since 2007</link>\n",
|
||
"<link id=16>Privacy</link>\n",
|
||
"<link id=17>Terms</link>\n",
|
||
"<text id=18>Settings</text>\"\"\"\n",
|
||
"content_2 = \"\"\"<link id=1>About</link>\n",
|
||
"<link id=2>Store</link>\n",
|
||
"<link id=3>Gmail</link>\n",
|
||
"<link id=4>Images</link>\n",
|
||
"<link id=5>(Google apps)</link>\n",
|
||
"<link id=6>Sign in</link>\n",
|
||
"<img id=7 alt=\"(Google)\"/>\n",
|
||
"<input id=8 alt=\"Search\"></input>\n",
|
||
"<button id=9>(Search by voice)</button>\n",
|
||
"<button id=10>(Google Search)</button>\n",
|
||
"<button id=11>(I'm Feeling Lucky)</button>\n",
|
||
"<link id=12>Advertising</link>\n",
|
||
"<link id=13>Business</link>\n",
|
||
"<link id=14>How Search works</link>\n",
|
||
"<link id=15>Carbon neutral since 2007</link>\n",
|
||
"<link id=16>Privacy</link>\n",
|
||
"<link id=17>Terms</link>\n",
|
||
"<text id=18>Settings</text>\"\"\"\n",
|
||
"content_3 = \"\"\"<button id=1>For Businesses</button>\n",
|
||
"<button id=2>Mobile</button>\n",
|
||
"<button id=3>Help</button>\n",
|
||
"<button id=4 alt=\"Language Picker\">EN</button>\n",
|
||
"<link id=5>OpenTable logo</link>\n",
|
||
"<button id=6 alt =\"search\">Search</button>\n",
|
||
"<text id=7>Find your table for any occasion</text>\n",
|
||
"<button id=8>(Date selector)</button>\n",
|
||
"<text id=9>Sep 28, 2022</text>\n",
|
||
"<text id=10>7:00 PM</text>\n",
|
||
"<text id=11>2 people</text>\n",
|
||
"<input id=12 alt=\"Location, Restaurant, or Cuisine\"></input>\n",
|
||
"<button id=13>Let’s go</button>\n",
|
||
"<text id=14>It looks like you're in Peninsula. Not correct?</text>\n",
|
||
"<button id=15>Get current location</button>\n",
|
||
"<button id=16>Next</button>\"\"\"\n",
|
||
"examples = [\n",
|
||
" {\n",
|
||
" \"i\": 1,\n",
|
||
" \"content\": content_1,\n",
|
||
" \"objective\": \"Find a 2 bedroom house for sale in Anchorage AK for under $750k\",\n",
|
||
" \"current_url\": \"https://www.google.com/\",\n",
|
||
" \"command\": 'TYPESUBMIT 8 \"anchorage redfin\"'\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"i\": 2,\n",
|
||
" \"content\": content_2,\n",
|
||
" \"objective\": \"Make a reservation for 4 at Dorsia at 8pm\",\n",
|
||
" \"current_url\": \"https://www.google.com/\",\n",
|
||
" \"command\": 'TYPESUBMIT 8 \"dorsia nyc opentable\"'\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"i\": 3,\n",
|
||
" \"content\": content_3,\n",
|
||
" \"objective\": \"Make a reservation for 4 for dinner at Dorsia in New York City at 8pm\",\n",
|
||
" \"current_url\": \"https://www.opentable.com/\",\n",
|
||
" \"command\": 'TYPESUBMIT 12 \"dorsia new york city\"'\n",
|
||
" },\n",
|
||
"]\n",
|
||
"example_prompt_template=\"\"\"EXAMPLE {i}:\n",
|
||
"==================================================\n",
|
||
"CURRENT BROWSER CONTENT:\n",
|
||
"------------------\n",
|
||
"{content}\n",
|
||
"------------------\n",
|
||
"OBJECTIVE: {objective}\n",
|
||
"CURRENT URL: {current_url}\n",
|
||
"YOUR COMMAND:\n",
|
||
"{command}\"\"\"\n",
|
||
"example_prompt = PromptTemplate(input_variables=[\"i\", \"content\", \"objective\", \"current_url\", \"command\"], template=example_prompt_template)\n",
|
||
"\n",
|
||
"\n",
|
||
"prefix = \"\"\"\n",
|
||
"You are an agent controlling a browser. You are given:\n",
|
||
"\t(1) an objective that you are trying to achieve\n",
|
||
"\t(2) the URL of your current web page\n",
|
||
"\t(3) a simplified text description of what's visible in the browser window (more on that below)\n",
|
||
"You can issue these commands:\n",
|
||
"\tSCROLL UP - scroll up one page\n",
|
||
"\tSCROLL DOWN - scroll down one page\n",
|
||
"\tCLICK X - click on a given element. You can only click on links, buttons, and inputs!\n",
|
||
"\tTYPE X \"TEXT\" - type the specified text into the input with id X\n",
|
||
"\tTYPESUBMIT X \"TEXT\" - same as TYPE above, except then it presses ENTER to submit the form\n",
|
||
"The format of the browser content is highly simplified; all formatting elements are stripped.\n",
|
||
"Interactive elements such as links, inputs, buttons are represented like this:\n",
|
||
"\t\t<link id=1>text</link>\n",
|
||
"\t\t<button id=2>text</button>\n",
|
||
"\t\t<input id=3>text</input>\n",
|
||
"Images are rendered as their alt text like this:\n",
|
||
"\t\t<img id=4 alt=\"\"/>\n",
|
||
"Based on your given objective, issue whatever command you believe will get you closest to achieving your goal.\n",
|
||
"You always start on Google; you should submit a search query to Google that will take you to the best page for\n",
|
||
"achieving your objective. And then interact with that page to achieve your objective.\n",
|
||
"If you find yourself on Google and there are no search results displayed yet, you should probably issue a command\n",
|
||
"like \"TYPESUBMIT 7 \"search query\"\" to get to a more useful page.\n",
|
||
"Then, if you find yourself on a Google search results page, you might issue the command \"CLICK 24\" to click\n",
|
||
"on the first link in the search results. (If your previous command was a TYPESUBMIT your next command should\n",
|
||
"probably be a CLICK.)\n",
|
||
"Don't try to interact with elements that you can't see.\n",
|
||
"Here are some examples:\n",
|
||
"\"\"\"\n",
|
||
"suffix=\"\"\"\n",
|
||
"The current browser content, objective, and current URL follow. Reply with your next command to the browser.\n",
|
||
"CURRENT BROWSER CONTENT:\n",
|
||
"------------------\n",
|
||
"{browser_content}\n",
|
||
"------------------\n",
|
||
"OBJECTIVE: {objective}\n",
|
||
"CURRENT URL: {url}\n",
|
||
"PREVIOUS COMMAND: {previous_command}\n",
|
||
"YOUR COMMAND:\n",
|
||
"\"\"\"\n",
|
||
"PROMPT = FewShotPromptTemplate(\n",
|
||
" examples = examples,\n",
|
||
" example_prompt=example_prompt,\n",
|
||
" example_separator=example_seperator,\n",
|
||
" input_variables=[\"browser_content\", \"url\", \"previous_command\", \"objective\"],\n",
|
||
" prefix=prefix,\n",
|
||
" suffix=suffix,\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "ce5927c6",
|
||
"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.8.7"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|