🧠AI Prompt 与上下文

Prompt设计原则

面试回答

常见问法

Prompt 应该怎么设计,才能让模型更稳定地完成任务?

回答

好的 Prompt 关键不是写得长,而是写得清楚。通常要明确任务目标、输入输出格式、边界条件和失败时该怎么做。对于生产场景,Prompt 还要尽量降低歧义,避免把太多互相冲突的要求塞在一起。

# 不好的Prompt:模糊且复杂
bad_prompt = """
帮我处理一下这份文档,提取重要信息,
然后总结成简洁的报告。如果文档太复杂,
就挑主要的说。报告要专业一些,但不要太长。
"""

# 好的Prompt:清晰且结构化
good_prompt = """
你是一个专业的文档分析助手。

## 任务目标
从以下文档中提取关键信息,生成结构化的执行摘要。

## 输入格式
文档内容以```分隔

## 输出格式
JSON格式,包含以下字段:
- title: 文档标题
- key_points: 不超过5个关键点
- summary: 100字以内的摘要
- risk_level: 风险等级(高/中/低)

## 边界条件
- 如果文档不包含足够信息,返回空JSON
- 如果内容过于专业,用通俗语言解释

## 示例
输入:

项目计划:2024年Q1完成产品设计 预算:100万 团队:15人 风险:技术方案未验证


输出:
{
    "title": "项目计划摘要",
    "key_points": ["2024年Q1完成产品设计", "预算100万", "团队15人", "技术方案未验证"],
    "summary": "项目计划在2024年Q1完成产品设计,预算100万,团队15人,主要风险是技术方案未验证。",
    "risk_level": "高"
}

现在开始处理以下文档:

{document_content}

"""

使用示例

def generate_with_prompt(model, document): formatted_prompt = good_prompt.format(document_content=document) return model.generate(formatted_prompt)


### 追问
- 为什么结构化输出要求很重要?(解析稳定性)
- 示例驱动和规则驱动什么时候各自更有效?(复杂任务vs简单任务)
- Prompt 写得越长为什么不一定越稳定?(信息过载)

## 原理展开

模型是按上下文做条件生成的,所以 Prompt 本质上是在构造一个更容易被正确续写的条件分布。明确的角色、格式约束和示例,会让模型更容易收敛到你希望的输出模式。

工程里要避免把 Prompt 当成"魔法咒语"。很多效果问题其实来自检索质量、工具返回质量和系统边界设计,而不只是 Prompt 文案本身。

```python
# Prompt组成要素的层次设计
def build_structured_prompt():
    # 1. 角色定义(可选但推荐)
    role = """
    你是一个专业的金融分析师助手。
    你的任务是从报告中提取关键财务指标。
    """
    
    # 2. 任务目标(必须明确)
    task = """
    从提供的财务报告中提取以下信息:
    - 收入增长率
    - 利润率变化
    - 主要风险因素
    """
    
    # 3. 输入格式(必须)
    input_format = """
    财务报告内容以XML标签包裹:
    <report>
    {content}
    </report>
    """
    
    # 4. 输出格式(必须)
    output_format = """
    输出为JSON格式:
    {
        "growth_rate": "X%",
        "profit_margin": "Y%", 
        "risks": ["风险1", "风险2"]
    }
    """
    
    # 5. 边界条件(推荐)
    boundaries = """
    如果报告中找不到相关信息,返回null。
    如果数据有歧义,选择最可能的值并备注。
    """
    
    # 6. 示例(强烈推荐)
    examples = """
    示例输入:
    <report>2023年收入增长15%,利润率从20%降到18%</report>
    
    示例输出:
    {
        "growth_rate": "15%",
        "profit_margin": "-2%",
        "risks": ["利润率下降"]
    }
    """
    
    return f"{role}\n{task}\n{input_format}\n{output_format}\n{boundaries}\n{examples}"

易错点

  • 把 Prompt 优化当成无限调参
  • 不写失败策略,只要求”务必正确”
  • 忽略不同模型对Prompt的敏感性差异
  • 在Prompt中包含矛盾要求

记忆技巧

记住Prompt设计六要素:

  1. 角色 = “你是什么身份”
  2. 任务 = “做什么具体事情”
  3. 输入 = “数据格式是什么”
  4. 输出 = “结果格式是什么”
  5. 边界 = “特殊情况怎么办”
  6. 示例 = “给个具体例子”

典型应用场景:

  • 问答系统:明确任务+格式约束
  • 代码生成:示例驱动+边界条件
  • 文本分析:角色+结构化输出
  • 创意写作:创造性Prompt+温度控制