# 编写提示词 扣子罗盘提供了 Prompt 模板、Prompt 变量、AI 优化提示词等功能,帮助你快速生成符合业务需求的 Prompt。本文档介绍如何通过这些能力编写提示词。 ## 配置 Prompt 模板 ### 模板类型 扣子罗盘提供 Normal 和 Jinja2 两种 Prompt 模板类型。默认为 Normal 类型,你也可以设置为 Jinja2 类型,这两种类型的区别如下: | **模板类型** | **说明** | **示例** | | --- | --- | --- | | Normal | 普通模板,支持简单的变量替换,包裹在双大括号 {{}} 中的内容将被自动定义为变量。
| * Prompt 模板内容:我的问题是“`{{question}}`”
* 变量内容:`question`=中国是什么类型气候
* 实际输入给模型的 Prompt:我的问题是“中国是什么类型气候” | | Jinja2 | Jinja2 模板,允许在提示词中嵌入逻辑,使提示词能够根据上下文动态调整,适合在需要动态智能提示的场景(如聊天机器人、客服)下更灵活和高效地编写提示词。

* 支持 Jinja2 语法,可实现过滤器、条件判断等复杂的变量逻辑。
* 需要先在右侧变量区域添加变量,才能用双大括号 {{}} 引用变量。

此外, Jinja2 模板还支持多种数据类型的 Prompt 变量,部分数据类型有一定格式要求。详细说明可参考[Jinjia2 模板变量数据类型](https://docs.coze.cn/api/open/docs/cozeloop/prompt#1c33253d)。 | * Prompt 模板内容:`The title is {{title_variable\|title}}. Please discuss it.`
* 变量内容:`title_variable`为`a simple question`
* 实际输入给模型的 Prompt:`The title is A Simple Question. Please discuss it.`

更多示例可参考[模板引擎语法示例](https://docs.coze.cn/api/open/docs/cozeloop/prompt#716d7212)。 | 在 **Prompt 开发**页面左侧的 **Prompt 模板**区域,选择模板类型。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/b61ab3ebbb94417ea32ffa0168e2a583~tplv-goo7wpa0wc-image.image) ### Prompt 变量 如果你希望在 Prompt 模板中插入动态的内容,可以通过 Prompt 变量实现。 #### 纯文本变量 定义并添加 Prompt 变量的方式如下: | **模板类型** | **说明** | **示例** | | --- | --- | --- | | Normal | Normal 模板无需手动定义变量,直接在 Prompt 中输入变量格式即可。
在 Prompt 模板区域,直接输入变量格式和变量名称,例如 `{{City}}`。系统会自动识别变量格式,并在右侧的 Prompt 变量区域添加对应名称(例如 City)的变量。 | ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/a1e379aa1bf94718b87d3ae0e5d35e48~tplv-goo7wpa0wc-image.image) | | Jinja2 | Jinja2 模板需要手动定义变量,然后才能在 Prompt 中引用这个变量。

1. 在 Prompt 变量区域中,单击新增变量。
2. 设置变量的名称、数据类型和变量值,并单击确认。
3. 在 Prompt 模板区域,输入变量格式和变量名称来引用这个变量,例如 `{{Province}}`。 | ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/5b63b6ba131042fdbd767e49f9e55137~tplv-goo7wpa0wc-image.image) | 定义变量之后,你可以直接输入 `{{`,系统会提示你可以引用的变量列表。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/e0103a9a60394be78fab99eb1b222ebc~tplv-goo7wpa0wc-image.image) 不同模板引擎定义变量的方式不一致,切换模板引擎可能导致之前定义的变量渲染失败。例如 Jinja2 模板切换为 Normal 模板之后,通过 Jinja2 语法定义的变量会被视为普通文本。 #### 多模态变量 对于支持多模态输入的模型,你可以在 User prompt 和 Assistant Prompt 中添加多模态变量,支持图片和文字,可实现图文混排。 * 仅 User prompt 和 Assistant Prompt 中添加多模态变量,System Prompt 和 Placeholder 中暂不支持。 * 添加多模态变量前,注意需要切换为支持多模态输入的模型,例如豆包视觉理解模型。 添加并调试多模态变量的方式如下: 1. 单击添加消息,在 User prompt 和 System Prompt 输入框的右上角单击图片图标。 2. 根据页面提示输入变量名称,并单击确定。 添加成功后,Prompt 变量区域会展示此变量,可见`多模态`标识。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/80e3a3ea105244fdaab4003e9b3ceffb~tplv-goo7wpa0wc-image.image) 3. 在 Prompt 变量区域,找到新增的多模态变量,设置调试时使用的变量值。 单击添加数据,添加一个变量值,最多可添加 50 条。 多模态变量支持文本和图片两种类型的输入,其中图片类型支持本地上传图片文件,或者输入在线图片 URL。 * 文本:文本格式的内容。 * 图片(源文件):本地上传图片文件,单张图片大小限制需遵循模型要求,例如豆包 VLM-1028 单图大小上限为 10M,支持一次上传多张图片。 * 图片(外链):输入在线图片 URL。上传时扣子罗盘会校验 URL 有效性,开发者需自行保证所提供 URL 长期可用。如果上传的图片链接解析失败,可以检查 URL 是否以 `http://` 或 `https://` 开头、域名格式是否正确,或尝试更换其他 URL。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/ea21625b2bfc4a22b5472f35904f525a~tplv-goo7wpa0wc-image.image) 4. 在预览与调试区域输入问题,并单击运行,等待大模型回复。 例如下图中,通过思考内容可以判断出图片已被模型正常识别。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/456ce65da2da46aaa88979f5107ef8db~tplv-goo7wpa0wc-image.image) ### 自动优化提示词 选中系统提示词文本框,然后单击右上角的**一键优化**图标。扣子罗盘会基于底层优化算法自动帮你改进系统提示词。 系统提示词是基础框架,直接影响模型的输出效果。设计良好的系统提示词能够显著提升模型的表现。建议使用扣子罗盘的**一键优化**能力,以提升系统提示词的质量和效果。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/2a56c4478f7049bfb7cdc134f89e6035~tplv-goo7wpa0wc-image.image) 如果你想使用优化后的版本,单击**采纳**;如果优化后的版本不符合预期,可以单击**刷新**按钮,重新优化。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/af5798d8f2ec4039ad20b031a0901545~tplv-goo7wpa0wc-image.image) ### 消息列表 当系统提示词无法满足复杂业务需求时,可以通过消息列表(MessageList)的方式来组织提示词。扣子罗盘支持 MessageList 形态的提示词模版托管。 参考以下步骤添加更多提示词: 1. 单击系统提示词区域下的 **+ 添加消息**按钮。 2. 单击文本框左上角的**User**,然后从下拉列表中选择要添加的提示词,并完成对应配置。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/3243d718f24c4d1081783b15197e20f3~tplv-goo7wpa0wc-image.image) 下表是扣子罗盘提示词模板支持的提示词消息,你可以根据实际应用场景选择合适的配置。 下表中的回复均为 AI 生成,仅供参考。 * 对于内容摘要生成或创意文案撰写等**单轮任务**,配置系统提示词(System prompt)和用户提示词(User prompt)即可满足需求。 * 对于客服咨询或教育辅导等**多轮对话任务**,可引入助手回复(Assistant prompt)和占位符(Placeholder)以记录历史对话上下文,从而保证对话的连贯性和个性化。 | **提示词** | **说明** | **示例** | | --- | --- | --- | | 系统提示词 (System prompt) | **作用**:定义模型的全局规则,用于指导模型的整体行为,例如角色设定、任务边界、输出格式要求等。
**使用场景**:系统提示词在所有对话开始时加载,持续影响后续交互。 | System prompt 示例:
```Markdown
你是一名长沙旅游向导助手,需遵守以下规则:
1. 推荐内容需标注价格范围和地理位置(如“五一广场附近”);
2. 若用户需求不明确,主动提问澄清。
3. 使用中文回答用户问题,注意礼貌。
```
| | 用户提示词 (User prompt) | **作用**:用于接收用户动态请求,通常使用占位符`{{query}}` 绑定具体内容。
**使用场景**:当用户与 AI 应用进行交互时,他们提供的输入信息会被系统接收。系统会将提示中的占位符替换为用户的实际输入内容,从而生成完整的提示信息,然后将其发送给模型进行处理。
User prompt 的优先级高于 System prompt。
| * User prompt 示例:
```Markdown
用户需求:{{query}}
请按上述规则回答,并附上费用估算。
```

* 用户提示词:`“推荐五一广场附近的平价住宿”`
* 替换后,发给模型的完整提示如下:
```Markdown
用户需求:推荐五一广场附近的平价住宿
请按上述规则回答,并附上费用估算。
```
| | 助手回复 (Assistant prompt) | **作用**:明确指导模型以特定角色、风格、格式或逻辑进行回应的提示内容。
**使用场景**:通常与用户的问题(User Prompt)配合使用,用于约束或引导模型的输出行为,使其更符合预期的应用场景。 | 以下是一个文案生成助手的 Prompt 模板配置示例。

* 系统提示词:
```Markdown
你是一个电商客服,可以回答用户的问题。
```

* 用户提示词:
```Markdown
我的订单显示发货了,但一周还没收到,怎么办?
```

* 助手回复:
```Markdown
你现在是某电商平台的客服助手,需要以友好、专业的语气回应。首先安抚用户情绪,然后分步骤提供解决方案(如查询物流、联系快递、补发订单),最后主动询问是否需要进一步帮助。
```


模型会参考助手回复的内容,生成一个如下的输出:
```Markdown
非常抱歉给您带来不便!您的包裹可能因物流高峰期有所延迟。建议您先通过订单页面查询物流单号和最新状态;若信息异常,我们可以帮您联系快递确认;若长时间未收到,我们将为您申请补发。请问需要为您转接物流查询服务吗?
```
| | 占位符 (Placeholder) | **作用**:用于记录历史对话记录,提供模型更多上下文信息。
**使用场景**:在多轮对话场景中,用户追问时,模型可以根据历史对话记录,准确生成回复内容。
**配置说明**:当在 Prompt 模板中添加 Placeholder 后,需要在右侧的 Prompt 变量区域,单击**编辑 Placeholder** 添加作为上下文历史内的对话历史**。**
| 以下是一个客服场景的 Prompt 模板配置示例。

* 系统提示词:
```Markdown
你是一名电信运营商智能客服,需要遵守以下规则:
1. 准确识别用户问题类型(资费查询/故障报修/套餐变更)
2. 每次回复需包含当前对话轮次标识
3. 当用户问题不明确时,要求提供手机号码后四位验证身份
```

* Placeholder 配置:
```Markdown
{{chat_history}}
```

* Prompt 变量中添加的 Placeholder 的对话历史:
```Markdown
User: 我的网络突然不能用了
Assistant: 请问您的手机号码后四位是多少?我们需要先验证身份。
User:1389
Assistant: 1389尾号用户您好,检测到您家宽带处于离线状态,正在为您创建故障工单...
```


当用户`提问工单号是多少`时,模型回复如下所示:
```Markdown
1389尾号用户您好,您当前的故障工单号是【CT20231115001】,已安排工程师尽快为您处理,预计2小时内修复。请保持手机畅通,以便工程师联系您。
```

当用户进行追问时,通过占位符自动注入完整对话历史,保证了对话的连续性和回复的准确性。 | ## 配置模型 在完成 Prompt 模板搭建后,接下来可以选择合适的模型来接收 Prompt 模板中的指令。 参考以下步骤,选择并完成模型配置。 1. 在 **Prompt 开发**页面,从**模型配置**下拉列表中选择要使用的模型。 你可以根据模型的描述信息和功能关键词来选择合适的模型。 2. 配置模型参数。 * **最大回复长度**:设置模型最多可以回复的 Token 数量。通常 100 Tokens 约等于 150 个中文汉字。 * **生成随机性**:设置模型回复的创新性和多样性。取值范围为 0~1。数值越接近 1,表示模型的输出更具多样性和创新性,适用于小说、文案生成等场景;反之,数值降低时,输出内容会更加遵循指令要求,减少多样性,适用于需要精确回答的场景。 * **Top P**:设置模型的累计概率。在生成输出时,模型会从概率最高的词汇开始选择,直到这些词汇的总概率累积达到 Top P 值。这样可以限制模型只选择这些高概率的词汇,从而控制输出内容的多样性。 * 不同模型可配置的参数可能不同,请以界面上支持的配置为准。 * 不建议同时调整 Top P 和生成随机性,这可能会导致输出结果不稳定或不符合预期。建议根据具体需求选择其中一个进行调整。 ## 配置函数 选择支持 Function Call 的模型后,可以使用插入函数功能来模拟函数调用。当前,扣子罗盘并不会实际调用定义的函数,而是根据模型的输出模拟调用过程返回预期的函数结果,以便继续执行用户指令。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/1abeeb436b3d4d7fbdfa156303e008e5~tplv-goo7wpa0wc-image.image) 参考以下步骤,配置模拟函数调用: 1. 在 **Prompt 开发**页面的**模型配置**区域下,单击 **+新增函数**。 2. 在**新增函数**窗口,完成函数配置。 1. 在左侧的**函数**面板中定义函数配置,包括函数的名称(name)、描述(description)以及参数定义(parameters)。可单击**使用模板**根据模板定义函数。 2. 在右侧的**模拟值**面板中输入模拟的返回值。 由于上一步函数的执行结果会影响下一步模型的决策,为了便于快速验证,可以为函数添加模拟返回值,从而高效测试多步函数调用流程。 3. 单击**确定**。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/076d8e1721db4fc391db2720b39c5b1e~tplv-goo7wpa0wc-image.image) 3. 保存函数配置后,系统会自动启用这个函数,并开启**单步调用**模式。你也可以根据实际需求进行调整: * **启用函数**:启用后,调试过程中将模拟函数调用,输出函数返回结构。 * **单步调试**: * 单步调试模式下会逐步执行模型的函数调用,并支持修改模拟值。通过这种方式,你可以更详细地了解模型的执行过程及其影响。 * 非单步模式:在非单步模式下,系统会一次性返回大型模型的函数调用和最终结果,整个过程更为简洁。 4. 重复上述步骤,添加更多函数。 至此,你就完成了提示词的设计和编写。接下来,你就可以在扣子罗盘进行 Prompt 调试,验证输出效果是否符合预期。 ## 相关信息 ### 模板引擎语法示例 | **模板引擎** | | **变量注入** | **提示词结构** | | --- | --- | --- | --- | | **Normal 模板引擎** | | 支持简单占位符以供静态变量注入。
例如:

* **模板**:我的问题是:`{{question}}`
* **变量输入** :`question`=中国是什么类型气候
* **传递给模型**:我的问题是:中国是什么类型气候 | 提示结构固定。

* **场景**:构建一个多轮对话的AI助手,目标是当对话历史较长(比如超过3轮)时,在提示中加入对历史对话的总结。
* **解法**:普通模板引擎不支持条件判断和复杂逻辑,必须在 Prompt 外部处理逻辑,然后将处理后的字符串传入 Prompt。 | | **Jinja2 模板引擎** | **条件判断** | 支持变量的复杂逻辑/计算,如条件分支/循环/过滤器等。
例如:

* **模板**:

> {% if `include_hint` %}温馨提示:{{`hint_variable`}}
> {% endif %}。
> 我的问题是:{{`question`}}


* **变量输入**:`include_hint`=True,`hint_variable`=想想中国地理知识,`question=`中国是什么类型气候
* **传递给模型**:

> 温馨提示:想想中国地理知识。
> 我的问题是:中国是什么类型气候 | 实时根据上下文调整提示结构。
**示例效果如下**:

* **场景**:构建一个多轮对话的AI助手,目标是当对话历史较长(比如超过3轮)时,在提示中加入对历史对话的总结
* **解法**:在 Prompt 中根据上下文动态生成不同的提示结构

```Django
{% if history\|length > 3 %}
以下是对话的总结:{{ summarize_history(history) }}
请根据以上总结继续对话。
{% else %}
对话历史:
{% for turn in history %} {{ turn.role }}: {{ turn.content }}
{% endfor %}
{% endif %}
用户最新输入:{{ new_input }}
```
| | | **循环** | * **模板**:

> {% for choice in `choices` %}选项{{loop.index}}:{{choice}}
> {% endfor %}
> 你认为哪个选项最合适?


* **变量输入**:`choices`=['热带', '亚热带', '温带']
* **传递给模型**:

> 选项1:热带
> 选项2:亚热带
> 选项3:温带
> 你认为哪个选项最合适? | | | | **过滤器** | * **模板**:标题是{{`title_variable`\|capitalize}}。请对此展开讨论。
* **变量输入**:`title_variable`=brief introduction to chinese culture
* **传递给模型**:标题是Brief Introduction To Chinese Culture。请对此展开讨论。 | | ### Jinja2 模板变量数据类型 Jinja2 模板引擎中,Prompt 变量支持以下多种数据类型。 | **数据类型** | **说明** | **示例** | | --- | --- | --- | | String | 字符串类型 | "Hello World" | | Integer | 整数类型
必须是 Int64 范围 | 42 | | Float | 浮点数类型

* Float64 范围
* 最多支持 4 位小数 | 3.1415 | | Boolean | 布尔类型 | True / False | | Object | 对象类型

* 符合 JSON 格式的对象
* 最多支持三层嵌套
* 不支持自引用 | {"name": "张三", "age": 30} | | Array | 字符串数组

* 符合 JSON 格式的数组
* 元素数量不超过 100 个 | ["苹果", "香蕉", "橙子"] | | Array | 整数数组

* 符合 JSON 格式的数组
* 元素数量不超过 100 个 | [1, 2, 3, 4, 5] | | Array | 浮点数数组

* 符合 JSON 格式的数组
* 元素数量不超过 100 个 | [1.1, 2.2, 3.3] | | Array | 布尔值数组

* 符合 JSON 格式的数组
* 元素数量不超过 100 个 | [true, false, true] | | Array | 对象数组

* 符合 JSON 格式的数组
* 元素数量不超过 100 个 | [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}] |