利用系统、用户和助手角色编写更好的提示

学习目标

  • 识别系统、用户和助手角色如何使提示更加有效。

现在,我们将深入探讨现代 LLM API(包括通过 SAP 生成式 AI 中枢访问的那些 API)如何使用不同的对话角色来形式化这一概念:system、user 和 assistant。

这些角色并非随意的标签;它们代表了一种结构化的方式,让您能够有意图地沟通、提供上下文,并管理与大语言模型(LLM)的多轮交互。企业应用开发人员必须理解并使用这些角色,才能交付稳健且具备上下文感知能力的 AI 解决方案。本课将向您展示这些角色如何协同工作,使您的提示更清晰、显著更有效。

结构化角色的意义

虽然对于一次性任务来说单个提示可能就足够了,但许多真实的企业应用要求 LLM 在多次交互中保持上下文,例如客户支持聊天机器人或智能助手。现代 LLM 通常被设计为处理"消息列表"或"对话历史",而不仅仅是单个提示。

正是在这种结构化消息列表中,system、user 和 assistant 角色变得至关重要。它们帮助 LLM 理解:

  • 谁在说话: 这是来自应用的指令、来自最终用户的输入,还是 AI 自身先前的回复?

  • 每条消息的意图: 这是一条通用准则、一个具体请求,还是正在进行的对话的一部分?

  • 对话的流程: 通过提供按时间顺序排列的消息历史,LLM 可以"记住"交互中较早的部分。

系统角色

系统角色通常是序列中的第一条消息,充当 LLM 的基础指令。它定义模型在整个交互或会话中的总体行为、人设、约束和通用规则。这是您在本课程第 2 课中学到的"元提示"概念的技术实现。

  • 用途:

    • 定义人设: "你是一位资深财务分析师。"

  • 设定全局规则: "始终以专业且简洁的方式回复。"

  • 建立安全/道德边界: "不要讨论政治,也不要提供医疗建议。"

  • 提供恒定上下文: "回复只能基于所提供的 SAP 销售记录。"

  • 指定持久的输出格式: "所有生成的报告都必须采用带标题的 markdown 格式。"

  • 有效性: "system"消息为 LLM 提供了一个稳定的"运行环境",确保在整个对话过程中行为一致并遵守既定准则,无论后续用户输入如何。它显著减少了"概念漂移",并帮助 LLM 与您应用的意图保持一致。

  • 开发者视角: 此消息在您的应用代码中通常是静态或半静态的,在交互开始时定义一次。

系统消息示例:

{
"role": "system",
"content": "You are a helpful assistant for SAP Logistics. Your goal is to provide accurate and concise information about supply chain processes. Always refer to official SAP terminology where possible. If you don't know the answer, state that you don't have enough information."
}

用户角色

用户角色代表与您的应用交互的人类直接提供的具体查询、指令或上下文,或者您的应用本身在某一轮次中提供的这些内容。这里是插入动态、实时信息的地方。

  • 用途:

    • 提出问题: "销售订单 12345 的状态如何?"

  • 提供新数据: "这是客户的购买历史:[data]。"

  • 发出具体命令: "起草一封给客户的电子邮件,确认发货。"

  • 有效性: 清楚地定义请求方(人类或应用逻辑)在该特定轮次中询问或提供的内容。在多轮场景中,先前的用户消息会被包含在消息列表中,以提醒 LLM 对话的进展。

  • 开发者视角: 此消息高度动态,针对每一次新的 LLM 请求,根据最终用户输入、从 SAP 系统检索的数据或应用逻辑来构造。

用户消息示例:

{
"role": "user",
"content": "Explain the concept of 'material master data' in simple terms for a new employee."
}

助手角色

助手角色对于维持对话记忆至关重要。它代表 LLM 在正在进行的对话中自己先前的回复。它还可以提供 LLM 期望输出的示例。在构建多轮对话时,您会在每次新的用户提示时,将交替出现的用户和助手消息的完整历史发送回 LLM。

  • 用途:

    • 保持上下文: 允许 LLM 参考它自己或用户先前说过的话,使对话连贯。

  • 继续对话: 使 LLM 能够跟进自己先前的回答,或确认对话中较早的部分。

  • (巧妙地)强化学习: 通过包含先前格式良好的助手回复,您在特定对话中隐式地向 LLM 展示了期望的输出格式、语气和内容示例。

  • 有效性: 如果没有助手角色,LLM 会把每次用户输入都视为全新的、孤立的请求,导致对话重复或不合逻辑。此角色为持续交互提供了必要的"记忆"。

  • 开发者视角: 您负责存储和管理对话历史,通常是在发送下一个用户查询之前,将 LLM 生成的回复以助手角色追加到您的消息列表中。

助手消息示例(LLM 生成的回复,随后由您发回):

{
"role": "assistant",
"content": "Material master data in SAP refers to a central repository of information about materials that a company procures, produces, stores, and sells. It's essential for managing inventory, purchasing, production planning, and sales processes."
}

一个完整示例

在调用 LLM 的 API 时,您通常会发送一个消息列表,使用这些角色按时间顺序构成:

[
{
"role": "system",
"content": "You are a helpful assistant for SAP Logistics. Your goal is to provide accurate and concise information about supply chain processes. Always refer to official SAP terminology where possible. If you don't know the answer, state that you don't have enough information."
},
{
"role": "user",
"content": "Explain the concept of 'material master data' in simple terms for a new employee."
},
{
"role": "assistant",
"content": "Material master data in SAP refers to a central repository of information about materials that a company procures, produces, stores, and sells. It's essential for managing inventory, purchasing, production planning, and sales processes."
},
{
"role": "user",
"content": "That's clear, thank you. What about 'procurement process' in SAP?"
}
]

随后,LLM 将处理这整个历史,以生成对最后一条用户消息的回复,同时将系统指令和先前的轮次考虑在内。

本课小结

您现在理解了 system、user 和 assistant 消息在构建 LLM 有效提示中的关键作用。您已经了解系统角色如何设定基础和行为规则,用户角色如何传递直接请求,以及助手角色如何保存对话上下文。通过采用这种结构化方法,您可以创建更清晰的指令、在对话中保持长期连贯性,并显著提升企业应用中 LLM 交互的可预测性和质量。