Prompt 工程基础
Prompt 是用户和 LLM 之间最重要的接口。好的 Prompt 可以将模型效果从 60% 提升到 90%。
核心原则
1 2 3 4 5
| 1. 清晰:指令无歧义,模型不会"猜" 2. 具体:细节越多,输出越符合预期 3. 结构化:用 Markdown / XML / JSON 结构化输出 4. 渐进:复杂任务分步骤,不要一步到位 5. 示例:Few-shot 比纯描述更有效
|
Zero-shot Prompt(直接命令)
适用于简单明确的任务:
1 2 3 4 5 6
| prompt = """ 将以下文本分类为 positive/negative/neutral:
文本:"这个产品非常好用,强烈推荐!" 分类: """
|
Few-shot Prompt(示例引导)
适用于需要特定格式或风格的任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| prompt = """ 将电影评论分类为 positive/negative/neutral:
示例1: 文本:"烂片一部,完全浪费时间" 分类:negative
示例2: 文本:"还行,但没有达到预期" 分类:neutral
示例3: 文本:"太震撼了!这是我看过最好的电影!" 分类:positive
现在分类: 文本:"剧情紧凑,就是结尾有点仓促" 分类: """
|
Chain-of-Thought(思维链)
引导模型一步步推理,适用于数学、逻辑、代码分析:
1 2 3 4 5 6 7 8 9
| prompt = """ 计算:25 × 17 + 84 ÷ 7 - 13
请按以下步骤计算: 1. 先算乘法 2. 再算除法 3. 然后加减 4. 写出最终答案 """
|
Zero-shot CoT(无需示例)
1 2 3 4
| prompt = """ 给一个12岁学生解释什么是通货膨胀。 请先想清楚再解释,确保逻辑清晰。 """
|
Tree-of-Thought(思维树)
探索多个推理路径,适用于复杂决策:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| prompt = """ 我需要选择一款数据库,有三个选项: A: PostgreSQL - 关系型,功能强 B: MongoDB - 文档型,灵活性高 C: Redis - 内存型,速度快
请从以下维度分析每个选项的优缺点: 1. 你的具体使用场景 2. 数据结构特点 3. 团队技术储备 4. 扩展性需求
最后给出推荐。 """
|
Role Prompting(角色设定)
指定专业身份,提升专业度:
1 2 3 4 5 6 7
| prompt = """ 你是一位有10年经验的资深 Java 架构师,专注于微服务设计。
请评审以下代码的问题:
(代码块) """
|
Structured Output Prompt(结构化输出)
指定 JSON 格式
1 2 3 4 5 6 7 8 9 10 11 12 13
| prompt = """ 用户问了一个问题,请判断类型并提取关键信息。
要求输出JSON格式: { "type": "weather" | "news" | "general", "entities": ["提取的实体列表"], "sentiment": "positive" | "neutral" | "negative", "needs_action": true | false }
用户问题:「明天北京会不会下雨?」 """
|
使用 Output Parser 强制解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from langchain_core.output_parsers import JsonOutputParser from pydantic import BaseModel
class QueryIntent(BaseModel): type: str entities: list[str] sentiment: str needs_action: bool
parser = JsonOutputParser(pydantic_object=QueryIntent)
chain = prompt | llm | parser result = chain.invoke({"query": "明天北京会不会下雨?"})
|
System Prompt 工程
组合技巧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| system_prompt = """ # 角色 你是一个{language}编程助手。
# 能力边界 - 擅长:{strengths} - 不擅长:{weaknesses}
# 输出格式 回答时: 1. 先说明思路 2. 再给出代码 3. 最后解释关键点
# 约束 - 代码必须有注释 - 只使用 LTS 版本的技术栈 - 不推荐商业付费组件 """
|
分步骤 Prompt(渐进式)
阶段 1:理解问题
1 2 3 4
| step1_prompt = """ 用户的问题是:「我应该选择哪个云服务商?」 请先分析用户的潜在需求,列出需要考虑的因素。 """
|
阶段 2:具体分析
1 2 3 4 5 6 7
| step2_prompt = """ 基于以下用户需求分析:
需求因素:{factors}
请针对每个因素评估 AWS/Azure/阿里云的优缺点。 """
|
阶段 3:给出建议
1 2 3 4 5 6 7
| step3_prompt = """ 基于以下分析结果:
{full_analysis}
请给出最终推荐,并说明理由。 """
|
Prompt 优化 checklist