AI开发-python-langchain框架(1-6“示例学习”—— 少样本提示(Few-Shot Prompting))

今天我们一起来看一段非常实用的 LangChain 代码 ,它展示了如何用 少样本提示(Few-Shot Prompting) 的方式,让大模型更聪明、更准确地回答数学问题。我会把核心知识点拆解清楚,帮助大家理解每一步的作用和背后的原理。

什么是"少样本提示"(Few-Shot Prompting)?

  • 定义 :在给大模型提问前,先提供几个 输入-输出的示例 ,让模型"模仿"这些例子来回答新问题。
  • 作用 :提升模型在特定任务上的表现,尤其适合结构化、规则明确的任务(比如数学计算、格式转换等)。
  • 类比 :就像老师先讲两道例题,再让学生做第三道------学生更容易掌握规律。
知识点 说明
Few-Shot Prompting 通过少量示例引导模型行为,提升任务准确性
ChatPromptTemplate 构建多轮对话式提示的标准工具
FewShotChatMessagePromptTemplate 自动将示例列表转为对话历史
MessagesPlaceholder (本例未用但重要) 用于动态插入中间消息(如聊天历史)

看代码:

复制代码
from langchain_core.prompts import (
    ChatPromptTemplate,
    FewShotChatMessagePromptTemplate,
    MessagesPlaceholder,
)

# 定义示例
examples = [
    {"input": "2+2", "output": "4"},
    {"input": "2+3", "output": "5"},
]

# 定义示例提示模板
example_prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "{input}"),
        ("ai", "{output}"),
    ]
)

# 创建少样本提示模板
few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

# 组装最终提示模板
final_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一位非常厉害的数学天才。"),
        few_shot_prompt,
        ("human", "{input}"),
    ]
)

# 测试提示模板
test_input = "3+3"
formatted_prompt = final_prompt.format_messages(input=test_input)
print("格式化后的提示:")
for msg in formatted_prompt:
    print(f"{msg.type}: {msg.content}")


#调用大模型

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
import os

#配置 Deepseek 密钥和模型参数
llm = ChatOpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("BASE_URL"),  # Deepseek 的 API 基础地址
    model="deepseek-v3:671b",  # Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)
    temperature=0.7,  # 温度参数(0-1,越低越稳定)
    max_tokens=1024  # 最大生成 tokens
)

output_parser = StrOutputParser()

chain = final_prompt | llm | output_parser

response = chain.invoke({"input":"3的平方是多少?"})
print(response)

运行结果:

复制代码
格式化后的提示:
system: 你是一位非常厉害的数学天才。
human: 2+2
ai: 4
human: 2+3
ai: 5
human: 3+3
3的平方是 **9**。  

计算过程:  
3² = 3 × 3 = **9**