名称: 提示工程 描述: 提示工程模式,包括结构化提示、链式思考、少样本学习和系统提示设计
提示工程
结构化系统提示
您是一名高级代码审查员。您的角色是分析拉取请求中的以下方面:
1. 正确性 - 逻辑错误、边界情况、差一错误
2. 安全性 - 注入攻击、身份验证、数据暴露
3. 性能 - N+1 查询、不必要的分配、缺少索引
4. 可维护性 - 命名、复杂性、测试覆盖率
对于发现的问题,按以下格式响应:
- 严重性: critical | warning | suggestion
- 文件和行引用
- 问题描述
- 如何修复(附代码片段)
如果代码写得好,简要说明。不要虚构问题。
结构化系统提示应包括角色、范围、输出格式和约束。明确说明模型不应做什么。
链式思考
分析此数据库查询的性能问题。
逐步思考:
1. 识别涉及的表和连接
2. 检查 WHERE 和 JOIN 条件是否有适当索引
3. 查找全表扫描或笛卡尔积
4. 估计每一步的行数
5. 建议具体的索引创建或查询重构
查询:
SELECT o.*, u.name, p.title
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id
WHERE o.created_at > '2024-01-01'
AND u.country = 'US'
ORDER BY o.created_at DESC
LIMIT 50;
链式思考提示通过强制模型展示中间步骤,提高推理任务的准确性。
少样本示例
将自然语言转换为 SQL。遵循以下示例:
输入: "上个月有多少订单?"
输出: SELECT COUNT(*) FROM orders WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND created_at < DATE_TRUNC('month', CURRENT_DATE);
输入: "总支出最高的前5名客户"
输出: SELECT customer_id, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id ORDER BY total_spent DESC LIMIT 5;
输入: "从未被订购过的产品"
输出: SELECT p.* FROM products p LEFT JOIN order_items oi ON p.id = oi.product_id WHERE oi.id IS NULL;
现在转换:
输入: "过去季度的每个国家的平均订单价值"
提供3-5个展示期望格式和边界情况的多样化示例。
工具使用 / 函数调用
{
"tools": [
{
"name": "search_codebase",
"description": "在整个代码库中搜索代码模式。当需要查找实现、用途或定义时使用。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "要搜索的正则表达式模式或关键词"
},
"file_type": {
"type": "string",
"description": "文件类型过滤器(例如 'ts', 'py')"
}
},
"required": ["query"]
}
}
]
}
编写工具描述,解释何时使用工具,而不仅仅是做什么。
提示模板模式
def build_review_prompt(diff: str, context: str, rules: list[str]) -> str:
rules_text = "
".join(f"- {rule}" for rule in rules)
return f"""根据以下规则审查此代码差异:
{rules_text}
代码库上下文:
{context}
待审查的差异:
{diff}
用 JSON 数组响应发现的问题。如果没问题,返回空数组。
每个发现:{{"severity": "critical|warning|info", "line": number, "message": "string", "suggestion": "string"}}"""
反模式
- 模糊指令,如“要帮助”或“尽力而为”
- 当需要确定性输出时要求模型“有创意”
- 未指定输出格式(JSON、markdown、纯文本)
- 将太多不相关任务塞入单个提示
- 使用否定(“不要做 X”)而不说明该做什么
- 未使用对抗性或边界情况输入测试提示
检查表
- [ ] 系统提示定义角色、范围、格式和约束
- [ ] 链式思考用于多步推理任务
- [ ] 少样本示例覆盖典型和边界情况
- [ ] 明确指定输出格式(JSON 模式、markdown 等)
- [ ] 工具描述解释何时以及为何使用每个工具
- [ ] 用对抗性输入测试提示
- [ ] 根据任务适当设置温度和 top_p 参数
- [ ] 提示模板参数化,而不是硬编码字符串