HarmonyOS NEXT AI 智能生活助手:Prompt 工程最佳实践
·
HarmonyOS NEXT AI 智能生活助手:Prompt 工程最佳实践

图1:Prompt 工程优化流程示意图
前言
在 [第 08 篇]中,我们实现了 Prompt 管理系统。本文将总结 Prompt 工程的最佳实践,帮助写出高质量的 AI Prompt。
Prompt Engineering 是 AI 应用开发的核心技能。一个好的 Prompt 能让模型输出质量提升数倍。本文将系统性地介绍 Prompt 设计原则、优化策略和常见陷阱。
一、Prompt 设计原则
1.1 六大核心原则
| 原则 | 说明 | 反面案例 | 改进后 |
|---|---|---|---|
| 具体明确 | 详细描述任务目标和约束 | “帮我翻译” | “将以下英文技术文档翻译为中文,保持专业术语准确” |
| 角色设定 | 给 AI 一个专业角色 | “总结这篇文章” | “你是一位资深科技编辑,请总结这篇文章的核心观点” |
| 格式指定 | 明确输出格式 | 不做约束 | “以Markdown格式输出,用 ### 分隔每个章节” |
| 示例引导 | 给出输入输出示例 | 不给示例 | “示例:输入’Hello’ → 输出’你好’” |
| 边界定义 | 说明不能做什么 | 不做限制 | “不要添加额外解释,只输出翻译结果” |
| 分步指导 | 复杂任务分解步骤 | 一步到位 | “第一步理解原文,第二步提取关键信息,第三步生成摘要” |
export class PromptBuilder {
static buildWithPrinciples(task: string, principles: string[]): string {
let prompt = `你是一个专业的AI助手。请完成以下任务:\n\n`;
prompt += `## 任务描述\n${task}\n\n`;
prompt += `## 执行原则\n`;
principles.forEach((p, i) => { prompt += `${i+1}. ${p}\n`; });
prompt += `\n## 输出要求\n`;
prompt += `- 准确:确保信息准确无误\n`;
prompt += `- 简洁:优先使用简短的语言\n`;
prompt += `- 结构化:使用Markdown格式组织内容\n`;
return prompt;
}
}
1.2 好 Prompt VS 坏 Prompt 对比
❌ 坏 Prompt:
"写一首诗"
✅ 好 Prompt:
"你是一位中国古典诗人。请以'秋雨'为主题创作一首五言绝句。
要求:
- 使用五言绝句格式(每句5字,共4句)
- 押平水韵下平十一尤韵
- 表达思念之情
- 不需要解释,只输出诗歌"
❌ 坏 Prompt:
"这段代码有什么问题?"
✅ 好 Prompt:
"你是一位资深 TypeScript 开发者。请审查以下代码:
function process(data: any) {
return data.value + 1;
}
请从以下维度分析:
1. 类型安全性
2. 边界情况
3. 性能问题
4. 重构建议
使用JSON格式输出。"
关键洞察:好 Prompt 的共性——明确角色、具体任务、约束条件、输出格式。这四个要素缺一不可。
二、高级 Prompt 技术
2.1 Chain-of-Thought (CoT)
export class CoTPromptBuilder {
// 构建思维链 Prompt
static buildWithCoT(task: string, steps: string[]): string {
return `请按以下步骤逐步思考并回答问题:
任务:${task}
思考步骤:
${steps.map((s, i) => `${i+1}. ${s}`).join('\n')}
请先展示你的思考过程,然后给出最终答案。`;
}
// 示例:数学问题
static mathProblem(): string {
return this.buildWithCoT('小明有5个苹果,小红给了小明3个,小明又给了小华2个,小明还剩几个?', [
'计算小明原本的苹果数量',
'加上小红给的苹果',
'减去给小华的苹果',
'得出最终数量'
]);
}
}
2.2 Few-shot Learning
export class FewShotBuilder {
static buildWithExamples(systemPrompt: string, examples: Example[], input: string): string {
let prompt = systemPrompt + '\n\n';
prompt += `## 示例\n\n`;
examples.forEach((ex, i) => {
prompt += `### 示例 ${i+1}\n`;
prompt += `**输入:** ${ex.input}\n`;
prompt += `**输出:** ${ex.output}\n\n`;
});
prompt += `## 实际输入\n${input}\n\n`;
prompt += `## 请输出:\n`;
return prompt;
}
}
interface Example {
input: string;
output: string;
}
| 技术 | 适用场景 | 效果提升 |
|---|---|---|
| Zero-shot | 简单任务 | 基线 |
| Few-shot | 格式控制 | +20-30% |
| Chain-of-Thought | 推理任务 | +30-50% |
| Role Prompting | 专业性任务 | +15-25% |
三、Prompt 优化策略
3.1 迭代优化流程
export class PromptOptimizer {
// 分析 Prompt 质量问题
static analyze(prompt: string): AnalysisResult {
const issues: string[] = [];
if (prompt.length < 50) issues.push('Prompt 太短,缺乏上下文');
if (!prompt.includes('输出') && !prompt.includes('格式')) issues.push('缺少输出格式说明');
if (prompt.includes('可能') || prompt.includes('大概')) issues.push('使用模糊词汇,应更明确');
if (prompt.split('\n').length < 5) issues.push('缺乏结构化,建议分段');
return {
score: Math.max(0, 100 - issues.length * 20),
issues,
suggestions: this.generateSuggestions(issues)
};
}
// 自动优化 Prompt
static optimize(prompt: string): string {
let optimized = prompt;
// 添加角色设定
if (!prompt.includes('你是一个') && !prompt.includes('你是')) {
optimized = `你是一位专业的AI助手。\n\n${optimized}`;
}
// 添加输出格式
if (!prompt.includes('JSON') && !prompt.includes('格式')) {
optimized += `\n\n请用结构化的格式输出。`;
}
return optimized;
}
private static generateSuggestions(issues: string[]): string[] {
return issues.map(issue => {
const suggestions: Record<string, string> = {
'Prompt 太短': '添加任务描述、角色设定和输出格式说明',
'缺少输出格式说明': '指定输出格式,如JSON/Markdown/表格',
'使用模糊词汇': '用明确具体的描述替换模糊词汇',
'缺乏结构化': '使用分段、标题、列表结构化Prompt'
};
return suggestions[issue] || '参考最佳实践优化';
});
}
}
interface AnalysisResult {
score: number;
issues: string[];
suggestions: string[];
}
3.2 常见 Prompt 模式
export const PROMPT_PATTERNS = {
// 分类任务
classification: `请将以下内容分类到合适的类别中。
类别列表:{{categories}}
分类规则:
- 每项内容只能分到一个类别
- 如果匹配多个,选择最相关的一个
- 如果无法分类,标记为"其他"
输出格式:JSON数组 [{ content: "...", category: "..." }]`,
// 提取任务
extraction: `请从以下文本中提取指定信息。
需要提取的信息:
{{fields}}
输出格式:JSON对象`,
// 比较任务
comparison: `请比较以下两个{{subject}}的异同。
比较维度:
{{dimensions}}
输出格式:表格形式,包含"维度"、"{{item1}}"、"{{item2}}"、"说明"四列`,
// 重写任务
rewriting: `请重写以下文本,使其更加{{style}}。
重写规则:
1. 保留原文核心信息
2. 使用{{tone}}的语气
3. 输出长度控制在{{maxLength}}字以内`
};
四、Prompt 评估体系
4.1 质量评分卡
| 评估维度 | 权重 | 评分标准 | 自检 |
|---|---|---|---|
| 清晰度 | 25% | 任务描述是否明确无歧义 | ✅ |
| 完整性 | 20% | 是否包含角色、输入、输出、约束 | ✅ |
| 结构化 | 20% | 是否有分段、标题、列表 | ✅ |
| 示例质量 | 15% | 示例是否准确反映预期输出 | ✅ |
| 边界定义 | 10% | 是否说明了不能做什么 | ✅ |
| 长度适中 | 10% | 是否简洁不冗余 | ✅ |
4.2 A/B 测试框架
export class PromptABTestManager {
private experiments: Map<string, ExperimentConfig> = new Map();
register(name: string, promptA: string, promptB: string): void {
this.experiments.set(name, {
name, promptA, promptB,
results: { a: { total: 0, success: 0 }, b: { total: 0, success: 0 } }
});
}
async evaluate(name: string, input: string, expectedOutput: string): Promise<void> {
const exp = this.experiments.get(name);
if (!exp) return;
// 测试 Prompt A
const resultA = await this.testPrompt(exp.promptA, input, expectedOutput);
exp.results.a.total++;
if (resultA) exp.results.a.success++;
// 测试 Prompt B
const resultB = await this.testPrompt(exp.promptB, input, expectedOutput);
exp.results.b.total++;
if (resultB) exp.results.b.success++;
// 输出对比
hilog.info(0x0000, 'ABTest', `Prompt A 成功率: ${exp.results.a.success}/${exp.results.a.total}`);
hilog.info(0x0000, 'ABTest', `Prompt B 成功率: ${exp.results.b.success}/${exp.results.b.total}`);
}
private async testPrompt(prompt: string, input: string, expected: string): Promise<boolean> {
try {
const response = await AIService.getInstance().chat([
{ role: 'system', content: prompt },
{ role: 'user', content: input }
]);
return response.content.includes(expected);
} catch {
return false;
}
}
}
interface ExperimentConfig {
name: string;
promptA: string;
promptB: string;
results: {
a: { total: number; success: number };
b: { total: number; success: number };
};
}
五、常见陷阱与规避
5.1 常见错误类型
- Prompt 注入攻击:用户输入中包含恶意指令,覆盖系统级 Prompt
- 上下文窗口溢出:历史消息过长,导致关键信息被挤出上下文
- 幻觉问题:AI 生成看似合理但实际不存在的信息
- 过度拟合示例:Few-shot 示例过少或质量差,导致输出格式不稳定
- 边界情况遗漏:未定义异常处理逻辑,AI 在边界情况下表现不稳定
5.2 安全与稳健性策略
export class PromptSecurity {
// 输入消毒:移除潜在的注入指令
static sanitizeInput(input: string): string {
return input
.replace(/system:|user:|assistant:/gi, '')
.replace(/\{\{.*?\}\}/g, '')
.slice(0, 2000); // 限制输入长度
}
// 上下文截断:保留最近且最相关的对话
static truncateHistory(messages: ChatMessage[], maxChars: number = 8000): ChatMessage[] {
let total = 0;
const result: ChatMessage[] = [];
for (let i = messages.length - 1; i >= 0; i--) {
total += messages[i].content.length;
if (total > maxChars) break;
result.unshift(messages[i]);
}
return result;
}
// 输出验证:检查关键信息是否存在
static validateOutput(output: string, requiredKeywords: string[]): boolean {
return requiredKeywords.every(kw => output.includes(kw));
}
}
interface ChatMessage {
role: string;
content: string;
}
| 陷阱 | 风险等级 | 检测方法 | 规避策略 |
|---|---|---|---|
| Prompt 注入 | 高 | 正则匹配关键字 | 输入消毒 + 权限隔离 |
| 上下文溢出 | 中 | 统计 Token 数 | 滑动窗口 + 摘要压缩 |
| 幻觉输出 | 中 | 事实核查 API | 添加"不确定则回答不知道"约束 |
| 格式失控 | 低 | JSON 解析验证 | Few-shot + 格式约束 |
安全优先:生产环境的 Prompt 必须经过注入测试和边界测试,确保输出可控。
六、Git 提交
git add .
git commit -m "feat(prompt): Prompt 工程最佳实践
- 六大核心设计原则
- Chain-of-Thought / Few-shot 高级技术
- 迭代优化流程与自动优化器
- A/B 测试评估框架
- 常见 Prompt 模式库
Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>"
git tag v0.1.8
七、Prompt 工程在 HarmonyOS AI 中的应用
7.1 本系列 Prompt 设计回顾
| 功能模块 | 核心 Prompt 技巧 | 预期效果 |
|---|---|---|
| AI 翻译助手 | 角色设定 + 格式指定 + 边界定义 | 术语准确、格式统一 |
| AI 每日花语 | 角色设定 + 示例引导 + 结构化输出 | 内容专业、格式规范 |
| AI 文章总结 | 分步指导 + 边界定义 + JSON 格式 | 结构清晰、信息完整 |
| AI 代码解释 | 角色设定 + 多维度约束 + 示例引导 | 分析深入、建议可行 |
| AI 待办生成 | 具体明确 + 结构化输出 + 分类规则 | 提取准确、分类合理 |
| AI 日程规划 | 具体明确 + 时间约束 + 冲突规则 | 时间准确、冲突可检测 |
| 图片上传识别 | 多模态输入 + 开放式描述 | 理解全面、描述生动 |
| 模型参数配置 | 场景预设 + 参数联动 | 切换便捷、效果可预期 |
7.2 持续优化建议
- 建立 Prompt 版本库:使用 Git 管理 Prompt 变更,记录每次调整的原因和效果
- 收集用户反馈:对输出质量进行评分,识别低分场景并针对性优化
- 定期 A/B 测试:同一功能维护 2-3 个 Prompt 版本,对比实际效果
- 跟踪模型更新:新模型发布时重新评估现有 Prompt 的兼容性
- 文档化最佳实践:将验证有效的模式沉淀为团队规范
工程化思维:Prompt 工程不是一次性工作,而是需要持续迭代的产品能力。
总结
本文总结了 Prompt 工程的最佳实践。核心要点:
- 六大原则:具体明确、角色设定、格式指定、示例引导、边界定义、分步指导
- 高级技术:CoT 思维链、Few-shot 示例学习
- 迭代优化:分析 → 优化 → 测试 → 评估的闭环
- A/B 测试:量化对比不同 Prompt 的效果
- 质量评分卡:从清晰度、完整性等六个维度评估
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源
更多推荐



所有评论(0)