第一原则:写得像给同事的指令
模糊的提示得到模糊的回答:
❌ 帮我看看这段代码
✓ 你是 Python 资深开发。请审查下面代码,按"潜在 bug / 性能问题 / 可读性"三类列出问题,每条不超过 50 字。代码:
模板 1:System Prompt 三段式
你是 [角色],专长 [领域]。
你的回答规则:
- [规则 1]
- [规则 2]
- [规则 3]
不擅长的事:[范围],遇到时回答"不在我的能力范围"。
例:
system = """你是 Python 代码审查员。
回答规则:
- 总是用中文
- 先指出主要问题(最多 3 条),再说改进方向
- 代码用 ```python ``` 包起来
- 不超过 200 字
不擅长的事:除 Python 外的语言,遇到回答"不在我的能力范围"。"""
模板 2:Few-Shot(少样本)
模型不会的格式或风格 → 先给几个例子:
任务:把口语句子改成正式商业英语。
例 1:
口语:can u send me the report
正式:Could you please send me the report?
例 2:
口语:thx, looks good!
正式:Thank you, this looks good!
现在:
口语:[用户输入]
正式:
5 个例子比 50 字描述更管用。
模板 3:思维链(Chain of Thought)
让模型先思考再回答——解题准确率显著上升:
问题:[复杂问题]
请按以下步骤回答:
1. 列出已知条件
2. 分析需要解决的子问题
3. 逐步推导
4. 给出最终答案
让我们一步步来。
或更简单:
[问题]
请一步步思考,然后给出答案。
Claude 模型的"扩展思考"模式(extended thinking)是这条规则的内置版。
模板 4:结构化输出
要 JSON 用 system 限定 + 给 schema:
你必须严格按以下 JSON 格式返回,除 JSON 外不要任何其他文字:
{
"sentiment": "positive" | "neutral" | "negative",
"score": 0~1 浮点数,
"keywords": ["最多 3 个关键词"]
}
OpenAI 用 response_format={"type":"json_object"},Claude 用 prefill 技巧:
messages=[
{"role": "user", "content": "..."},
{"role": "assistant", "content": "{"}, # 强制以 { 开始
]
返回开头会接着 { 继续——避免开头废话。
模板 5:避免 hallucination
任务:根据下面的文档回答用户问题。
规则:
- 答案必须来源于文档
- 文档里没有的信息,回答"文档中未提及"
- 引用时标注 [文档行号]
文档:
"""
[文档内容]
"""
问题:[用户问题]
RAG 系统的核心提示就是这种结构。
XML / Markdown 标签划分
Claude 特别喜欢 XML 标签:
<context>
[长文档]
</context>
<task>
请基于上面的 context 回答以下问题。
</task>
<question>
[问题]
</question>
清晰的边界让模型不会混淆。
减少废话
❌ 直接回答,不要解释。
✓ 回答应该 ≤ 30 字,不要前置废话("好的,我来帮你...")。
明确长度上限比"简洁"管用。
实战:评论分类
prompt = """你是评论分类员。给定一条电商评论,返回 JSON:
{"category": "质量"|"物流"|"价格"|"服务"|"其他",
"sentiment": "positive"|"neutral"|"negative"}
例:
评论:东西很好,发货也快
{"category":"质量","sentiment":"positive"}
评论:包装太烂,物流慢
{"category":"物流","sentiment":"negative"}
现在:
评论:客服回复很及时
"""
# Claude API 调用
msg = client.messages.create(
model="claude-haiku-4-5",
max_tokens=100,
messages=[
{"role": "user", "content": prompt},
{"role": "assistant", "content": "{"}, # prefill
],
)
调 prompt 的循环
- 写第一版
- 跑 10 个样本,看哪些不对
- 看错例的共同点 → 加规则 / 加例子
- 再跑 10 个新样本
- 重复
记得保留每版——用 git 管理 prompt。
别迷信 prompt
如果调了一周还不行——换个思路:
- 任务是不是太难,要不要拆?
- 用 RAG 给上下文?
- 微调更靠谱?
- 干脆换个模型?
下一篇讲 embeddings——RAG 的基础。