ai 精选推荐

程序员提示词工程完整指南:从原理到实战的系统性方法论

HTMLPAGE 团队
18 分钟阅读

深度解析提示词工程的核心原理、高级技巧与实战策略,涵盖角色设定、思维链、Few-shot 学习、结构化输出等进阶主题,助力程序员构建高效的 AI 编程工作流。

#提示词工程 #AI 编程 #LLM #Chain of Thought #Few-shot Learning

程序员提示词工程完整指南

引言:为什么需要系统性的提示词方法论?

在 AI 编程工具普及的今天,许多开发者仍在用"试错法"编写提示词——反复修改直到获得满意结果。这种方法效率低下、结果不稳定,且难以复用。

本指南将提供一套系统性的提示词工程方法论,帮助你:

  • 理解 LLM 的工作原理,从根本上优化提示词
  • 掌握 6 种核心提示词模式及其应用场景
  • 建立可复用的提示词模板库
  • 实现提示词的版本控制与持续优化

第一部分:理解 LLM 的"思维方式"

1.1 Token 与上下文窗口

LLM 不像人类那样"理解"语言,它处理的是 Token(词元)。理解这一点对编写高效提示词至关重要。

// 一个简单的 Token 估算函数
function estimateTokens(text) {
  // 英文约 1 token/4 字符,中文约 1 token/1.5 字符
  const englishTokens = (text.match(/[a-zA-Z]+/g) || [])
    .join('').length / 4;
  const chineseTokens = (text.match(/[\u4e00-\u9fa5]/g) || [])
    .length / 1.5;
  const otherTokens = text.replace(/[a-zA-Z\u4e00-\u9fa5]/g, '')
    .length / 4;
  
  return Math.ceil(englishTokens + chineseTokens + otherTokens);
}

// 示例
console.log(estimateTokens('实现一个 Vue 3 分页组件')); // 约 12 tokens

上下文窗口限制:

模型上下文窗口建议用量
GPT-4o128K< 100K
Claude 3.5200K< 150K
DeepSeek64K< 50K
本地 7B 模型4K-8K< 3K

实践建议: 保留 20-30% 的窗口空间给模型输出,避免截断问题。

1.2 注意力机制与位置效应

LLM 的注意力并非均匀分布:

┌─────────────────────────────────────────────┐
│  提示词开头    中间部分    提示词结尾      │
│  ████████    ░░░░░░░░    ████████████    │
│  高注意力     注意力衰减    高注意力        │
└─────────────────────────────────────────────┘

实践技巧:

  • 首位效应:最重要的指令放在开头
  • 近因效应:关键约束重复放在结尾
  • 中间填充:详细上下文放在中间
# 高效提示词结构模板

## 开头:角色定义与核心目标(高注意力区)
你是一位精通 Vue 3 和 TypeScript 的高级前端工程师...

## 中间:详细上下文与示例(信息密集区)
项目背景:电商平台购物车模块...
当前代码:[代码块]
已尝试方案:[方案列表]

## 结尾:输出格式与关键约束(高注意力区)
请严格按照以下格式输出:
1. 问题分析(不超过 3 点)
2. 解决方案代码
3. 注意:必须使用 Composition API,禁止使用 Options API

1.3 Temperature 与输出控制

Temperature 参数控制输出的"创造性":

interface LLMConfig {
  temperature: number;  // 0-2,默认 1
  top_p: number;        // 0-1,与 temperature 互斥使用
  max_tokens: number;   // 最大输出长度
}

// 不同场景的推荐配置
const configs = {
  // 代码生成:需要精确、确定性输出
  codeGeneration: {
    temperature: 0.2,
    top_p: 0.95,
    max_tokens: 4096
  },
  
  // 代码审查:需要一定创造性发现问题
  codeReview: {
    temperature: 0.5,
    top_p: 0.9,
    max_tokens: 2048
  },
  
  // 创意命名:需要高创造性
  naming: {
    temperature: 0.8,
    top_p: 0.85,
    max_tokens: 512
  },
  
  // 文档生成:平衡准确性和可读性
  documentation: {
    temperature: 0.4,
    top_p: 0.9,
    max_tokens: 4096
  }
};

第二部分:六大核心提示词模式

模式一:角色扮演(Role Playing)

角色设定不只是"装饰",它实际上激活了模型在训练数据中学到的特定知识领域。

基础角色模板:

你是一位 [具体职称],拥有 [年限] 年 [领域] 经验,
专注于 [细分方向1] 和 [细分方向2]。

你的工作风格:
- [特点1]
- [特点2]
- [特点3]

你擅长解决的问题:
- [问题类型1]
- [问题类型2]

进阶:多角色协作

请以以下三个角色的视角分析这段代码:

【架构师视角】
评估:整体设计是否合理?有无扩展性问题?

【安全专家视角】
评估:是否存在安全漏洞?如何防护?

【性能工程师视角】
评估:有无性能瓶颈?如何优化?

请依次输出三个角色的分析,最后给出综合建议。

模式二:思维链(Chain of Thought, CoT)

思维链是引导模型显式展示推理过程的技术,能显著提升复杂问题的解决质量。

标准 CoT 模板:

请按以下步骤分析问题,在每一步输出你的思考过程:

步骤 1:理解问题
- 问题的核心是什么?
- 有哪些已知条件?
- 有哪些约束限制?

步骤 2:拆解子问题
- 这个问题可以分解为哪些子问题?
- 子问题之间的依赖关系是什么?

步骤 3:逐一解决
- 解决每个子问题
- 记录关键决策和理由

步骤 4:整合方案
- 将子问题的解决方案整合
- 检查是否满足所有约束

步骤 5:验证与优化
- 方案是否正确?
- 有无优化空间?

零样本 CoT(Zero-shot CoT):

最简单但有效的 CoT 触发方式:

请分析以下代码的性能问题。

[代码块]

让我们一步步思考(Let's think step by step)。

自一致性 CoT(Self-Consistency CoT):

让模型从多个角度分析,取共识结论:

请从以下三个角度分析这个设计方案:

角度 A:时间复杂度优先
角度 B:空间复杂度优先  
角度 C:代码可维护性优先

分别给出每个角度的推荐方案,最后说明哪种方案最适合当前场景及理由。

模式三:Few-shot 学习

通过提供示例,让模型学习你期望的输出模式。

Few-shot 代码生成模板:

请按照以下示例风格生成 Vue 组件。

### 示例 1
输入:用户头像组件
输出:
```vue
<script setup lang="ts">
/**
 * 用户头像组件
 * @description 显示用户头像,支持多种尺寸和占位图
 */
interface Props {
  /** 图片地址 */
  src: string
  /** 尺寸 */
  size?: 'sm' | 'md' | 'lg'
  /** 加载失败时的占位图 */
  fallback?: string
}

const props = withDefaults(defineProps<Props>(), {
  size: 'md',
  fallback: '/default-avatar.png'
})

const sizeMap = {
  sm: 'w-8 h-8',
  md: 'w-12 h-12',
  lg: 'w-16 h-16'
} as const

const sizeClass = computed(() => sizeMap[props.size])
</script>

<template>
  <img
    :src="src"
    :class="['rounded-full object-cover', sizeClass]"
    :alt="'用户头像'"
    @error="$event.target.src = fallback"
  />
</template>

示例 2

输入:加载按钮组件 输出:

<script setup lang="ts">
/**
 * 加载按钮组件
 * @description 带加载状态的按钮,加载时禁用点击
 */
interface Props {
  /** 是否加载中 */
  loading?: boolean
  /** 按钮类型 */
  variant?: 'primary' | 'secondary' | 'outline'
  /** 是否禁用 */
  disabled?: boolean
}

const props = withDefaults(defineProps<Props>(), {
  loading: false,
  variant: 'primary',
  disabled: false
})

const emit = defineEmits<{
  click: [event: MouseEvent]
}>()

const isDisabled = computed(() => props.disabled || props.loading)
</script>

<template>
  <button
    :disabled="isDisabled"
    :class="['btn', `btn-${variant}`, { 'opacity-50': isDisabled }]"
    @click="emit('click', $event)"
  >
    <span v-if="loading" class="loading-spinner mr-2" />
    <slot />
  </button>
</template>

你的任务

输入:通知徽章组件 输出:


**Few-shot 最佳实践:**

| 原则 | 说明 |
|------|------|
| 示例数量 | 2-5 个为宜,过多会占用上下文 |
| 多样性 | 示例应覆盖不同场景 |
| 一致性 | 所有示例遵循相同风格 |
| 边界情况 | 至少包含一个边界情况示例 |

### 模式四:结构化输出(Structured Output)

当需要 JSON、表格等结构化输出时,明确指定格式至关重要。

**JSON 输出模板:**

```markdown
请分析以下代码,以 JSON 格式输出分析结果。

[代码块]

输出格式要求:
```json
{
  "summary": "一句话总结",
  "issues": [
    {
      "type": "bug|performance|style|security",
      "severity": "high|medium|low",
      "line": 10,
      "description": "问题描述",
      "suggestion": "修复建议"
    }
  ],
  "score": {
    "readability": 8,
    "performance": 7,
    "maintainability": 6
  },
  "recommendations": ["建议1", "建议2"]
}

注意:

  1. 输出必须是合法的 JSON 格式
  2. 不要在 JSON 外添加任何说明文字
  3. 数组为空时使用 ,不要省略字段

**表格输出模板:**

```markdown
请对比以下三个状态管理库,以 Markdown 表格格式输出。

对比维度:
- 学习曲线
- Bundle 大小
- TypeScript 支持
- 开发者体验
- 生态系统

对比对象:Pinia、Zustand、Jotai

输出格式:
| 特性 | Pinia | Zustand | Jotai |
|------|-------|---------|-------|
| ... | ... | ... | ... |

模式五:约束编程(Constraint Programming)

通过明确的约束条件,精确控制输出范围。

约束清单模板:

请实现一个日期选择器组件,需满足以下约束:

## 必须满足的约束(MUST)
- [ ] 使用 Vue 3 Composition API
- [ ] 使用 TypeScript 严格模式
- [ ] 支持日期范围选择
- [ ] 禁止选择过去的日期

## 应该满足的约束(SHOULD)
- [ ] 支持键盘导航
- [ ] 支持国际化
- [ ] 响应式布局

## 不得包含的约束(MUST NOT)
- [ ] 不使用 moment.js(使用 dayjs 或 date-fns)
- [ ] 不使用 any 类型
- [ ] 不使用内联样式

## 可选约束(MAY)
- [ ] 支持周起始日配置
- [ ] 支持农历显示

模式六:迭代优化(Iterative Refinement)

复杂任务通常需要多轮迭代,每轮聚焦一个方面。

迭代工作流模板:

# 第一轮:生成基础版本

请实现一个表单验证函数,支持以下规则:
- required:必填
- minLength/maxLength:长度限制
- pattern:正则匹配
- custom:自定义验证函数

---

# 第二轮:类型优化(基于第一轮输出)

请优化上述代码的 TypeScript 类型定义:
1. 使用泛型提升类型推断
2. 添加完整的 JSDoc 注释
3. 导出所有公共类型

---

# 第三轮:错误处理优化

请增强错误处理能力:
1. 自定义错误类
2. 错误信息国际化支持
3. 支持异步验证

---

# 第四轮:性能优化

请优化性能:
1. 添加验证结果缓存
2. 支持防抖验证
3. 大表单的分组验证

第三部分:领域特定提示词策略

3.1 代码审查提示词

请审查以下代码,从以下维度评估:

## 代码
[代码块]

## 审查维度

### 1. 正确性(权重 40%)
- 逻辑是否正确
- 边界条件处理
- 错误处理完整性

### 2. 可维护性(权重 25%)
- 命名规范
- 函数单一职责
- 模块化程度

### 3. 性能(权重 20%)
- 时间复杂度
- 内存使用
- 不必要的计算

### 4. 安全性(权重 15%)
- 输入验证
- XSS/CSRF 防护
- 敏感信息处理

## 输出要求
1. 每个维度给出 1-10 分评分
2. 列出具体问题及修复建议
3. 计算加权总分
4. 给出优先修复的 Top 3 问题

3.2 重构提示词

请将以下遗留代码重构为现代 TypeScript:

## 原始代码
[代码块]

## 重构目标
1. **现代化**:ES2022+ 语法
2. **类型安全**:完整的 TypeScript 类型
3. **可测试**:便于单元测试
4. **可维护**:清晰的模块结构

## 重构约束
- 保持 API 向后兼容
- 不改变函数签名(除非有明确说明)
- 不引入新的外部依赖

## 输出内容
1. 重构后的代码
2. 变更说明(改了什么、为什么改)
3. 迁移指南(如有 breaking changes)
4. 单元测试用例

3.3 测试生成提示词

请为以下函数生成单元测试:

## 被测代码
[函数代码]

## 测试框架
Vitest + @testing-library/vue

## 测试要求

### 覆盖场景
- [ ] 正常输入
- [ ] 边界值
- [ ] 异常输入
- [ ] 异步场景(如适用)

### 测试风格
- 使用 describe/it 组织
- 测试名称采用 "should [expected behavior] when [condition]" 格式
- 每个测试只验证一个行为

### 输出格式
```typescript
import { describe, it, expect, vi } from 'vitest'
import { functionName } from './module'

describe('functionName', () => {
  describe('正常场景', () => {
    it('should [behavior] when [condition]', () => {
      // Arrange
      // Act
      // Assert
    })
  })

  describe('边界场景', () => {
    // ...
  })

  describe('异常场景', () => {
    // ...
  })
})

## 第四部分:提示词工程工作流

### 4.1 提示词版本控制

```typescript
// prompts/code-review.ts
export const codeReviewPrompt = {
  version: '2.1.0',
  lastUpdated: '2026-01-15',
  
  // 模板定义
  template: `
    你是一位资深代码审查专家...
    
    ## 审查代码
    {{code}}
    
    ## 审查重点
    {{focus_areas}}
    
    ## 输出格式
    {{output_format}}
  `,
  
  // 变量定义
  variables: {
    code: { type: 'string', required: true },
    focus_areas: { type: 'array', default: ['correctness', 'performance'] },
    output_format: { type: 'string', default: 'markdown' }
  },
  
  // 使用示例
  examples: [
    {
      input: { code: '...', focus_areas: ['security'] },
      output: '...'
    }
  ],
  
  // 变更记录
  changelog: [
    { version: '2.1.0', date: '2026-01-15', changes: '添加安全维度' },
    { version: '2.0.0', date: '2026-01-01', changes: '重构输出格式' }
  ]
};

// 渲染函数
export function renderPrompt(
  template: string, 
  variables: Record<string, unknown>
): string {
  return template.replace(
    /\{\{(\w+)\}\}/g, 
    (_, key) => String(variables[key] ?? '')
  );
}

4.2 提示词测试

// prompts/__tests__/code-review.test.ts
import { describe, it, expect } from 'vitest'
import { codeReviewPrompt, renderPrompt } from '../code-review'

describe('Code Review Prompt', () => {
  it('should render all required variables', () => {
    const rendered = renderPrompt(codeReviewPrompt.template, {
      code: 'const x = 1',
      focus_areas: ['performance'],
      output_format: 'json'
    });
    
    expect(rendered).toContain('const x = 1');
    expect(rendered).toContain('performance');
    expect(rendered).not.toContain('{{');
  });

  it('should use default values for optional variables', () => {
    const rendered = renderPrompt(codeReviewPrompt.template, {
      code: 'const x = 1'
    });
    
    expect(rendered).toContain('correctness');
    expect(rendered).toContain('markdown');
  });
});

4.3 提示词优化循环

┌─────────────────────────────────────────────────┐
│                 提示词优化循环                    │
├─────────────────────────────────────────────────┤
│                                                 │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐   │
│   │  编写   │───▶│  测试   │───▶│  评估   │   │
│   └─────────┘    └─────────┘    └─────────┘   │
│        ▲                              │        │
│        │                              ▼        │
│   ┌─────────┐                   ┌─────────┐   │
│   │  优化   │◀──────────────────│  分析   │   │
│   └─────────┘                   └─────────┘   │
│                                                 │
└─────────────────────────────────────────────────┘

评估指标:
- 输出准确率
- Token 效率
- 响应稳定性
- 边界处理能力

总结

提示词工程不是"玄学",而是可以系统学习和持续优化的工程实践。

关键要点回顾

  • 理解 LLM 原理:Token、注意力、Temperature
  • 掌握六大模式:角色扮演、思维链、Few-shot、结构化输出、约束编程、迭代优化
  • 领域特定策略:代码审查、重构、测试生成
  • 工程化管理:版本控制、自动测试、持续优化

立即行动

  1. 从本文提供的模板开始,建立你的提示词库
  2. 为常用场景定制专属提示词
  3. 建立评估机制,持续迭代优化
  4. 分享和复用团队的最佳实践

相关资源