16|示例驱动(Few-shot):用例子教会风格与边界
本篇目标:这是提升 AI 智商最快的方法。当你写了 1000 字的规则 AI 还是听不懂时,扔给它 2 个例子,它瞬间就懂了。
一、为什么“说一百遍”不如“做一遍”?
人类的学习方式有两种:
- 读说明书(Zero-shot):给你一本《Python 语法大全》,让你看完去写代码。(很难,容易忘,容易错)
- 看例子(Few-shot):给你看两个别人写的 Python 脚本,让你照葫芦画瓢。(简单,直观,精准)
AI 也是一样的。
- Zero-shot(零样本):直接问“帮我提取日期”。
- AI 可能会给
2023-01-01,也可能给Jan 1st, 2023。
- AI 可能会给
- Few-shot(少样本):给它看两个例子,再问。
- AI 看到例子是
YYYY/MM/DD,它就会乖乖输出2023/01/01。
- AI 看到例子是
结论:在 Prompt 里加例子,能大幅提升 AI 的稳定性和风格一致性。
二、Few-shot 的威力:三个层次
Level 1:统一输出格式
你想要特定的 JSON 结构,但不想写复杂的 Schema。
Prompt:
把下面的地址解析成 JSON。
例子 1:
输入:张三,北京朝阳区,13800000000
输出:{"name": "张三", "city": "北京", "phone": "13800000000"}
例子 2:
输入:李四,上海浦东,13911111111
输出:{"name": "李四", "city": "上海", "phone": "13911111111"}
输入:王五,深圳南山,13722222222
输出:
AI:{"name": "王五", "city": "深圳", "phone": "13722222222"} (完美复刻格式)
Level 2:教会思考逻辑(CoT)
你想要 AI 学会你的推理过程。
Prompt:
判断这个评论是正面还是负面。
例子 1:
输入:手机很漂亮,但是电池太不耐用了,才用了半天就没电了。
思考:虽然外观好评,但核心功能(电池)差评,整体影响使用体验。
输出:负面
例子 2:
输入:快递慢了点,不过东西确实是正品,价格也便宜。
思考:物流是小瑕疵,但产品质量和价格是核心优势,整体满意。
输出:正面
输入:屏幕清晰度一般,不过这价格要啥自行车,给个好评吧。
输出:
AI:思考:屏幕一般是缺点,但考虑到价格低廉(性价比高),用户最终意图是好评。输出:正面
Level 3:处理边界情况(Edge Cases)
这是高手最常用的技巧。专门给 AI 看“反例”或“异常情况”。
Prompt:
提取金额。
例子 1:
输入:买了 3 个苹果,花了 15 元。
输出:15
例子 2:
输入:这件衣服打折后 99 块钱。
输出:99
例子 3(异常):
输入:我不记得花了多少钱了。
输出:0
输入:大概是两三百吧。
输出:
AI:0 (因为它学会了“模糊描述算作 0”这个规则,而不需要你写复杂的逻辑说明)。
三、如何设计“好例子”?
例子不是随便找的,要有代表性。
1. 正例(Standard Case)
最常见的情况。告诉 AI “正常应该怎么做”。
2. 反例(Negative Case)
告诉 AI “什么是不对的”。
- 例子:“注意,不要提取‘2023年’这种年份,只提取具体的‘2023-01-01’日期。”
3. 边界例(Edge Case)
告诉 AI “遇到这种特殊情况怎么办”。
- 例子:“如果输入里没有电话号码,输出
null,不要填‘未知’。”
四、实战:用 Few-shot 统一代码风格
假设你们团队规定:Python 函数必须有 Type Hints,且必须用 Google 风格的 Docstring。
你不需要把 Google 风格指南全文贴给 AI,只需要给它看一个代码片段。
Prompt:
# Role
Python Developer following strict team guidelines.
# Examples
Input:
def add(a, b):
return a + b
Output:
def add(a: int, b: int) -> int:
"""Adds two numbers.
Args:
a: The first number.
b: The second number.
Returns:
The sum of a and b.
"""
return a + b
Input:
def get_user(id):
# logic...
return user
Output:
def get_user(user_id: int) -> Dict[str, Any]:
"""Retrieves a user by ID.
Args:
user_id: The unique identifier of the user.
Returns:
A dictionary containing user details.
"""
# logic...
return user
# Task
Convert the following function to the team style:
def send_email(to, subject, body):
# ...
AI 结果:它会立刻模仿上面的风格,给 send_email 加上类型和文档,完全符合你的要求。
五、本篇产出:示例库结构(如何存放与复用)
不要每次都手写例子。建立一个 examples.md 文件,分类存放你的“教学素材”。
# Prompt Examples Library
## 1. Data Extraction (JSON)
[Example 1: Standard]
[Example 2: Missing Data]
## 2. Code Style (Python)
[Example 1: Function Definition]
[Example 2: Error Handling]
## 3. SQL Query
[Example 1: Simple Join]
[Example 2: Complex Aggregation]
每次写 Prompt 时,从这里复制两段进去,效率翻倍。
练习题:教会 AI 提取“敏感词”
任务:写一个 Prompt,让 AI 从一段话里提取出所有骂人的话(敏感词),并用 * 号替换。
要求:使用 Few-shot 方法,至少包含一个“正常说话”的例子和一个“隐晦骂人”的例子。
Task: Censor offensive language.
Example 1:
Input: 你真是个笨蛋,连这个都不会。
Output: 你真是个**,连这个都不会。
Example 2:
Input: 今天天气真好,我们去公园吧。
Output: 今天天气真好,我们去公园吧。
Example 3 (Implicit):
Input: 这种脑残设计也就你想得出来。
Output: 这种**设计也就你想得出来。
Input: 你这猪头,别挡道。
Output:
下一步:我们学会了如何“一次性”把需求说清楚。但在实际开发中,需求往往是复杂的,一次搞不定。下一章我们将学习 三轮迭代法——如何像和同事讨论一样,通过多轮对话把代码改对。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)