惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Martin Fowler
Martin Fowler
Last Week in AI
Last Week in AI
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
博客园_首页
人人都是产品经理
人人都是产品经理
量子位
美团技术团队
The Cloudflare Blog
小众软件
小众软件
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
博客园 - Franky

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
17. LangChain FewShotPromptTemplate少样本应用实战
老陈说编程 · 2026-05-17 · via 博客园_首页

做 AI 应用开发的人应该都有过这种经历:明明在提示词里写了一大堆要求,大模型还是会输出不符合预期的内容,甚至一本正经地胡说八道。这时候,与其继续堆砌文字说明,不如试试 LangChain 里的 FewShotPromptTemplate—— 用几个简单的示例,就能让大模型瞬间明白你想要什么。视频在这里《17. LangChain FewShotPromptTemplate 少样本应用实战》

image

 这个工具的底层逻辑是少样本学习,说白了就是让大模型先看几个正确的示范,再去处理新的任务。不管是翻译、文本分类还是逻辑推理,只要给对了例子,它的输出准确率和一致性都会有明显提升。

image

 它的核心思想特别朴素:与其给 AI 写几百字的任务说明,不如直接扔给它两三个具体的例子。大模型对示例的理解能力,远比我们想象的要强得多。

这里有个容易踩的坑:创建 FewShotPromptTemplate 的时候,examples 和 example_selector 这两个参数是互斥的,必须填其中一个,不然代码直接报错。绝大多数情况下,我们直接用 examples 参数把准备好的示例数据传进去就行。

组件

说明

必填性

示例

example_selector

动态选择示例的选择器

二选一

SemanticSimilarityExampleSelector

examples

示例数据列表,每个是字典

二选一

[{"input": "Hi", "output": "你好"}]

example_prompt

单个示例的格式化模板

必填

PromptTemplate.from_template(...)

prefix

示例前的引导文本

可选,默认""

"请把英文翻译成中文:"

suffix

示例后的用户输入提示

必填

"Input: {new_input}\nOutput:"

input_variables

用户输入变量列表

必填

["new_input"]

example_separator

示例之间的分隔符

默认\n\n

"\n"

先来看最基础的用法,针对文本补全模型,我们可以这样写:

from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
# 准备示例数据
examples = [
    {"input": "Hello", "output": "你好"},
    {"input": "Thank you", "output": "谢谢"},
    {"input": "Good morning", "output": "早上好"},
]
# 定义示例的格式化模板
example_prompt = PromptTemplate.from_template(
    "{input} -> {output}"
)
# 创建 FewShotPromptTemplate
few_shot_prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    prefix="请把以下英文翻译成中文:",
    suffix="{new_input} -> ",
    input_variables=["new_input"],
    example_separator="\n",
)
prompt_value = few_shot_prompt.invoke(
    {
        "new_input": "Good bye"
    }
)
print(prompt_value.to_string())
res = llm.invoke(prompt_value, config=config)
print(res.content)

如果用的是聊天模型,就要用专门的 FewShotChatMessagePromptTemplate,用法也差不多:

from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
 
# 准备示例数据
examples = [
    {"input": "Hello", "output": "你好"},
    {"input": "Thank you", "output": "谢谢"},
    {"input": "Good morning", "output": "早上好"},
]
# 定义示例的格式化模板
example_prompt = ChatPromptTemplate.from_messages(
    [
        {"role": "user", "content": "{input}"},
        {"role": "ai", "content": "{output}"}
    ]
)
# 创建示例提示词模版
few_shot_prompt = FewShotChatMessagePromptTemplate(
    examples=examples,
    example_prompt=example_prompt
)
# 构建最终的聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages(
    [
        {"role": "system", "content": "请把以下英文翻译成中文:"},
        few_shot_prompt,
        {"role": "user", "content": "{new_input}"}
    ]
)
# 输入内容
prompt_value = chat_prompt.invoke(
    {
        "new_input": "Where are you from?",
    }
)
print(prompt_value.to_string())
res = llm.invoke(prompt_value, config=config)
print(res.content)

总的来说,FewShotPromptTemplate 是解决大模型输出不稳定问题最简单也最有效的手段之一。不用改模型,不用调参数,只要花几分钟准备几个高质量的示例,就能让你的 AI 应用体验上一个台阶。