LangChain Few-Shot Prompt Templates(two)

https://python.langchain.com.cn/docs/modules/model_io/prompts/prompt_templates/few_shot_examples

This demo shows how the example selector picks the most relevant example to help the LLM answer a user's question effectively.

Step 1: Understand What We're Building

We'll create a tool that:

  • Uses "semantic similarity" to find the most relevant example for a user's question (instead of using all examples).
  • Teaches the LLM to answer questions by first asking follow-ups (just like the examples).
  • Produces a clear, step-by-step answer to a real user question.

Complete Code Demo

python 复制代码
# 1. Import tools we need (from the original text's Part 2)
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
import os

# 2. Set your OpenAI API key (get one from https://platform.openai.com/)
os.environ["OPENAI_API_KEY"] = "your-openai-api-key-here"

# 3. Define our few-shot examples (same as original text)
examples = [
  {
    "question": "Who lived longer, Muhammad Ali or Alan Turing?",
    "answer": 
"""
Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad Ali
"""
  },
  {
    "question": "When was the founder of craigslist born?",
    "answer": 
"""
Are follow up questions needed here: Yes.
Follow up: Who was the founder of craigslist?
Intermediate answer: Craigslist was founded by Craig Newmark.
Follow up: When was Craig Newmark born?
Intermediate answer: Craig Newmark was born on December 6, 1952.
So the final answer is: December 6, 1952
"""
  },
  {
    "question": "Who was the maternal grandfather of George Washington?",
    "answer":
"""
Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball
"""
  },
  {
    "question": "Are both the directors of Jaws and Casino Royale from the same country?",
    "answer":
"""
Are follow up questions needed here: Yes.
Follow up: Who is the director of Jaws?
Intermediate Answer: The director of Jaws is Steven Spielberg.
Follow up: Where is Steven Spielberg from?
Intermediate Answer: The United States.
Follow up: Who is the director of Casino Royale?
Intermediate Answer: The director of Casino Royale is Martin Campbell.
Follow up: Where is Martin Campbell from?
Intermediate Answer: New Zealand.
So the final answer is: No
"""
  }
]

# 4. Create the "example formatter" (how each example is displayed)
example_prompt = PromptTemplate(
    input_variables=["question", "answer"],
    template="Question: {question}\n{answer}"  # Format: "Question: X\nAnswer: Y"
)

# 5. Create the Example Selector (the key part from Part 2!)
# This finds the example most similar to the user's question
example_selector = SemanticSimilarityExampleSelector.from_examples(
    examples,  # Our list of examples
    OpenAIEmbeddings(),  # Converts text to "meaning numbers" (to check similarity)
    Chroma,  # Stores these numbers to quickly find matches
    k=1  # Pick only the 1 most similar example
)

# 6. Create the few-shot prompt template (using the selector)
prompt = FewShotPromptTemplate(
    example_selector=example_selector,  # Use the selector instead of all examples
    example_prompt=example_prompt,  # How to format the selected example
    suffix="Question: {input}",  # The user's question at the end
    input_variables=["input"]  # The user's question is called "input"
)

# 7. Define the user's question (let's ask something similar to our examples)
user_question = "Who was the paternal grandfather of George Washington?"

# 8. Generate the full prompt (with only the most relevant example)
full_prompt = prompt.format(input=user_question)
print("=== Generated Prompt (with 1 relevant example) ===")
print(full_prompt)
print("\n=== LLM's Answer ===")

# 9. Use the LLM to generate a response
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)  # "temperature=0" = consistent answers
response = llm.predict(full_prompt)
print(response)

What You'll See When You Run It

复制代码
=== Generated Prompt (with 1 relevant example) ===
Question: Who was the maternal grandfather of George Washington?

Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball


Question: Who was the paternal grandfather of George Washington?

=== LLM's Answer ===
Are follow up questions needed here: Yes.
Follow up: Who was the father of George Washington?
Intermediate answer: The father of George Washington was Augustine Washington.
Follow up: Who was the father of Augustine Washington?
Intermediate answer: The father of Augustine Washington was Lawrence Washington.
So the final answer is: Lawrence Washington

Simple Explanation

  1. Example Selector: Instead of shoving all 4 examples into the prompt, we use a "smart selector." It checks which example is most like the user's question (using "meaning numbers" from the embedding model) and only includes that one. This keeps the prompt short and focused.

  2. How It Works for Our Question : The user asked about George Washington's paternal grandfather . The selector noticed our 3rd example was about his maternal grandfather (similar topic!) and picked that one.

  3. LLM Follows the Pattern: The LLM sees the selected example and copies its style: first asking follow-ups ("Who was George Washington's father?"), then finding intermediate answers, and finally giving a clear final answer.

Why This Matters

  • Faster & More Accurate: The LLM doesn't waste time reading irrelevant examples.
  • Scalable: If you have 100 examples, the selector will still pick the 1 best one---no need to clutter the prompt.

Just replace "your-openai-api-key-here" with your actual API key, and you're good to go!

相关推荐
“AI国潮设计-小江”7 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
破烂三角裤10 小时前
AI 没有记忆?我给儿童故事 Agent 搭了一套“长期记忆”系统
langchain
云和数据.ChenGuang11 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain
技灵AI12 小时前
MiniMax H3 能做哪些视频?商品广告、人物表演与运镜怎么选
人工智能·prompt·aigc·音视频
Maiko Star15 小时前
【HM-LC】LangChain RAG查询优化详解:查询重写、混合检索与重排序实战
langchain·rag
TomEval15 小时前
【测AI】第22篇:Agent 系统测试方法 — AI 学会“动手“了
人工智能·python·prompt·aigc·测试用例
2501_9130613416 小时前
MCP核心能力
langchain
小林ixn17 小时前
从线性 RAG 到 Agentic RAG:用 LangGraph 搭一个会判断、会纠错、会兜底的检索闭环
langchain·llm·agent
kyrie_sakura17 小时前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
承渊政道19 小时前
【大模型应用开发:基于GPT-4和ChatGPT】(使用LangChain框架和插件增强LLM的功能)
chatgpt·langchain·llm·框架·大模型应用开发