今天我们一起来看一段非常实用的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**