大模型能力是固定的,真正拉开差距的是 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 示例,每次改进都有量化依据。