prompt-engineering

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Prompt Engineering

Prompt 工程

Structured System Prompt

结构化系统提示词

You are a senior code reviewer. Your role is to analyze pull requests for:
1. Correctness - logic errors, edge cases, off-by-one errors
2. Security - injection, authentication, data exposure
3. Performance - N+1 queries, unnecessary allocations, missing indexes
4. Maintainability - naming, complexity, test coverage

For each issue found, respond with:
- Severity: critical | warning | suggestion
- File and line reference
- What is wrong
- How to fix it (with code snippet)

If the code is well-written, say so briefly. Do not invent problems.
Structure system prompts with role, scope, output format, and constraints. Be explicit about what the model should NOT do.
You are a senior code reviewer. Your role is to analyze pull requests for:
1. Correctness - logic errors, edge cases, off-by-one errors
2. Security - injection, authentication, data exposure
3. Performance - N+1 queries, unnecessary allocations, missing indexes
4. Maintainability - naming, complexity, test coverage

For each issue found, respond with:
- Severity: critical | warning | suggestion
- File and line reference
- What is wrong
- How to fix it (with code snippet)

If the code is well-written, say so briefly. Do not invent problems.
结构化系统提示词应包含角色、范围、输出格式和约束条件。要明确说明模型不应该做什么。

Chain-of-Thought

思维链

Analyze this database query for performance issues.

Think step by step:
1. Identify the tables and joins involved
2. Check if appropriate indexes exist for the WHERE and JOIN conditions
3. Look for full table scans or cartesian products
4. Estimate the row count at each step
5. Suggest specific index creation or query restructuring

Query:
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;
Chain-of-thought prompting improves accuracy on reasoning tasks by forcing the model to show intermediate steps.
Analyze this database query for performance issues.

Think step by step:
1. Identify the tables and joins involved
2. Check if appropriate indexes exist for the WHERE and JOIN conditions
3. Look for full table scans or cartesian products
4. Estimate the row count at each step
5. Suggest specific index creation or query restructuring

Query:
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;
思维链提示词通过强制模型展示中间步骤,提升推理任务的准确性。

Few-Shot Examples

少样本示例

Convert natural language to SQL. Follow these examples:

Input: "How many orders were placed last month?"
Output: SELECT COUNT(*) FROM orders WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND created_at < DATE_TRUNC('month', CURRENT_DATE);

Input: "Top 5 customers by total spending"
Output: SELECT customer_id, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id ORDER BY total_spent DESC LIMIT 5;

Input: "Products that have never been ordered"
Output: SELECT p.* FROM products p LEFT JOIN order_items oi ON p.id = oi.product_id WHERE oi.id IS NULL;

Now convert:
Input: "Average order value per country for the last quarter"
Provide 3-5 diverse examples that demonstrate the expected format and edge cases.
Convert natural language to SQL. Follow these examples:

Input: "How many orders were placed last month?"
Output: SELECT COUNT(*) FROM orders WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND created_at < DATE_TRUNC('month', CURRENT_DATE);

Input: "Top 5 customers by total spending"
Output: SELECT customer_id, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id ORDER BY total_spent DESC LIMIT 5;

Input: "Products that have never been ordered"
Output: SELECT p.* FROM products p LEFT JOIN order_items oi ON p.id = oi.product_id WHERE oi.id IS NULL;

Now convert:
Input: "Average order value per country for the last quarter"
提供3-5个多样化的示例,展示预期格式和边缘情况。

Tool Use / Function Calling

工具调用

json
{
  "tools": [
    {
      "name": "search_codebase",
      "description": "Search for code patterns across the repository. Use when you need to find implementations, usages, or definitions.",
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Regex pattern or keyword to search for"
          },
          "file_type": {
            "type": "string",
            "description": "File extension filter (e.g., 'ts', 'py')"
          }
        },
        "required": ["query"]
      }
    }
  ]
}
Write tool descriptions that explain WHEN to use the tool, not just what it does.
json
{
  "tools": [
    {
      "name": "search_codebase",
      "description": "Search for code patterns across the repository. Use when you need to find implementations, usages, or definitions.",
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Regex pattern or keyword to search for"
          },
          "file_type": {
            "type": "string",
            "description": "File extension filter (e.g., 'ts', 'py')"
          }
        },
        "required": ["query"]
      }
    }
  ]
}
编写工具描述时,要解释何时使用该工具,而不仅仅是工具的功能。

Prompt Template Pattern

提示词模板模式

python
def build_review_prompt(diff: str, context: str, rules: list[str]) -> str:
    rules_text = "\n".join(f"- {rule}" for rule in rules)

    return f"""Review this code diff against the following rules:
{rules_text}

Context about the codebase:
{context}

Diff to review:
{diff}

Respond with a JSON array of findings. If no issues, return an empty array.
Each finding: {{"severity": "critical|warning|info", "line": number, "message": "string", "suggestion": "string"}}"""
python
def build_review_prompt(diff: str, context: str, rules: list[str]) -> str:
    rules_text = "\n".join(f"- {rule}" for rule in rules)

    return f"""Review this code diff against the following rules:
{rules_text}

Context about the codebase:
{context}

Diff to review:
{diff}

Respond with a JSON array of findings. If no issues, return an empty array.
Each finding: {{"severity": "critical|warning|info", "line": number, "message": "string", "suggestion": "string"}}"""

Anti-Patterns

反模式

  • Vague instructions like "be helpful" or "do your best"
  • Asking the model to "be creative" when you need deterministic output
  • Not specifying output format (JSON, markdown, plain text)
  • Stuffing too many unrelated tasks into a single prompt
  • Using negations ("don't do X") without saying what to do instead
  • Not testing prompts with adversarial or edge-case inputs
  • 模糊的指令,比如“请提供帮助”或“尽力而为”
  • 当你需要确定性输出时,要求模型“发挥创意”
  • 未指定输出格式(JSON、Markdown、纯文本)
  • 在单个提示词中塞入太多不相关的任务
  • 使用否定表述(“不要做X”)却不说明应该做什么
  • 未用对抗性或边缘情况输入测试提示词

Checklist

检查清单

  • System prompt defines role, scope, format, and constraints
  • Chain-of-thought used for multi-step reasoning tasks
  • Few-shot examples cover typical and edge cases
  • Output format explicitly specified (JSON schema, markdown, etc.)
  • Tool descriptions explain when and why to use each tool
  • Prompts tested with adversarial inputs
  • Temperature and top_p set appropriately for the task
  • Prompt templates are parameterized, not hardcoded strings
  • 系统提示词定义了角色、范围、格式和约束条件
  • 多步骤推理任务使用了思维链
  • 少样本示例覆盖了典型情况和边缘情况
  • 明确指定了输出格式(JSON Schema、Markdown等)
  • 工具解释说明了使用的时机和原因
  • 提示词已用对抗性输入测试
  • 针对任务合理设置了temperature和top_p参数
  • 提示词模板是参数化的,而非硬编码字符串