Prompt Engineering 入门:Few-Shot + CoT + 结构化输出

Choyeon· 2026年9月21日· 3 分钟阅读· 432 阅读· 953 字· 2,050 字符· 更新于 2026年10月1日
Prompt Engineering 入门:Few-Shot + CoT + 结构化输出

大模型能力是固定的,真正拉开差距的是 Prompt Engineering 水平。掌握三大核心技术(少样本示例、思维链、结构化输出)可以让同一个模型输出质量提升一个档次,稳定对接生产流水线。

Few-Shot:示例驱动风格对齐

直接写"把这段写得专业点"产出效果随机性大。在 Prompt 里先给 2-3 个真实的输入输出示例,模型会从示例中精确学习你的写作风格、格式要求、术语偏好。比纯自然语言指令稳定得多,且支持中英混合示例。

from openai import AsyncOpenAI
import json
from typing import Any
from pydantic import BaseModel, Field

client = AsyncOpenAI()

FEW_SHOT_PROMPT = '''你是资深后端技术写作编辑,擅长将草稿改写成精炼博客风格。
要求:事实准确,保留技术细节,简洁专业,段落开头先给核心结论。

## 示例1 输入
"FastAPI比Flask快,因为用了ASGI和Pydantic,自动生成文档"
## 示例1 输出
**核心结论:FastAPI 通过 ASGI 异步 + Pydantic 类型驱动两大设计,同等硬件下单接口吞吐量约为 Flask 的 2.5-4 倍。**
除异步网络栈外,FastAPI 的请求校验基于 Pydantic v2 的 Rust 内核(pydantic-core),单个 schema 校验耗时较 Flask + marshmallow 方案低一个数量级;另一个隐形收益是基于 OpenAPI spec 自动生成的接口文档和类型化客户端 SDK,在团队协作场景相当于免费的 API 契约工具链。

## 待改写输入
"{raw_input}"

## 你的输出'''

COT_PROMPT = '''你是算法竞赛金牌选手。请逐步推导再给出最终答案,每一步标记并解释推理依据。
问题:给定数组 nums = [3, 1, 4, 2, 5, 8, 7, 6],求最长递增子序列的长度。
思考步骤:
步骤1:
步骤2:
步骤3:
最终答案(仅数字):'''

class ProductCategorizeResult(BaseModel):
    reasoning: list[str] = Field(description="分类判断过程,每个维度一条")
    category: str = Field(description="必须属于 [Electronics, Fashion, Books, Home, Other]")
    confidence: float = Field(ge=0.0, le=1.0)
    matched_keywords: list[str] = Field(default_factory=list)

async def few_shot_transform(raw: str) -> str:
    r = await client.chat.completions.create(
        model="gpt-4o-mini", temperature=0.3,
        messages=[{"role": "user", "content": FEW_SHOT_PROMPT.format(raw_input=raw)}])
    return r.choices[0].message.content or ""

async def categorize_structured(title: str, desc: str) -> dict[str, Any]:
    r = await client.chat.completions.create(
        model="gpt-4o-mini-2024-07-18", temperature=0.0,
        messages=[{"role": "user", "content": f"商品标题 {title}\n描述 {desc}"}],
        response_format={"type": "json_object"})
    data = json.loads(r.choices[0].message.content or "{}")
    return ProductCategorizeResult(**data).model_dump()

CoT 思维链 & 结构化输出

需要复杂推理(逻辑/数学/代码调试)时,显式要求模型分步骤推理,最后才给结论,准确率平均提升 15-30%。要喂给下游系统的结果,用 Pydantic + response_format 强制 JSON 模式,失败重试兜底,避免自由文本解析。

技术 解决问题 最佳温度 典型应用场景
Zero-Shot 纯指令 任务简单标准 0.1-0.3 翻译、摘要、格式转换
Few-Shot 示例注入 风格/格式特殊要求 0.2-0.5 文案改写、标签标注、代码风格统一
CoT 思维链分步 多步推理/数学/逻辑 0.0-0.3 算法题、代码调试、根因分析
JSON Schema 结构化 对接程序接口 0.0 固定 打标入库、字段抽取、函数调用

最佳实践

写 Prompt 先给角色(System Prompt),再给上下文+任务,再给约束(字数/格式/语气/禁忌)。迭代:用 20 条样本测真实准确率,失败案例回灌为 few-shot 示例,每次改进都有量化依据。

本文作者

评论 (0)

暂无评论,来抢沙发吧。