Prompt 编写最佳实践

System Prompt 是技能的「灵魂」。它决定了 Agent 的行为模式、输出质量和任务完成度。写好 Prompt 不需要编程,但需要清晰的思维和结构化的表达。

核心原则

1. 角色先行

在 Prompt 开头明确定义 Agent 的角色。角色决定语气、专业度和行为边界。

✅ 好的写法

你是 CeeCore 的天气预报助手,负责每日定时推送天气信息。
你的语气应该像一位细心的朋友,简洁、友好、实用。

❌ 差的写法

你是一个助手,帮用户查天气。

为什么差:没有定义语气和边界,Agent 可能输出冗长、啰嗦或无关内容。

2. 任务具体化

用「做什么 → 怎么做 → 输出什么」的结构描述每个任务。

✅ 好的写法

## 任务:每日天气推送

每天早上 8:00,完成以下步骤:
1. 调用 get_weather 获取 {{config.city}} 的天气数据
2. 整理成推送消息,包含:
   - 天气状况(晴/雨/阴)
   - 温度范围(最高℃/最低℃)
   - 穿衣建议
3. 通过 send_notification 推送给用户

推送消息格式:
"早上好!今天{{城市}}天气{{状况}},{{温度范围}}。{{穿衣建议}}"

❌ 差的写法

每天推送天气。

3. 给出正例和反例

告诉 Agent 什么是好的输出,什么是不好的——用例子说话。

✅ 好的写法

## 推送示例

好的推送:
"早上好!今天北京晴,15℃~25℃。建议穿薄外套,温差较大注意保暖。"

不好的推送:
"根据气象数据分析,北京地区今日天气状况为晴朗,温度在15到25摄氏度之间波动..."
(太啰嗦,像天气预报播报,不像朋友提醒)

4. 设定边界

明确告诉 Agent 什么不能做、什么不能回复。

✅ 好的写法

## 边界规则

- 不要回答天气相关以外的问题
- 如果天气 API 调用失败,推送"今日天气数据获取失败,请稍后查看",不要编造数据
- 不要主动提供超出天气范围的信息(如旅游建议、美食推荐)
- 推送消息控制在 200 字以内

5. 使用模板变量

在 Prompt 中用 {{config.xxx}} 引用用户配置,让技能变成可定制的。

每天早上 {{config.push_time}},获取 {{config.city}} 的天气数据。

可用变量:

  • {{config.xxx}}:用户配置参数(对应 config.schema.json 中的字段)
  • {{device.name}}:设备名称
  • {{user.name}}:用户昵称

结构模板

一个规范的 Prompt 建议包含以下章节:

# [技能名称]

## 角色
你是谁,你的语气和定位是什么。

## 任务
你需要完成什么,按什么顺序,输出什么。

## 工具使用
你有哪些工具可用,在什么场景下调用。

## 输出格式
你的回复应该是什么格式、什么长度。

## 边界规则
你不能做什么,不能回答什么。

## 示例
好的输出和坏的输出的对比。

常见陷阱

陷阱 1:指令冲突

# ❌ 冲突的指令
输出要简洁,控制在 100 字以内。
同时要详细解释每个数据来源和计算方法。

两个指令互相矛盾,Agent 会困惑。解决方案:优先级排序。

# ✅ 优先级明确
1. 优先保证简洁(控制在 100 字以内)
2. 如果用户追问,再详细解释

陷阱 2:模糊描述

# ❌ 模糊
适当的时候提醒用户。

「适当的时候」是什么时候?Agent 无法判断。

# ✅ 精确
当温度超过 35℃ 或低于 5℃ 时,推送中增加极端天气提醒。

陷阱 3:过度约束

# ❌ 过度约束(让 Agent 失去灵活性)
你必须用以下 5 个句式回复,不能偏离。

过度约束让 Agent 机械、不自然。

# ✅ 保留灵活性
推送语气自然友好,避免机械播报。

陷阱 4:忽略异常处理

# ❌ 没有异常处理
调用 API 获取天气。

API 失败了怎么办?Agent 会卡住。

# ✅ 有异常处理
调用 API 获取天气。如果失败,重试一次。
仍失败则推送"今日天气数据获取失败,请稍后查看"。

测试你的 Prompt

写完 Prompt 后,用以下问题自检:

  1. 角色清晰吗? 读完第一段,能说出这个 Agent 是干什么的?
  2. 任务可执行吗? 每一步都有明确的输入和输出?
  3. 有边界吗? 明确说了什么不能做?
  4. 有示例吗? 给了好坏对比?
  5. 有异常处理吗? 出错时 Agent 知道怎么办?
  6. 能念出来吗? 念一遍——不通顺的地方,Agent 也会觉得不通顺。

进阶技巧

链式思维

让 Agent 在回答前先「思考」,提高复杂任务的准确性。

在回答用户之前,先按以下步骤分析:
1. 用户的问题是什么类型?
2. 需要调用哪些工具?
3. 预期的输出格式是什么?
然后根据分析结果回答。

渐进式引导

对于复杂技能,将任务拆成多个步骤,逐步引导。

## 步骤 1:分析用户需求
先理解用户想要什么,用一句话确认。

## 步骤 2:制定方案
根据用户需求,制定 2-3 个可行方案。

## 步骤 3:执行方案
用户选择一个方案后,调用工具执行。

## 步骤 4:汇报结果
整理执行结果,以简洁的方式汇报。

← 安装与激活 | 工具定义指南 →