《60天AI学习计划启动 | Day 06: 提示工程基础 - 让 AI 更懂你的需求》
Day 06: 提示工程基础 - 让 AI 更懂你的需求
学习目标
核心学习内容
1. 提示工程基础
什么是提示工程?
- 设计有效的输入提示,让 AI 产生期望输出
- 核心:清晰、具体、有上下文
- 好的 Prompt = 好的结果
Prompt 组成:
系统提示词(System Prompt)
↓
用户提示词(User Prompt)
↓
上下文(Context)
↓
示例(Examples)
2. Prompt 设计原则
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: '边界输出' }
];
学习总结
今日收获
- ✅ 理解提示工程核心概念
- ✅ 掌握 Few-shot Learning
- ✅ 学会设计系统提示词
- ✅ 掌握 Prompt 优化技巧
- ✅ 实践不同场景的提示词
关键知识点
- 清晰的 Prompt = 好的结果,描述要具体明确
- 系统提示词很重要,定义 AI 角色和行为
- Few-shot Learning,通过示例引导 AI
- 结构化输出,指定格式要求
- 分步骤思考,复杂任务要拆解
Prompt 设计技巧
- 使用角色定义:让 AI 扮演特定角色
- 提供上下文:给出背景信息
- 明确输出格式:指定 JSON、Markdown 等
- 分步骤执行:复杂任务拆解
- 示例引导:Few-shot Learning
实际应用
- ✅ 代码生成:明确需求,提供示例
- ✅ 代码审查:定义审查维度
- ✅ 文档生成:指定格式要求
- ✅ 数据分析:结构化输出
Prompt 优化检查清单
明日计划
明天将学习:
期待明天的学习! 🚀
参考资源
代码仓库
项目已更新:
- ✅ 提示工程工具函数
- ✅ Prompt 模板系统
- ✅ 优化后的聊天服务
- ✅ 测试示例
GitHub 提交: Day 06 - 提示工程基础
标签: #AI学习 #提示工程 #Prompt #Few-shot #学习笔记
写在最后
今天学习了提示工程的基础知识,这是 AI 应用开发的核心技能。
好的 Prompt 能让 AI 回答更精准、更有用。明天将学习 Function Calling,
让 AI 能够调用外部工具,功能更强大!
继续加油! 💪
快速检查清单
完成这些,第六天就达标了! ✅

浙公网安备 33010602011771号