别再瞎写 Prompt 了!LLM 调用与提示工程实战指南,让 AI 真的听懂你说话

4 阅读10分钟

别再瞎写 Prompt 了!LLM 调用与提示工程实战指南,让 AI 真的听懂你说话

从「AI 听不懂人话」到「精准控制输出」,这篇文带你掌握 LLM 调用的核心技巧,附 10+ 个实战 Prompt 模板

🎯 前言:为什么你的 AI 总是「答非所问」?

你是不是也遇到过这些场景:

场景 1:写代码

你:帮我写一个登录功能
AI:[返回了一堆 HTML/CSS/JS 代码,但没有后端,没有验证,没有错误处理]
你:...这不是我想要的

场景 2:写文章

你:帮我写一篇关于 Vue 3 的文章
AI:[返回了 500 字的泛泛而谈,没有深度,没有实战]
你:...太水了

场景 3:数据分析

你:帮我分析这个数据
AI:[返回了一些通用的分析,没有针对性]
你:...这谁不会?

问题出在哪?

不是你不够聪明,也不是 AI 不够智能,而是你没有掌握「提示工程」(Prompt Engineering)

提示工程是什么?

简单说:和 AI 沟通的「艺术」和「科学」

就像你教新员工,你说得越清楚,他做得越好。AI 也一样!


📚 一、LLM 调用基础(10 分钟速成)

1. 什么是 LLM?

LLM(Large Language Model)= 大语言模型

常见的有:

  • 🤖 OpenAI: GPT-3.5, GPT-4
  • 🦙 Meta: Llama 2/3
  • 🐘 Google: Gemini
  • 🦜 Anthropic: Claude
  • 🇨🇳 国内:通义千问、文心一言、混元等

2. 如何调用 LLM?

方式一:直接调用 API(推荐)
// 使用 OpenAI SDK
import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

const response = await openai.chat.completions.create({
  model: 'gpt-4',
  messages: [
    { role: 'system', content: '你是一名专业的 Vue 开发工程师' },
    { role: 'user', content: '帮我写一个组件' }
  ],
  temperature: 0.7
});

console.log(response.choices[0].message.content);
方式二:使用 LangChain(更灵活)
import { ChatOpenAI } from '@langchain/openai';
import { PromptTemplate } from 'langchain/prompts';

const llm = new ChatOpenAI({
  temperature: 0.7,
  model: 'gpt-4'
});

const prompt = PromptTemplate.fromTemplate(
  '你是一名{role},请{task}'
);

const chain = prompt.pipe(llm);

const response = await chain.invoke({
  role: 'Vue 开发工程师',
  task: '写一个响应式组件'
});

console.log(response.content);
方式三:使用前端库(适合快速原型)
// 使用 openai 库
import { OpenAI } from 'openai';

async function chatWithAI(message) {
  const openai = new OpenAI({ apiKey: 'sk-xxx' });
  
  const completion = await openai.chat.completions.create({
    messages: [
      { role: 'system', content: '你是一个有帮助的助手' },
      { role: 'user', content: message }
    ],
    model: 'gpt-4',
  });
  
  return completion.choices[0].message.content;
}

3. 核心参数详解

参数说明推荐值作用
model模型版本gpt-4 / gpt-3.5-turbo决定智能程度
temperature随机性0.0-0.3 (精确) / 0.7-1.0 (创意)控制输出多样性
max_tokens最大输出长度256-2000控制回复长度
top_p核采样0.9另一种随机性控制
frequency_penalty频率惩罚0.0-2.0减少重复
presence_penalty存在惩罚0.0-2.0鼓励新话题

Temperature 实战对比:

// temperature = 0.0 (确定性最高)
// 每次输出几乎一样,适合代码生成、数据分析

// temperature = 0.7 (平衡)
// 适合大多数场景,有一定创造性但不离谱

// temperature = 1.0 (最随机)
// 每次输出差异大,适合创意写作、头脑风暴

🎨 二、提示工程核心技巧(20 分钟精通)

技巧 1:角色设定(Role Prompting)

❌ 错误示范:

帮我写一个 Vue 组件

✅ 正确示范:

你是一名有 5 年经验的高级 Vue 开发工程师,擅长编写高性能、可复用的组件。
请帮我写一个响应式表格组件,要求:
- 使用 Vue 3 Composition API
- 支持虚拟滚动
- 包含排序、筛选功能
- 代码要有详细注释

效果对比:

  • 错误示范:返回基础代码,无注释,功能不全
  • 正确示范:返回专业代码,有注释,功能完整

技巧 2:Few-Shot Learning(少样本学习)

给 AI 提供示例,让它学习模式:

const prompt = `
你是一个数据格式化专家。

示例 1:
输入:{"name": "张三", "age": 25, "city": "北京"}
输出:张三,25 岁,居住在北京

示例 2:
输入:{"name": "李四", "age": 30, "city": "上海"}
输出:李四,30 岁,居住在上海

现在请格式化:
输入:{"name": "王五", "age": 28, "city": "广州"}
输出:
`;

适用场景:

  • 数据转换
  • 格式标准化
  • 模式识别

技巧 3:思维链(Chain of Thought)

让 AI 展示思考过程:

const prompt = `
请逐步分析这个问题:

问题:如何优化一个加载 10000 条数据的列表?

请按照以下步骤思考:
1. 分析性能瓶颈
2. 列出可能的优化方案
3. 评估每个方案的优缺点
4. 给出最终推荐方案

开始分析:
`;

效果: AI 会输出详细的分析过程,而不是直接给答案

技巧 4:约束输出格式

❌ 错误示范:

帮我提取这些数据的名称

✅ 正确示范:

请从以下数据中提取名称,并以 JSON 数组格式返回:

数据:[...大量数据...]

输出格式要求:
```json
[  "名称 1",  "名称 2",  "名称 3"]

只返回 JSON,不要其他文字。


### 技巧 5:分步任务(Step-by-Step)

复杂任务拆分成小步骤:

```javascript
const prompt = `
请完成以下任务,每一步都要输出结果:

步骤 1:分析用户需求
步骤 2:设计组件结构
步骤 3:编写核心代码
步骤 4:添加错误处理
步骤 5:编写使用示例

现在开始步骤 1:
`;

技巧 6:负面约束(Negative Constraints)

明确告诉 AI 不要做什么

const prompt = `
请写一个登录组件。

要求:
✅ 使用 Vue 3 Composition API
✅ 包含表单验证
✅ 支持密码显示/隐藏

❌ 不要使用 class 组件
❌ 不要硬编码密码
❌ 不要省略错误处理
`;

技巧 7:上下文增强

提供充分的背景信息:

const prompt = `
项目背景:
- 这是一个电商后台管理系统
- 使用 Vue 3 + TypeScript + Element Plus
- 需要支持多租户
- 用户量预计 10 万+

任务:
请设计一个用户管理模块,包括:
1. 用户列表(支持分页、搜索、筛选)
2. 用户详情(展示用户信息、操作日志)
3. 权限管理(角色、权限分配)

技术栈:
- Vue 3 Composition API
- Pinia 状态管理
- Axios 网络请求
- Element Plus UI 组件

请给出完整的设计方案和核心代码。
`;

技巧 8:迭代优化

第一次不满意?让 AI 自己改进:

// 第一轮
const response1 = await callLLM('帮我写一个登录组件');

// 第二轮(基于第一轮结果优化)
const response2 = await callLLM(`
这是我之前的代码:${response1}

请优化:
1. 添加 TypeScript 类型定义
2. 改进错误处理
3. 添加单元测试示例
4. 优化性能
`);

技巧 9:系统提示词(System Prompt)

设置 AI 的「人设」:

const messages = [
  {
    role: 'system',
    content: `你是一名资深的前端架构师,有 10 年 Vue 开发经验。
你的特点:
- 代码简洁、优雅、可维护
- 注重性能优化
- 善于使用设计模式
- 会给出最佳实践建议

请始终用专业的态度回答问题。`
  },
  {
    role: 'user',
    content: '如何设计一个大型 Vue 项目?'
  }
];

技巧 10:元提示(Meta Prompting)

让 AI 帮你写 Prompt:

const prompt = `
我需要让 AI 帮我写一个 Vue 组件,请帮我写一个高质量的 Prompt。

要求:
- 明确角色
- 提供充分上下文
- 指定输出格式
- 包含约束条件

请输出这个 Prompt。
`;

🎮 三、实战 Prompt 模板库(10+ 个即用模板)

模板 1:代码生成

const codeGenerationPrompt = `
你是一名资深的前端工程师,擅长编写高质量、可维护的代码。

任务:{task}

技术栈:
- 框架:{framework}
- 语言:{language}
- UI 库:{uiLibrary}

要求:
1. 使用最新的技术规范
2. 代码要有详细注释
3. 包含错误处理
4. 遵循最佳实践
5. 提供使用示例

请输出完整代码。
`;

使用示例:

const prompt = codeGenerationPrompt
  .replace('{task}', '创建一个响应式表格组件')
  .replace('{framework}', 'Vue 3')
  .replace('{language}', 'TypeScript')
  .replace('{uiLibrary}', 'Element Plus');

模板 2:代码审查

const codeReviewPrompt = `
你是一名代码审查专家,请审查以下代码:

\`\`\`{code}\`\`\`

请从以下角度分析:
1. 代码质量(可读性、可维护性)
2. 性能问题
3. 安全性问题
4. 潜在 Bug
5. 改进建议

输出格式:
## 📊 代码审查报告

### ✅ 优点
- [列出优点]

### ⚠️ 问题
- [列出问题]

### 💡 改进建议
- [给出具体建议]

### 📝 优化后的代码
\`\`\`
[优化后的代码]
\`\`\`
`;

模板 3:技术文档生成

const docGenerationPrompt = `
请为以下代码生成技术文档:

\`\`\`{code}\`\`\`

文档要求:
1. 组件功能说明
2. Props 列表(类型、必填、默认值、说明)
3. Events 列表
4. Slots 说明
5. 使用示例
6. 最佳实践

输出格式:Markdown
`;

模板 4:Bug 调试

const debugPrompt = `
我遇到了一个 Bug,请帮我分析:

## 问题描述
{problem}

## 相关代码
\`\`\`{code}\`\`\`

## 错误信息
{error}

## 已尝试的解决方案
{attempts}

请:
1. 分析可能的原因
2. 给出调试步骤
3. 提供解决方案
4. 解释为什么会出现这个问题
`;

模板 5:技术方案设计

const architecturePrompt = `
我需要设计一个{systemType}系统。

## 需求
- {requirements}

## 约束条件
- {constraints}

## 技术栈偏好
- {techStack}

请给出:
1. 系统架构设计
2. 核心模块划分
3. 数据流设计
4. 关键技术选型及理由
5. 潜在风险及应对方案
6. 实施路线图

请用专业的技术文档格式输出。
`;

模板 6:学习路径规划

const learningPathPrompt = `
我想学习{topic},目前水平是{currentLevel}。

请为我制定一个学习路径:
1. 基础知识(必学)
2. 进阶技能(选学)
3. 实战项目(巩固)
4. 资源推荐(书籍、课程、文档)
5. 时间规划(预计学习时长)

要求:
- 循序渐进
- 理论与实践结合
- 包含实战项目
- 推荐优质资源
`;

模板 7:数据转换

const dataTransformationPrompt = `
请将以下数据从{inputFormat}格式转换为{outputFormat}格式:

输入数据:
\`\`\`{data}\`\`\`

转换规则:
{rules}

输出要求:
- 只返回转换后的数据
- 不要额外解释
- 保持数据完整性
`;

模板 8:性能优化建议

const performancePrompt = `
请分析以下代码的性能问题:

\`\`\`{code}\`\`\`

请从以下角度分析:
1. 渲染性能
2. 内存使用
3. 网络请求
4. 计算复杂度
5. 打包体积

给出具体优化建议和代码示例。
`;

模板 9:单元测试生成

const unitTestPrompt = `
请为以下代码编写单元测试:

\`\`\`{code}\`\`\`

测试框架:{testFramework}
要求:
1. 覆盖主要功能
2. 包含边界情况
3. 包含错误处理测试
4. 测试代码要有注释
5. 遵循测试最佳实践

请输出完整的测试代码。
`;

模板 10:API 设计

const apiDesignPrompt = `
请设计一个{apiType}的 RESTful API。

功能需求:
{features}

要求:
1. 符合 RESTful 规范
2. 包含请求/响应格式
3. 包含错误码定义
4. 包含认证/授权方案
5. 包含速率限制建议

输出格式:OpenAPI 3.0 规范
`;

🔧 四、实战项目:智能代码助手

让我们做一个**「智能代码助手」**,它能:

  • 📝 生成代码
  • 🔍 审查代码
  • 🐛 调试 Bug
  • 📚 生成文档

1. 项目结构

ai-code-assistant/
├── src/
│   ├── index.js          # 入口
│   ├── llm.js            # LLM 调用封装
│   ├── prompts.js        # Prompt 模板
│   └── utils.js          # 工具函数
├── .env
└── package.json

2. LLM 调用封装

// src/llm.js
import OpenAI from 'openai';

class LLMService {
  constructor() {
    this.openai = new OpenAI({
      apiKey: process.env.OPENAI_API_KEY
    });
  }

  async chat(messages, options = {}) {
    const response = await this.openai.chat.completions.create({
      model: options.model || 'gpt-4',
      messages,
      temperature: options.temperature ?? 0.7,
      max_tokens: options.maxTokens ?? 2000,
      top_p: options.topP ?? 0.9,
    });

    return response.choices[0].message.content;
  }

  async generateCode(prompt, techStack = {}) {
    const messages = [
      {
        role: 'system',
        content: `你是一名资深前端工程师,擅长编写高质量代码。
技术栈偏好:
- 框架:${techStack.framework || 'Vue 3'}
- 语言:${techStack.language || 'TypeScript'}
- UI 库:${techStack.uiLibrary || 'Element Plus'}

请遵循最佳实践,代码要有详细注释。`
      },
      { role: 'user', content: prompt }
    ];

    return this.chat(messages, { temperature: 0.3 }); // 代码生成需要低随机性
  }

  async reviewCode(code, context = '') {
    const messages = [
      {
        role: 'system',
        content: '你是一名代码审查专家,请从代码质量、性能、安全性等角度进行审查。'
      },
      {
        role: 'user',
        content: `请审查以下代码:\n\n\`\`\`\n${code}\n\`\`\`\n\n上下文:${context}`
      }
    ];

    return this.chat(messages, { temperature: 0.5 });
  }

  async debugBug(problem, code, error, attempts = '') {
    const messages = [
      {
        role: 'system',
        content: '你是一名调试专家,擅长定位和解决复杂 Bug。'
      },
      {
        role: 'user',
        content: `
问题描述:${problem}

相关代码:
\`\`\`
${code}
\`\`\`

错误信息:${error}

已尝试的解决方案:${attempts}

请分析原因并给出解决方案。
        `
      }
    ];

    return this.chat(messages, { temperature: 0.5 });
  }

  async generateDocs(code, type = 'component') {
    const messages = [
      {
        role: 'system',
        content: '你是一名技术文档专家,请为代码生成详细的技术文档。'
      },
      {
        role: 'user',
        content: `请为以下${type}生成技术文档:\n\n\`\`\`\n${code}\n\`\`\``
      }
    ];

    return this.chat(messages, { temperature: 0.3 });
  }
}

export default new LLMService();

3. Prompt 模板库

// src/prompts.js
export const PROMPTS = {
  // 代码生成
  CODE_GENERATION: (task, techStack) => `
你是一名资深前端工程师。

任务:${task}

技术栈:
- 框架:${techStack?.framework || 'Vue 3'}
- 语言:${techStack?.language || 'TypeScript'}
- UI 库:${techStack?.uiLibrary || 'Element Plus'}

要求:
1. 使用最新的技术规范
2. 代码要有详细注释
3. 包含错误处理
4. 遵循最佳实践
5. 提供使用示例

请输出完整代码。
  `,

  // 代码审查
  CODE_REVIEW: (code, context) => `
请审查以下代码:

\`\`\`
${code}
\`\`\`

上下文:${context}

请从以下角度分析:
1. 代码质量(可读性、可维护性)
2. 性能问题
3. 安全性问题
4. 潜在 Bug
5. 改进建议

输出格式:
## 📊 代码审查报告

### ✅ 优点
- [列出优点]

### ⚠️ 问题
- [列出问题]

### 💡 改进建议
- [给出具体建议]

### 📝 优化后的代码
\`\`\`
[优化后的代码]
\`\`\`
  `,

  // Bug 调试
  DEBUG_BUG: (problem, code, error, attempts) => `
我遇到了一个 Bug,请帮我分析:

## 问题描述
${problem}

## 相关代码
\`\`\`
${code}
\`\`\`

## 错误信息
${error}

## 已尝试的解决方案
${attempts}

请:
1. 分析可能的原因
2. 给出调试步骤
3. 提供解决方案
4. 解释为什么会出现这个问题
  `,

  // 文档生成
  GENERATE_DOCS: (code, type) => `
请为以下${type}生成技术文档:

\`\`\`
${code}
\`\`\`

文档要求:
1. 功能说明
2. API 文档(Props/Events/Slots)
3. 使用示例
4. 最佳实践
5. 注意事项

输出格式:Markdown
  `
};

export default PROMPTS;

4. 使用示例

// src/index.js
import llm from './llm.js';
import PROMPTS from './prompts.js';

// 生成代码
const code = await llm.generateCode(
  '创建一个响应式表格组件,支持排序、筛选、分页',
  { framework: 'Vue 3', language: 'TypeScript', uiLibrary: 'Element Plus' }
);

// 审查代码
const review = await llm.reviewCode(code, '这是一个电商后台管理系统');

// 调试 Bug
const debug = await llm.debugBug(
  '表格排序功能不工作',
  code,
  'TypeError: Cannot read property \'sort\' of undefined',
  '已经检查了数据类型,确认是数组'
);

// 生成文档
const docs = await llm.generateDocs(code, '组件');

console.log('生成的代码:', code);
console.log('代码审查:', review);
console.log('调试结果:', debug);
console.log('技术文档:', docs);

📊 五、提示工程最佳实践总结

1. 通用原则

原则说明示例
明确角色告诉 AI 它是谁"你是一名资深工程师"
提供上下文给足背景信息"这是一个电商系统"
具体任务说清楚要做什么"创建一个表格组件"
约束条件明确限制"使用 Vue 3 + TypeScript"
输出格式指定返回格式"输出 JSON 格式"
示例引导提供 Few-Shot"示例 1... 示例 2..."
分步执行复杂任务拆分"步骤 1... 步骤 2..."
迭代优化不满意就改进"请优化之前的代码"

2. 常见错误

❌ 错误 1:太模糊

帮我写代码

✅ 正确:

请用 Vue 3 + TypeScript 写一个响应式表格组件,支持排序、筛选、分页

❌ 错误 2:缺少上下文

优化这个性能

✅ 正确:

这是一个加载 10000 条数据的列表,目前首屏加载需要 5 秒,请优化性能

❌ 错误 3:没有约束

写一个登录功能

✅ 正确:

写一个登录功能,要求:
- 使用 Vue 3 Composition API
- 包含表单验证
- 支持密码显示/隐藏
- 包含错误处理
- 不要使用 class 组件

3. 进阶技巧

技巧 1:自反思(Self-Reflection)

const prompt = `
请完成以下任务:{task}

完成后,请自我审查:
1. 是否满足了所有要求?
2. 是否有遗漏?
3. 是否有改进空间?

如果有问题,请重新生成。
`;

技巧 2:多视角(Multiple Perspectives)

const prompt = `
请从以下角度分析这个问题:
1. 前端工程师视角
2. 后端工程师视角
3. 用户体验视角
4. 安全工程师视角

然后给出综合建议。
`;

技巧 3:对比分析(Comparison)

const prompt = `
请比较以下两种方案的优缺点:
方案 1:{solution1}
方案 2:{solution2}

从以下维度对比:
- 性能
- 可维护性
- 开发效率
- 学习成本

给出最终推荐。
`;

🎓 六、学习资源


✅ 总结

通过这篇文章,我们学会了:

  1. LLM 调用基础(API 调用、参数配置)
  2. 提示工程 10 大技巧(角色设定、Few-Shot、思维链等)
  3. 10+ 个实战 Prompt 模板(代码生成、审查、调试等)
  4. 完整项目实战(智能代码助手)
  5. 最佳实践与常见错误

提示工程不是「魔法」,而是「沟通的艺术」!

你越清楚自己想要什么,AI 就能给你越好的结果。


🚀 下一步

  1. 练习 10 个 Prompt 模板,熟练掌握
  2. 建立自己的 Prompt 库,复用优质模板
  3. 尝试不同模型,找到最适合的
  4. 学习高级技巧(Agent、工具调用等)
  5. 分享你的经验,帮助他人

现在,轮到你动手实践了!🎉


如果觉得这篇文章对你有帮助,欢迎点赞、收藏、评论!也欢迎关注我,获取更多 AI 开发实战经验。

参考资料


作者:一名热爱 AI 应用开发的前端工程师
本文代码已开源,欢迎 Star 和 Fork!