4.1 提示工程基础:角色设定与结构化提示模板设计

1 阅读7分钟

4.1 提示工程基础:角色设定与结构化提示模板设计

一、提示工程的价值

提示工程(Prompt Engineering)是通过优化输入文本来引导大语言模型产生预期输出的技术。在多数场景下,无需微调、无需额外训练,仅靠精心设计的提示即可显著提升效果。本节聚焦角色设定结构化提示模板,为后续少样本、思维链等高级技巧打基础。《大模型应用开发极简入门》第4章 4.1.1 提示基础 要求掌握角色设定、上下文、任务描述、输出格式的结构化设计,本节与之一一对应,并给出可直接复用的模板与代码。


二、角色设定(Role Setting)

2.1 为什么需要角色设定

模型默认是"通用助手"。通过明确的角色设定,可以约束其风格、专业领域与行为边界,使输出更符合业务预期。

2.2 典型角色示例

角色设定示例适用场景
专业翻译你是一名资深中英互译专家,擅长技术文档与商务信函翻译
代码助手你是一名Python专家,擅长简洁、可读的代码代码生成

2.3 在API中的使用

messages = [
    {"role": "system", "content": "你是一名资深技术文档翻译,擅长将英文技术文档翻译为准确、流畅的中文。"},
    {"role": "user", "content": "请翻译:API rate limit exceeded."}
]

三、结构化提示模板

3.1 四要素框架

一个完整的提示通常包含:

  1. 角色:你是谁
  2. 上下文:背景信息、参考资料
  3. 任务:具体要做什么
  4. 输出格式:期望的格式、长度、风格

3.2 模板示例

角色:你是一名专业的{领域}专家。
上下文:{相关背景或参考内容}
任务:{具体指令}
输出要求:{格式、长度、禁忌等}

3.3 代码实现

def build_prompt(role: str, context: str, task: str, output_req: str = "") -> str:
    template = f"""角色:{role}
上下文:{context}
任务:{task}
"""
    if output_req:
        template += f"输出要求:{output_req}"
    return template.strip()

# 使用示例
prompt = build_prompt(
    role="你是一名产品经理",
    context="我们正在开发一款在线教育App",
    task="请列出5个核心功能需求,并简要说明理由",
    output_req="每条不超过50字,使用有序列表"
)

四、常见陷阱与改进

陷阱改进
指令模糊明确"用一句话"、"列出3条"等
缺少格式约束指定JSON、Markdown、列表等
角色过于宽泛细化到"Python后端"、"金融风控"等

五、角色设定的深度与边界

5.1 角色深度

浅层角色:"你是一个助手"。深层角色:"你是一名拥有10年经验的Python开发专家,擅长FastAPI与异步编程,代码风格遵循PEP8,注重类型注解与单元测试。"深度越细,模型越容易"入戏",但提示更长、成本更高。

5.2 角色边界

除正面定义外,可明确禁止行为:"不要生成代码以外的内容"、"不要编造不存在的API"。边界清晰可减少模型越界。

5.3 多角色切换

同一应用可预设多个角色(如"翻译"、"代码"、"写作"),用户选择后切换system消息。角色间互不干扰,每次请求独立。


六、结构化模板的进阶

6.1 条件分支

根据任务类型动态组装模板:

def build_prompt(task_type: str, **kwargs) -> str:
    if task_type == "summary":
        return f"请对以下内容进行摘要,不超过{kwargs.get('max_len', 200)}字:\n{kwargs['content']}"
    elif task_type == "translate":
        return f"请将以下内容翻译为{kwargs.get('target', '中文')}:\n{kwargs['content']}"
    else:
        return f"请处理:{kwargs.get('content', '')}"

6.2 模板复用与版本管理

将常用模板保存为常量或配置文件,便于统一修改与A/B测试。示例:

PROMPTS = {
    "translator": "你是一名专业翻译。请将用户输入翻译为准确、流畅的中文。",
    "coder": "你是Python专家。请根据用户需求生成简洁、可运行的代码。",
    "summarizer": "你是摘要专家。请用不超过100字概括用户提供的内容。"
}

6.3 输出格式强制

在输出要求中明确格式,便于程序解析:

  • JSON输出格式:{"key": "value"},仅输出JSON,不要其他说明
  • 列表使用有序列表,每项一行
  • Markdown使用Markdown格式,标题用##

七、实战:多场景提示模板库

# 可复用的提示模板库
def prompt_translate(text: str, target: str = "中文") -> str:
    return f"""你是一名专业翻译。请将以下内容翻译为{target},保持专业术语准确。
内容:{text}
仅输出翻译结果,不要其他说明。"""

def prompt_summary(text: str, max_len: int = 200) -> str:
    return f"""你是一名摘要专家。请对以下内容进行摘要,不超过{max_len}字,保留核心信息。
内容:{text}
仅输出摘要,不要其他说明。"""

def prompt_classify(text: str, categories: list) -> str:
    cats = "、".join(categories)
    return f"""你是一名分类专家。请将以下内容分类到以下类别之一:{cats}
内容:{text}
仅输出类别名称,不要其他说明。"""

八、与《大模型应用开发极简入门》4.1.1 的对应

本书第4章 4.1.1 提示基础 明确列出:角色设定、上下文、任务描述、输出格式 的结构化设计。本节与之一一对应:第二节「角色设定」对应书中角色设定;第三节「结构化提示模板」中的四要素(角色、上下文、任务、输出格式)对应书中任务描述与输出格式;常见陷阱与进阶(条件分支、模板复用、格式强制)对应提示基础的落地与扩展。掌握本节即可按书中框架设计绝大多数提示,并为 4.1.2 上下文学习、4.1.3 高级策略打基础。


九、小结与后续章节衔接

角色设定与结构化模板是提示工程的基础。掌握角色深度、边界、多角色切换,以及模板的条件分支、复用与格式强制,即可在多数场景下获得稳定、可控的输出。下一节将介绍少样本学习与上下文学习(4.1.2),再后续是高级策略与防御性提示(4.1.3、4.1.4),本节是这些进阶技巧的「底座」:没有清晰的角色与结构,少样本与 CoT 难以发挥最佳效果。建议在学完 4.2~4.5 后,回头用本节模板重新整理一两个真实业务的提示,巩固四要素框架。


十、模板版本管理与 A/B 测试

当团队内有多人维护提示或频繁迭代时,建议对提示模板做版本管理:将角色、任务、输出要求等存为配置或代码常量,修改时留注释或提交说明,便于回溯。对关键业务可做 A/B 测试:同一任务用两套提示(如不同角色描述或不同输出格式要求)分别调用,统计格式符合率、用户满意度或业务指标,用数据决定保留哪一版。书中 4.1.5「提示优化、迭代测试、版本管理」在本节即体现为模板复用、条件分支与版本化,是生产级提示工程的基础。


十一、与第 2、3 章 API 与架构的衔接

第 2 章:角色与结构化提示通过 messages 中的 systemuser 传入,与 2.5 节消息结构一致;temperaturemax_tokens 等参数与 2.1 节对应,事实类任务宜低 temperature。第 3 章:3.3 节能力集成时的「角色、任务描述」即本节四要素的落地;3.5 节示例项目中的新闻稿、问答、摘要均可套用本节模板。将本节模板与 2.5 多轮对话、3.6 四类应用结合,即可从单次提示到完整应用形成闭环。


十二、小结

角色设定与结构化模板是提示工程的基础。掌握角色深度、边界、多角色切换,以及模板的条件分支、复用与格式强制,即可在多数场景下获得稳定、可控的输出。下一节将介绍少样本学习与上下文学习(4.2),再后续是 CoT、格式强制与防御性提示(4.3~4.5),本节是这些进阶技巧的底座。与 2.5 节消息结构的关系:角色设定通常放在 messages 的首条 system 中,任务与输出要求可放在 system 或 user;多轮对话时 system 每次请求都会发送,user/assistant 为历史与当前轮次,与 2.5 的 messages 维护一致。将本节四要素与 2.5 的 API 调用结合,即可在代码中实现书中推荐的提示结构。


下一节预告:4.2 零样本与少样本学习:上下文学习提升推理能力