《60天AI学习计划启动 | Day 06: 提示工程基础 - 让 AI 更懂你的需求》

Day 06: 提示工程基础 - 让 AI 更懂你的需求

学习目标


核心学习内容

1. 提示工程基础

什么是提示工程?

  • 设计有效的输入提示,让 AI 产生期望输出
  • 核心:清晰、具体、有上下文
  • 好的 Prompt = 好的结果

Prompt 组成:

系统提示词(System Prompt)
  ↓
用户提示词(User Prompt)
  ↓
上下文(Context)
  ↓
示例(Examples)

2. Prompt 设计原则

5 大原则:

  1. 清晰明确:避免歧义,具体描述需求
  2. 提供上下文:给出背景信息
  3. 结构化输出:指定格式要求
  4. 分步骤思考:复杂任务拆解
  5. 示例引导:Few-shot Learning

对比示例:

// ❌ 不好的 Prompt
"写代码"

// ✅ 好的 Prompt
"用 JavaScript 写一个防抖函数,要求:
1. 函数名为 debounce
2. 接受两个参数:fn(函数)和 delay(延迟时间)
3. 返回防抖后的函数
4. 包含详细注释"

3. 系统提示词设计

作用:

  • 定义 AI 的角色和行为
  • 设置回答风格和格式
  • 提供领域知识背景

设计模板:

const systemPrompt = `你是一个专业的前端开发助手。

你的职责:
1. 回答前端技术问题
2. 提供代码示例和最佳实践
3. 解释技术原理

回答要求:
- 使用简洁明了的语言
- 提供可运行的代码示例
- 解释关键概念
- 给出实际应用场景

回答格式:
1. 简要回答
2. 代码示例
3. 说明和注意事项`;

4. Few-shot Learning(少样本学习)

概念:

  • 通过示例引导 AI 理解任务
  • 提供输入-输出对,让 AI 学习模式
  • 适合格式转换、分类等任务

示例:

const fewShotPrompt = `将以下日期转换为中文格式:

示例1:
输入:2024-01-15
输出:2024年1月15日

示例2:
输入:2023-12-25
输出:2023年12月25日

现在转换:
输入:2024-03-20
输出:`;

实践作业

作业1:设计不同场景的系统提示词

场景1:代码审查助手

const codeReviewPrompt = `你是一个专业的代码审查助手。

你的任务:
1. 审查代码质量
2. 发现潜在问题
3. 提供改进建议

审查维度:
- 代码规范
- 性能优化
- 安全性
- 可维护性

输出格式:
1. 问题列表(按严重程度)
2. 具体建议
3. 优化后的代码示例`;

场景2:技术文档生成器

const docGeneratorPrompt = `你是一个技术文档编写专家。

你的任务:
根据代码生成清晰的技术文档。

文档要求:
- 结构清晰(概述、参数、返回值、示例)
- 语言简洁专业
- 包含实际使用示例
- 标注注意事项

输出格式:Markdown`;

场景3:数据分析助手

const dataAnalysisPrompt = `你是一个数据分析专家。

你的任务:
分析数据并提供洞察。

分析要求:
1. 数据概览(总数、平均值等)
2. 趋势分析
3. 异常检测
4. 建议和结论

输出格式:
- 使用表格展示数据
- 用图表描述趋势
- 结论清晰明确`;

作业2:实现 Few-shot Learning

src/services/prompt-engineering.js:

/**
 * Few-shot Learning 示例生成
 */
export function createFewShotPrompt(examples, newInput) {
  let prompt = '根据以下示例,完成相同格式的转换:\n\n';
  
  examples.forEach((example, index) => {
    prompt += `示例${index + 1}:\n`;
    prompt += `输入:${example.input}\n`;
    prompt += `输出:${example.output}\n\n`;
  });
  
  prompt += `现在转换:\n`;
  prompt += `输入:${newInput}\n`;
  prompt += `输出:`;
  
  return prompt;
}

/**
 * 代码审查提示词生成
 */
export function createCodeReviewPrompt(code, language = 'javascript') {
  return `你是一个专业的${language}代码审查专家。

请审查以下代码,并提供:
1. 代码质量问题
2. 性能优化建议
3. 安全性问题
4. 改进后的代码

代码:
\`\`\`${language}
${code}
\`\`\`

请按以下格式输出:
## 问题列表
1. [问题描述] - [严重程度]
2. ...

## 优化建议
[具体建议]

## 优化后的代码
\`\`\`${language}
[代码]
\`\`\``;
}

/**
 * 技术文档生成提示词
 */
export function createDocPrompt(functionCode, language = 'javascript') {
  return `根据以下代码生成技术文档:

代码:
\`\`\`${language}
${functionCode}
\`\`\`

文档要求:
1. 函数概述
2. 参数说明(类型、说明、是否必填)
3. 返回值说明
4. 使用示例
5. 注意事项

输出格式:Markdown`;
}

作业3:优化聊天机器人的提示词

src/services/openai.js(优化版):

import OpenAI from 'openai';
import { logger } from '../utils/logger.js';

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

/**
 * 获取系统提示词
 */
function getSystemPrompt(role = 'assistant') {
  const prompts = {
    assistant: `你是一个友好的AI助手,擅长回答各种问题。

回答原则:
1. 回答要准确、有帮助
2. 如果不确定,诚实说明
3. 使用简洁明了的语言
4. 提供具体示例(如适用)

回答格式:
- 直接回答问题
- 必要时提供代码示例
- 使用 Markdown 格式化`,

    frontend: `你是一个专业的前端开发助手。

你的专长:
- Vue、React、Angular 等框架
- JavaScript/TypeScript
- CSS/SCSS
- 前端工程化
- 性能优化

回答要求:
1. 提供可运行的代码示例
2. 解释技术原理
3. 给出最佳实践
4. 标注浏览器兼容性`,

    codeReview: `你是一个代码审查专家。

审查维度:
- 代码规范
- 性能优化
- 安全性
- 可维护性
- 可读性

输出格式:
1. 问题列表(按优先级)
2. 具体建议
3. 优化后的代码`
  };

  return prompts[role] || prompts.assistant;
}

/**
 * 优化后的聊天函数
 */
export async function chatWithAI(
  message, 
  conversationHistory = [],
  options = {}
) {
  const {
    role = 'assistant',
    temperature = 0.7,
    maxTokens = 2000
  } = options;

  try {
    const systemPrompt = getSystemPrompt(role);
    
    const messages = [
      { role: 'system', content: systemPrompt },
      ...conversationHistory,
      { role: 'user', content: message }
    ];

    const completion = await openai.chat.completions.create({
      model: process.env.OPENAI_MODEL || 'gpt-3.5-turbo',
      messages: messages,
      temperature: temperature,
      max_tokens: maxTokens
    });

    return {
      content: completion.choices[0].message.content,
      usage: completion.usage
    };
  } catch (error) {
    logger.error('OpenAI API 调用失败:', error);
    throw error;
  }
}

作业4:实现 Prompt 模板系统

src/utils/prompt-templates.js:

/**
 * Prompt 模板系统
 */
export const promptTemplates = {
  // 代码生成模板
  codeGeneration: (language, description, requirements) => {
    return `用${language}编写代码,要求如下:

功能描述:
${description}

具体要求:
${requirements.map((req, i) => `${i + 1}. ${req}`).join('\n')}

输出要求:
1. 完整的代码
2. 详细注释
3. 使用说明`;
  },

  // 代码解释模板
  codeExplanation: (code, language) => {
    return `请解释以下${language}代码的功能和原理:

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

请说明:
1. 代码功能
2. 关键逻辑
3. 技术要点
4. 应用场景`;
  },

  // 错误修复模板
  bugFix: (error, code, language) => {
    return `以下${language}代码出现错误,请帮助修复:

错误信息:
${error}

代码:
\`\`\`${language}
${code}
\`\`\`

请提供:
1. 错误原因分析
2. 修复方案
3. 修复后的代码`;
  },

  // 代码重构模板
  codeRefactor: (code, language, goal) => {
    return `请重构以下${language}代码,目标:${goal}

代码:
\`\`\`${language}
${code}
\`\`\`

重构要求:
1. 保持功能不变
2. 提升代码质量
3. 优化性能
4. 增强可读性

请提供重构后的代码和说明`;
  },

  // 测试用例生成模板
  testGeneration: (code, language, framework) => {
    return `为以下${language}代码生成${framework}测试用例:

代码:
\`\`\`${language}
${code}
\`\`\`

测试要求:
1. 覆盖主要功能
2. 包含边界情况
3. 测试用例清晰
4. 使用${framework}框架`;
  }
};

/**
 * 使用模板生成 Prompt
 */
export function generatePrompt(templateName, params) {
  const template = promptTemplates[templateName];
  if (!template) {
    throw new Error(`模板 ${templateName} 不存在`);
  }
  return template(...Object.values(params));
}

作业5:测试不同 Prompt 效果

test-prompts.js:

import { chatWithAI } from './src/services/openai.js';

// 测试1:基础 Prompt
async function testBasicPrompt() {
  const response = await chatWithAI('什么是防抖?');
  console.log('基础 Prompt:', response.content);
}

// 测试2:优化后的 Prompt
async function testOptimizedPrompt() {
  const response = await chatWithAI(
    `请详细解释防抖(debounce)的概念,要求:
1. 解释原理
2. 提供代码示例
3. 说明应用场景
4. 对比节流(throttle)的区别`,
    [],
    { role: 'frontend' }
  );
  console.log('优化 Prompt:', response.content);
}

// 测试3:Few-shot Learning
async function testFewShot() {
  const prompt = `将以下日期转换为中文格式:

示例1:
输入:2024-01-15
输出:2024年1月15日

示例2:
输入:2023-12-25
输出:2023年12月25日

现在转换:
输入:2024-03-20
输出:`;

  const response = await chatWithAI(prompt);
  console.log('Few-shot 结果:', response.content);
}

// 运行测试
async function runTests() {
  console.log('=== 测试基础 Prompt ===');
  await testBasicPrompt();
  
  console.log('\n=== 测试优化 Prompt ===');
  await testOptimizedPrompt();
  
  console.log('\n=== 测试 Few-shot ===');
  await testFewShot();
}

runTests();

遇到的问题

问题1:Prompt 太长导致 Token 超限

解决方案:

// 压缩 Prompt,保留关键信息
function compressPrompt(prompt) {
  // 移除多余空格
  // 简化描述
  // 保留核心要求
  return prompt.replace(/\s+/g, ' ').trim();
}

问题2:AI 不按格式输出

解决方案:

// 在 Prompt 中明确格式要求
const formatPrompt = `请按以下 JSON 格式输出:
{
  "answer": "回答内容",
  "code": "代码示例",
  "explanation": "说明"
}

严格按照格式,不要添加其他内容。`;

问题3:Few-shot 示例不够有效

解决方案:

// 选择有代表性的示例
// 示例要覆盖不同情况
// 示例要清晰明确
const goodExamples = [
  { input: '简单情况', output: '简单输出' },
  { input: '复杂情况', output: '复杂输出' },
  { input: '边界情况', output: '边界输出' }
];

学习总结

今日收获

  1. ✅ 理解提示工程核心概念
  2. ✅ 掌握 Few-shot Learning
  3. ✅ 学会设计系统提示词
  4. ✅ 掌握 Prompt 优化技巧
  5. ✅ 实践不同场景的提示词

关键知识点

  • 清晰的 Prompt = 好的结果,描述要具体明确
  • 系统提示词很重要,定义 AI 角色和行为
  • Few-shot Learning,通过示例引导 AI
  • 结构化输出,指定格式要求
  • 分步骤思考,复杂任务要拆解

Prompt 设计技巧

  1. 使用角色定义:让 AI 扮演特定角色
  2. 提供上下文:给出背景信息
  3. 明确输出格式:指定 JSON、Markdown 等
  4. 分步骤执行:复杂任务拆解
  5. 示例引导:Few-shot Learning

实际应用

  • ✅ 代码生成:明确需求,提供示例
  • ✅ 代码审查:定义审查维度
  • ✅ 文档生成:指定格式要求
  • ✅ 数据分析:结构化输出

Prompt 优化检查清单


明日计划

明天将学习:

期待明天的学习! 🚀


参考资源


代码仓库

项目已更新:

  • ✅ 提示工程工具函数
  • ✅ Prompt 模板系统
  • ✅ 优化后的聊天服务
  • ✅ 测试示例

GitHub 提交: Day 06 - 提示工程基础


标签: #AI学习 #提示工程 #Prompt #Few-shot #学习笔记


写在最后

今天学习了提示工程的基础知识,这是 AI 应用开发的核心技能。
好的 Prompt 能让 AI 回答更精准、更有用。明天将学习 Function Calling,
让 AI 能够调用外部工具,功能更强大!

继续加油! 💪


快速检查清单

完成这些,第六天就达标了!

posted @ 2025-12-16 14:54  XiaoZhengTou  阅读(2)  评论(0)    收藏  举报