该教程旨在带大家从 0 起步,掌握用 Python 开发大模型应用的技能。若当前内容让你感到晦涩,可回溯本合集的前期文章,降低学习难度。
1. 小样本提示(Few-Shot Prompting)回顾
| 传统做法 | 模板化做法 | 
|---|---|
| 手动拼 N 条示例 + 1 条用户提问 | 模板+变量,示例与用户提问一次生成 | 
| 复制粘贴易出错、难维护 | 改一个列表即可增删示例 | 
| 示例格式固定,仅值不同 | 用同一模板重复渲染 | 
2. 核心类:FewShotChatMessagePromptTemplate
位置:langchain.prompts.few_shot.FewShotChatMessagePromptTemplate
作用:把示例对话转成消息列表,并可与最终用户提问无缝拼接。
构造参数
• example_prompt:单条示例的模板(ChatPromptTemplate)
• examples:示例数据,列表套字典
3. 动手实战:年龄格式化机器人
3.1 安装 & 环境
            
            
              shell
              
              
            
          
          pip install langchain langchain-deepseek
export DEEPSEEK_API_KEY=sk-xxxxxxxx3.2 定义单条示例模板
            
            
              python
              
              
            
          
          from langchain.prompts import ChatPromptTemplate
# 一条示例 = 用户问 + AI 答
example_prompt = ChatPromptTemplate.from_messages([
    ("human", "我叫{name},今年{age}岁,来自{city}。"),
    ("ai", "{name},{age}岁,{city}市{province}人")
])3.3 准备若干示例数据
            
            
              python
              
              
            
          
          examples = [
    {"name": "张三", "age": 23, "city": "合肥", "province": "安徽"},
    {"name": "李四", "age": 31, "city": "深圳", "province": "广东"},
    {"name": "王五", "age": 19, "city": "成都", "province": "四川"},
]3.4 创建 Few-Shot 模板
            
            
              python
              
              
            
          
          from langchain.prompts import FewShotChatMessagePromptTemplate
few_shot_tmpl = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples
)3.5 加入最终用户提问
            
            
              python
              
              
            
          
          final_prompt = ChatPromptTemplate.from_messages([
    few_shot_tmpl,                       # 3 条示例
    ("human", "{input}")                # 真正的用户提问
])4. 渲染并调用 DeepSeek
            
            
              python
              
              
            
          
          from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
prompt_value = final_prompt.invoke({
    "input": "我叫赵六,今年27岁,来自杭州"
})
messages = prompt_value.messages
print(messages)
response = llm.invoke(messages)
print(response.content)5. 动态增删示例
只需改 examples 列表即可:
            
            
              python
              
              
            
          
          examples.append(
    {"name": "孙七", "age": 42, "city": "武汉", "province": "湖北"}
)无需改动模板代码。
6. 完整代码
            
            
              python
              
              
            
          
          from langchain.prompts import ChatPromptTemplate
from langchain.prompts import FewShotChatMessagePromptTemplate
from langchain_deepseek import ChatDeepSeek
# 一条示例 = 用户问 + AI 答
example_prompt = ChatPromptTemplate.from_messages([
    ("human", "我叫{name},今年{age}岁,来自{city}。"),
    ("ai", "{name},{age}岁,{city}市{province}人"),
])
# 准备示例数据
examples = [
    {"name": "张三", "age": 23, "city": "合肥", "province": "安徽"},
    {"name": "李四", "age": 31, "city": "深圳", "province": "广东"},
    {"name": "王五", "age": 19, "city": "成都", "province": "四川"},
]
# Few Shot 模版
few_shot_tmpl = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples
)
# 最终提示词
final_prompt = ChatPromptTemplate.from_messages([
    few_shot_tmpl,
    ("human", "{input}")
])
# 调用deepseek
llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
prompt_value = final_prompt.invoke({
    "input": "我叫赵六,今年27岁,来自杭州"
})
# 消息列表
messages = prompt_value.messages
print(messages)
response = llm.invoke(messages)
print(response.content)7. 常见坑 & 小贴士
- 变量名必须一致:模板里的 {}与examples字典键一一对应。
- 顺序即对话:示例按列表顺序渲染,确保 human与ai交替出现。
- token 开销:示例越多,消耗越长;可在 examples里做截断或选样。
- 调试技巧:先打印 prompt_value.messages,确认格式正确再发模型。
8. 速查表
| 步骤 | 关键代码 | 
|---|---|
| 单条示例模板 | ChatPromptTemplate.from_messages([...]) | 
| 组合示例 | FewShotChatMessagePromptTemplate(...) | 
| 拼接用户提问 | ChatPromptTemplate.from_messages([few_shot_tmpl, ("human", "{input}")]) | 
| 渲染 | prompt = chat_tmpl.invoke({"input": "..."}) | 
| 发模型 | ChatDeepSeek().invoke(prompt.messages) |