编写提示词
本指南详细介绍如何在系统中编写和配置提示词,包括提示词创建、基本信息编辑、消息模板构建、模板引擎与变量使用、模型参数设置以及工具配置等完整流程,帮助您创建高质量的提示词。
创建提示词
操作步骤
- 单击创建按钮:在页面右上角选择“创建提示词”。
- 填写基本信息:按要求填写提示词Key(提示词 Key 必须唯一,重复会导致创建失败)、提示词名称、描述字段。

- 确认创建:单击“创建”后,系统会新建一个提示词并跳转至编辑页面。
编辑提示词基本信息
操作步骤
- 单击页面头部编辑基本信息按钮打开基本信息对话框。
- 填写以下字段:
| 字段 | 要求 |
|---|---|
| 提示词名称 | 必填,1-100 个字符 |
| 描述 | 可选,0-500 个字符 |
- 单击"保存",提示词的基本信息更新完成。

编写提示词模板
提示词模板支持四种消息类型,用于构建上下文支持复杂业务需求。这些消息类型基于现代大语言模型的对话架构设计,能够有效指导模型行为并提升输出质量。
操作步骤
- 在“编写提示词”模块,单击消息列表底部的“添加消息”按钮。
- 选择要添加的消息类型(System / User / Assistant / Placeholder)。
- 编辑消息内容,可直接输入或粘贴已有文本。
- 可拖拽消息实现排序,调整上下文关系。
- 单击任意消息右上角的按钮可复制、删除该消息。

System 消息
- 核心作用:定义模型角色、语气、风格与必须遵守的规则,作为模型的"身份证"和"行为准则",在整个对话过程中持续生效。适用于界定模型的身份背景(客服、顾问、专家等)、约束核心职责和工作原则、规定语言风格与价值观、声明必须遵守或禁止的行为、设定输出格式和安全边界。
- 最佳实践:
- 明确定义角色身份(如"专业医生"、"技术专家"、"创意写手")。
- 明确任务目标(说明希望模型完成的具体事情和预期结果)。
- 结构化表达(用标题、列表、分步骤等方式组织内容)。
- 提供上下文(补充背景信息、历史记录或已有数据,帮助模型理解场景)。
- 提供示例(给出示范回答或格式样例,让模型参考)。
- 使用动态模板(结合变量或 Jinja2 模板,根据不同输入生成个性化内容)。
- 设定回答风格(正式/非正式、简洁/详细、技术性/通俗化)。
- 指定输出格式要求(JSON、Markdown、特定结构)。
- 设置行为边界和限制(不能提供的信息类型、必须遵守的规则)。
- 实际应用示例:
你是一位拥有 10 年以上互联网产品规划经验的资深产品经理,擅长拆解业务目标并输出高质量的产品方案。
核心职责:
- 对齐业务目标与用户价值,明确问题根因与成功指标
- 基于数据和调研洞察提出可执行的产品策略与交互方案
- 协调设计、研发、运营等角色推进方案落地
工作原则:
1. 表达专业、冷静,保持逻辑严谨与结论清晰
2. 先给出结论,再阐述 3 步以内的关键推理过程
3. 如信息不足,先列出所需补充数据或验证假设的方法
4. 优先引用经过验证的业内最佳实践或案例
输出要求:
- 统一使用 Markdown,结构为:标题 → 关键信息要点 → 建议/行动清单 → 风险与备选方案
- 行动项须包含负责人/协作方、时间节点、预期产出
- 若存在外部依赖或风险,需显式标注并提供缓解措施
User 消息
- 核心作用:模拟真实用户输入,为模型提供任务上下文和触发条件,通常使用占位符
{{query}}绑定具体内容,实现运行时的动态替换。适用于构造常见咨询、任务描述、问题提问等。 - 实际应用示例:
| User提示词示例 | 用户输入 | 替换后的提示词 |
|---|---|---|
| 我是一名产品经理,现在遇到以下问题: {{query}} 请结合产品设计的最佳实践,为我提供具体的解决方案和实施步骤。 |
我正在设计移动端APP的用户注册流程,请帮我设计一个用户体验良好的注册流程。 | 我是一名产品经理,现在遇到以下问题: 我正在设计移动端APP的用户注册流程,请帮我设计一个用户体验良好的注册流程。 请结合产品设计的最佳实践,为我提供具体的解决方案和实施步骤。 |
说明:通过 {{query}} 占位符,系统在运行时将用户的具体问题动态插入到提示词模板中,既保持了上下文的一致性,又实现了内容的灵活性。这种方式特别适用于需要处理多样化用户请求的场景。
Assistant 消息
-
核心作用:一方面可以进一步指导模型以特定角色、风格或步骤的提示内容,补充和细化System消息的指导。另一方面可以与User消息一起构成少量的历史对话记录,为模型提供上下文。适用于角色强化、风格调整、对话历史、上下文延续。
-
最佳实践:
- 作为角色指导时,应与System消息保持一致,进一步细化行为规范。
- 作为历史记录时,应提供真实的对话上下文,帮助模型理解当前对话状态。
- 内容应简洁明确,避免与System消息产生冲突。
-
实际应用示例:
| 示例名称 | 消息列表 | AI最终回答 |
|---|---|---|
| 角色强化型Assistant消息 | System消息: 你是一名专业的心理咨询师,具有丰富的临床经验。 Assistant消息: 在回答时请遵循以下原则: 1. 始终保持专业、温和、非评判的态度 2. 使用开放性问题引导用户深入思考 3. 提供具体可行的建议和应对策略 4. 注意保护用户隐私,营造安全的对话环境 5. 必要时建议寻求专业医疗帮助 User消息: 我最近工作压力很大,经常失眠,不知道该怎么办。 |
我理解您现在面临的困扰,工作压力导致的失眠是很常见的问题。让我们一步步来分析和解决: ## 压力源分析 首先,能具体说说是什么工作因素让您感到压力吗?比如: - 工作量过大? - 人际关系紧张? - 对工作结果的担忧? ## 失眠改善建议 立即可行的方法: 1. 睡前放松:尝试深呼吸或冥想,帮助大脑从工作状态切换到休息状态 2. 规律作息:即使失眠也要保持固定的上床和起床时间 3. 睡前1小时避免电子设备:蓝光会影响褪黑素分泌 |
| 历史记录型Assistant消息 | System消息: 你是一名美食推荐专家,擅长根据用户的口味偏好推荐地方特色美食。 User消息: 我上次去成都,特别喜欢那里的麻婆豆腐和担担面,麻辣的口感让我印象深刻。 Assistant消息: 成都的麻婆豆腐和担担面确实是川菜的经典代表!看来您对麻辣口味情有独钟。这种麻辣鲜香的口感体验确实让人难忘。 User消息: 我下个月要去湖南出差,听说湖南菜也很有特色,有什么好吃的推荐吗? |
太好了!基于您对成都麻婆豆腐和担担面的喜爱,湖南菜绝对是您的菜!湘菜同样以麻辣著称, 但有着独特的"酸辣"风味,我为您推荐以下必尝美食: ## 湖南经典美食推荐 ### 主菜类(与您喜爱的川菜口味相近) 必尝推荐: - 剁椒鱼头:湘菜招牌,酸辣开胃,鱼肉鲜嫩配上剁椒的香辣 - 麻辣子鸡:类似您喜欢的麻辣口感,但湘式做法更突出干辣椒的香味 - 口味虾:长沙特色,麻辣鲜香,虾肉Q弹配上浓郁汤汁 - 辣椒炒肉:看似简单但极考验功夫,辣椒的香与肉的鲜完美融合 ### 特色小食(口感层次丰富) 相信湘菜的酸辣风味会给您带来不同于川菜麻辣的全新体验!需要我推荐具体的餐厅地址吗? |
说明:Assistant消息通过角色强化或历史记录的方式,帮助模型更好地理解当前对话的背景和期望,从而提供更加准确和连贯的回答。
Placeholder 消息
- 核心作用:为动态内容预留位置,运行时由系统注入真实上下文,支持上下文感知的对话系统。适用于长对话场景、保留多轮交互历史、增强上下文记忆。
- 实际应用示例:
| 消息列表 | 变量值 | 替换后的完整提示词 | AI最终回答 |
|---|---|---|---|
| System消息: 你是一名专业的旅行顾问,擅长根据用户的历史 偏好和对话记录提供个性化的旅行建议。 Placeholder消息: conversation_history User消息: {{query}} |
Placeholder变量值: User:我上次去了西安,特别喜欢那里的历史文化氛围。 Assistant:西安确实是中华文明的重要发源地,您对哪些方面印象最深刻? User:兵马俑的震撼和古城墙的厚重感让我印象深刻,下次旅行希望能有类似的历史文化体验。 Assistant:明白了,您偏好有深厚历史底蕴的文化景点,而不是现代化的商业景区。 user消息变量值: query:"我计划下个月去北京旅行,希望体验历史文化,有什么推荐吗?" |
System:你是一名专业的旅行顾问,擅长根据用户的历史偏好和对话记录提供个性化的旅行建议。 User:我上次去了西安,特别喜欢那里的历史文化氛围。 Assistant:西安确实是中华文明的重要发源地,您对哪些方面印象最深刻? User:兵马俑的震撼和古城墙的厚重感让我印象深刻,下次旅行希望能有类似的历史文化体验。 Assistant:明白了,您偏好有深厚历史底蕴的文化景点,而不是现代化的商业景区。 User:我计划下个月去北京旅行,希望体验历史文化,有什么推荐吗? |
基于您对西安历史文化的喜爱,特别是对兵马俑和古城墙的深刻印象, 我为您推荐以下北京历史文化深度体验路线: ## 推荐目的地:北京 ### 古都文化探索 核心推荐理由:如同西安兵马俑展现秦代军事文化,北京的古建筑群展现明清文化精髓。 必游景点: - 天安门广场:感受国家历史的庄严与厚重 - 八达岭长城:体验"不到长城非好汉"的历史豪情 - 明十三陵:明代皇帝陵寝群,感受帝王陵寝文化 ## 文化连接点 这个行程特别契合您的兴趣: - 历史震撼感:从西安兵马俑的军阵震撼到故宫的皇家气势,感受不同朝代的历史厚重 - 古建筑艺术:从西安古城墙的防御功能到北京古建筑的礼制文化,体验中国古建筑的演变 |
说明:通过Placeholder变量,系统能够动态注入用户的历史对话记录和偏好设置,使AI能够提供高度个性化和连贯的回答,而不是通用的标准回复。这种方式特别适用于需要上下文记忆的长期对话场景。
模板引擎与变量使用
根据提示词的复杂度,系统支持两种模板引擎模式。不同模式下变量的功能和使用方式有所不同:
- Normal 模式:默认模式,使用
{{变量名}}进行简单变量替换,适用于80%的常规场景,学习成本低,性能快。在编写提示词里面用{{}}包裹的符合变量命名规范的变量,会自动在变量定义区域生成变量。 - Jinja2 模式:专业模板引擎,使用
{{变量名}}语法,支持条件判断({% if %})、循环遍历({% for %})、过滤器等高级功能,适用于复杂业务逻辑。需要先在变量定义区域手工添加变量,才能用{{}}引用变量。
模式选择建议
| 对比项 | Normal 模式 | Jinja2 模式 |
|---|---|---|
| 学习成本 | 低,简单易用 | 中等,需要学习语法 |
| 功能强度 | 基础变量替换 | 支持逻辑判断和循环 |
| 适用场景 | 简单提示词 | 复杂业务逻辑 |
| 性能 | 快速 | 稍慢(需要模板解析) |
| 维护性 | 易于维护 | 需要注意语法规范 |
| 推荐使用 | 80%的常规场景 | 20%的复杂场景 |

Normal 模式
使用步骤:
- 在提示词消息中使用
{{变量名}}插入占位符。 - 在"高级配置 > 变量定义"中会自动添加对应的变量。
- 填写变量的默认值。
- 在调试模块验证变量是否正确填充。

变量语法:
使用双大括号 {{变量名}} 进行简单的变量替换
示例:
| 提示词模板 | 变量配置 | 替换后的提示词 |
|---|---|---|
| 你好,{{user_name}}!今天是{{current_date}}。 您的会员等级是:{{member_level}} 账户余额:{{balance}}元 |
user_name: "张三" current_date: "2024年11月9日" member_level: "黄金会员" balance: 1580 |
你好,张三!今天是2024年11月9日。 您的会员等级是:黄金会员 账户余额:1580元 |
Jinja2 模式
使用步骤:
- 在"编写提示词"模块切换到Jinja2模式。
- 使用Jinja2语法编写提示词模板。
- 在"高级配置 > 变量定义"单击"添加变量"按钮,在弹出的对话框中填写变量信息:
- 变量名称:符合命名规范(字母、数字、下划线、连字符,不能以数字开头)。
- 数据类型:选择String、Integer、Float、Boolean或Object。
- 默认值:填写变量的默认值。
- 保存变量后,在提示词中使用
{{变量名}}引用。 - 在调试模块测试模板渲染结果,验证变量是否正确填充。
- 变量管理:在变量列表中可查看、复制、编辑或删除变量(删除前确认提示词未引用该变量)。

变量语法:
- 变量输出:
{{ 变量名 }} - 条件判断:
{% if 条件 %} ... {% endif %} - 循环遍历:
{% for 项 in 列表 %} ... {% endfor %} - 过滤器:
{{ 变量|过滤器名 }} - 访问对象属性:
{{ 对象.属性 }}或{{ 对象["属性"] }},访问列表元素可用{{ 列表[索引] }} - 注释:
{# 这是注释 #}
示例:
| 类型 | 提示词模板 | 变量配置 | 替换后的提示词 |
|---|---|---|---|
| 条件判断 | {% if score >= 90 %} 优秀 {% elif score >= 60 %} 及格 {% else %} 不及格 {% endif %} |
score: 85 | 及格 |
| 循环遍历 | {% for item in items %} {{ loop.index }}. {{ item.name }} - {{ item.price }}元 {% endfor %} |
items: [ {"name": "苹果", "price": 3.5}, {"name": "橙子", "price": 4.2}, {"name": "香蕉", "price": 2.8} ] |
1. 苹果 - 3.5元 2. 橙子 - 4.2元 3. 香蕉 - 2.8元 |
| 过滤器 | {{ text|upper }} {# 转大写 #} {{ text|lower }} {# 转小写 #} {{ list|length }} {# 获取长度 #} {{ value|default("默认值") }} {# 设置默认值 #} {{ number|round(2) }} {# 四舍五入 #} |
text: "Hello World" list: ["a", "b", "c"] number: 3.14159 |
HELLO WORLD hello world 3 默认值 3.14 |
| 访问对象属性 | {{ user.name }} {{ user['email'] }} {{ products[0].price }} |
user: {"name": "用户", "email": "user@example.com"} products: [ {"name": "智能音箱", "price": 299}, {"name": "蓝牙耳机", "price": 199} ] |
用户 user@example.com 299 |
| 综合示例 | 你好,{{ user_name }}! {% if is_vip %} 欢迎尊贵的VIP用户!您享有以下特权: {% for privilege in vip_privileges %} - {{ privilege }} {% endfor %} {% else %} 您当前是普通用户,升级VIP可享受更多特权。 {% endif %} {% if balance > 1000 %} 您的账户余额充足:{{ balance }}元 {% elif balance > 0 %} 您的账户余额:{{ balance }}元,建议及时充值 {% else %} 您的账户余额不足,请尽快充值 {% endif %} 历史订单数量:{{ orders|length }} 最近购买时间:{{ last_purchase_date|default("暂无购买记录") }} |
user_name: "李四" is_vip: true vip_privileges: ["专属客服", "优先发货", "积分翻倍", "生日礼包"] balance: 2580 orders: ["订单1", "订单2", "订单3", "订单4", "订单5"] last_purchase_date: "2024年11月5日" |
你好,李四! 欢迎尊贵的VIP用户!您享有以下特权: - 专属客服 - 优先发货 - 积分翻倍 - 生日礼包 您的账户余额充足:2580元 历史订单数量:5 最近购买时间:2024年11月5日 |
模板引擎使用技巧
切换模式注意事项:
- 从Jinja2切换到Normal:所有逻辑语句(if/for等)会被当做普通文本处理
- 切换前建议备份当前提示词内容
- 切换后务必在调试模块重新测试
- 删除变量前先全局搜索,避免提示词引用失效
变量命名规范:
- 命名规则:变量名仅支持字母、数字、下划线(_)、连字符(-),且不能以数字开头
- 使用有意义的名称:
user_name优于un,order_total_price优于price - 保持一致性:统一使用下划线命名(如
user_name)或连字符命名(如user-name) - 区分大小写:
UserName和username是不同的变量 - 有效示例:
user_name、order-id、totalPrice、item_count_2024 - 无效示例:
用户名(包含中文)、user name(包含空格)、user.name(包含点号)、2024_year(以数字开头)
变量类型选择:
- String(字符串):文本内容,如姓名、地址、描述信息
- Integer(整数):整数数值,如数量、年龄、订单数
- Float(浮点数):小数数值,如价格、评分、百分比
- Boolean(布尔):条件判断,如是否VIP、是否启用、是否完成
- Object(对象):使用JSON格式配置结构化数据,可表示对象(如
{"name": "张三", "age": 25})或数组(如["苹果", "香蕉", "橙子"])
模型设置
模型设置决定了提示词运行时使用的AI模型和相关参数,直接影响输出质量和效果。
选择模型
在"高级配置 > 模型设置"标签页的模型选择下拉框选择具体的模型,不同模型有不同的特点和适用场景,你可以根据模型描述和标签选择合适的模型。
配置参数
模型常见配置参数如下,不同的模型能配置的参数不同,具体以页面上能配置的为准:
-
Temperature(温度):控制模型输出的随机性和创造性
- 范围:0.0 - 1.0
- 低值(0.0-0.3):输出更确定、保守、可预测,适合需要精确答案的场景(如数学计算、事实查询)
- 中值(0.5-0.8):平衡创造性和准确性,适合大多数对话场景
- 高值(0.9-1.0):输出更多样、富有创造性和随机性,适合创意写作、头脑风暴等场景
- 建议:与 Top P 配合使用时,通常只调整其中一个参数
- 范围:0.0 - 1.0
-
Max Tokens(最大令牌数):限制模型在单次生成中输出的最大标记数。控制生成文本的长度,防止输出过长或消耗过多资源。
- 建议:根据实际需求设置,避免设置过小导致输出被截断
-
Top P(核采样):也称为 Nucleus Sampling,选择累计概率达到 p 的最小词集合进行采样。动态调整候选词的数量,平衡输出的多样性和质量。
- 范围:0.0 - 1.0
- 低值(0.0-0.3):只考虑概率最高的词,输出更集中、确定
- 高值(0.8-1.0):考虑更多候选词,输出更多样
- 建议:通常设置为 0.9-0.95,与 Temperature 配合使用时建议只调整其中一个
- 范围:0.0 - 1.0

工具配置
工具配置允许模型在运行时调用外部工具,实现更强大的功能扩展。
说明:提示词模块现在只是实现了模拟的工具调用,暂不支持实际调用工具。
操作步骤
- 在"高级配置 > 工具设置"标签页打开"启用工具"开关,单击"新增工具"按钮。

- 在弹出的对话框中填写工具信息:
- 工具名称:工具的唯一标识符。
- 工具描述:清晰说明工具的功能和用途,帮助模型理解何时调用该工具。
- 参数配置:定义工具的输入参数,配置工具的参数名称、参数类型、是否必填和参数描述。
- 默认模拟值:为工具配置默认的模拟返回值(文本或JSON格式),用于在调试模式下模拟工具调用的返回结果,便于测试工具调用的效果。
参数配置方式
系统提供两种参数配置方式。
1. 可视化配置
通过界面表单逐项配置工具信息,适合初学者和快速配置场景,每个工具参数需要配置以下信息:
- 参数名称:参数的标识符,必须唯一。
- 参数类型:支持String、Integer、Number、Boolean、Array等类型。
- 是否必填:标记参数是否为必需。
- 参数描述:说明参数的用途和格式要求。
2. JSON格式配置
直接编辑完整的JSON Schema格式:
- 支持复杂的参数约束和嵌套结构。
- 适合有经验的用户和复杂工具定义。
- 提供语法高亮和格式验证。
在JSON格式配置模式下,需要编写完整的JSON Schema,支持更丰富的验证规则:
| 类型关键字 | 说明 | 数据示例 |
|---|---|---|
| string | 字符串类型。可以配合使用minLength、maxLength等关键字来进一步约束。 | "Hello, world", "open", "用户名" |
| number | 数值类型,包括整数和浮点数。可使用minimum/maximum(定义数值范围)等关键字约束。 | 25.5, 3.14, 100 |
| integer | 整数类型。约束关键字与number类型类似。 | 1, 42, -10 |
| boolean | 布尔类型,值为true或false。 | true, false |
| array | 数组类型。需使用items关键字定义数组内元素的结构,可使用minItems/maxItems约束长度。 | ["apple", "banana"], [1, 2, 3] |
| object | 对象类型。需使用properties关键字定义其属性,用required数组列出必需属性。可选用additionalProperties控制对象是否允许包含未在properties中定义的额外属性 | {"name": "张三", "age": 25} |
完整的JSON Schema格式说明参见:https://json-schema.org/understanding-json-schema/reference/type。
说明: 1.在JOSN Schema定义中,可以通过将type的值设为一个类型数组(如 ["string", "integer"]),来允许参数符合多种类型之一。在本系统中,不支持类型数组。 2.本系统也不支持null类型。
3. 配置切换
- 可以在可视化配置和JSON配置之间自由切换。
- 切换时系统会自动进行格式转换。
- 建议先用可视化配置快速搭建,再用JSON配置精细调整。
说明:由于可视化配置只支持简单的配置方式,如果在JSON配置模式下配置了复杂的JSON格式(比如嵌套格式),切换到可视化配置只能把可视化配置支持的部分解析。如果编辑了可视化配置,再次切换回JSON配置后,会导致可视化配置不支持的部分丢失。
完整示例:餐厅推荐工具
- 工具名称:
recommend_restaurant - 工具描述:
根据城市、口味和预算检索推荐餐厅 - 入参配置:
- 可视化配置
| 字段 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
city |
string | 用户所在城市 | 是 |
food_preference |
string | 用户的口味偏好 | 是 |
budget |
number | 人均预算(单位:元) | 否 |
- JSON配置
{
"type": "object",
"properties": {
"location": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如:北京市、上海市"
},
"district": {
"type": "string",
"description": "行政区或商圈,如:朝阳区、陆家嘴"
},
"address_keyword": {
"type": "string",
"description": "地址关键词,如: near 地铁站、商场名称"
}
},
"required": ["city"],
"additionalProperties": false
},
"cuisine": {
"type": "array",
"items": {
"type": "string",
"enum": ["中餐", "西餐", "火锅", "烧烤", "粤菜", "川菜", "湘菜"]
},
"description": "偏好菜系,可多选"
},
"budget_per_person": {
"type": "integer",
"minimum": 0,
"maximum": 2000,
"description": "人均预算(元)"
},
"occasion": {
"type": "string",
"enum": ["日常用餐", "朋友聚会", "商务宴请", "家庭聚餐", "生日庆祝", "公司团建"],
"description": "用餐场合"
},
"min_rating": {
"type": "number",
"minimum": 3.0,
"maximum": 5.0,
"description": "最低评分要求"
},
"preferred_payment": {
"type": ["string"],
"enum": ["alipay", "wechat_pay", "credit_card", "cash"],
"description": "偏好的支付方式"
}
},
"required": ["location", "budget_per_person"],
"additionalProperties": false
}
- 默认模拟值:
{
"restaurants": [
{
"name": "蜀大侠火锅",
"address": "朝阳区XX路XX号",
"price_range": "120-180",
"rating": 4.8
},
{
"name": "川味小馆",
"address": "海淀区XX路XX号",
"price_range": "80-120",
"rating": 4.6
}
]
}
