Prompt Engineering 是大模型应用开发中成本最低、收益最高的优化手段。本文系统梳理10个经过验证的核心技巧,让你的模型输出质量提升一个台阶。

一、为什么提示词工程如此重要?同一个任务,不同的 Prompt 写法可能导致模型输出质量相差 3-5 倍。更关键的是:优秀的 Prompt 往往比增加模型参数量更有效,且成本为零。—## 二、10 个核心技巧### 技巧1:角色设定(Role Prompting)给模型设定明确的专家角色,显著提升特定领域的输出质量:❌ 普通版:"解释一下 TCP 三次握手"✅ 角色版:"你是一位有 15 年经验的网络工程师,正在给一位有编程基础但刚接触网络的初级工程师解释概念。请解释 TCP 三次握手,要求:1. 使用生活化比喻帮助理解2. 说明每一步的必要性3. 指出常见的理解误区"效果:角色约束让模型更专注于特定知识域,减少泛化噪声。—### 技巧2:思维链(Chain-of-Thought)复杂推理任务中,让模型逐步思考再给出最终答案:python# 直接问答(效果差)prompt = "一个仓库有 100 件商品,每天销售 15 件,进货 8 件,5 天后有几件?"# 思维链(效果好)prompt = """一个仓库有 100 件商品,每天销售 15 件,进货 8 件,5 天后有几件?请按以下步骤思考:1. 每天净变化量是多少?2. 5天累计变化量是多少?3. 最终库存是多少?逐步计算,最后给出答案。"""研究结论:思维链在算术、逻辑推理任务中可提升准确率 20-50%。—### 技巧3:少样本示例(Few-Shot Learning)通过提供示例引导模型理解期望的输出格式:pythonprompt = """将以下文本分类为:正面、负面、中性示例:文本:这款产品质量很好,完全超出我的预期。分类:正面文本:收到货了,和描述的一样。分类:中性文本:快递慢不说,包装还破损了,很失望。分类:负面现在分类以下文本:文本:充电器坏了,但客服态度不错,给换了新的。分类:"""注意:示例要覆盖边界情况,不要只展示"典型"例子。—### 技巧4:结构化输出控制让模型按指定格式输出,方便程序解析:python# 使用 JSON 模式(OpenAI 支持)response = client.chat.completions.create( model="gpt-4o", messages=[{ "role": "user", "content": """ 分析以下产品评价,提取关键信息: 评价:这款手机拍照效果一流,但续航只有一天,价格有点贵。 请以如下 JSON 格式输出: { "sentiment": "正面/负面/中性/混合", "aspects": [ {"aspect": "方面名称", "sentiment": "正面/负面", "description": "具体评价"} ], "summary": "一句话总结" } """ }], response_format={"type": "json_object"} # 强制 JSON 输出)—### 技巧5:输出格式约束当不能使用 JSON 模式时,通过明确格式描述约束输出:分析用户反馈,按以下格式输出,每个字段单独一行:问题类型: [产品质量/配送问题/客服问题/其他]紧急程度: [高/中/低]建议处理: [具体处理建议,50字以内]---用户反馈: 收到的商品有划痕,已拍照,希望商家尽快处理—### 技巧6:分步骤任务拆解对于复杂任务,将大任务拆解为顺序步骤:python# 代码审查任务拆解audit_prompt = """请对以下 Python 代码进行安全审查,按以下顺序逐步分析:**第一步:识别安全风险**列出所有潜在的安全漏洞(SQL注入、XSS、路径遍历等)**第二步:评估风险等级**对每个风险标注:高危/中危/低危**第三步:提供修复建议**针对每个高危、中危问题,提供具体的修复代码**第四步:总结评估**整体安全评分(1-10分)和主要结论代码:python{code}"""—### 技巧7:负面约束(告诉模型不要做什么)有时候明确告知禁止行为比描述期望行为更有效:你是一个客服助手,负责解答用户的产品问题。禁止事项:- 不要推荐竞争对手的产品- 不要透露公司内部定价策略- 不要对产品做超出官方说明的承诺- 如果不确定,不要猜测,说"我需要为您核实"用户问题:{question}—### 技巧8:增加置信度校验让模型对自己的答案进行自我评估,减少幻觉:回答以下问题,然后对你的答案进行自我评估:问题:{question}请按格式回答:[答案]{你的回答}[置信度]高/中/低[理由]为什么你对这个答案有这样的置信度?有什么不确定的地方?[验证建议]如果用户需要确认这个答案,建议通过什么途径核实?—### 技巧9:上下文注入的顺序技巧Transformer 模型对靠近末尾的信息更"重视"(注意力分布特性):python# 较差顺序:关键指令在前,内容在后prompt = """请对以下文章进行总结,要求:简洁、专业、不超过200字。{大量文章内容...}"""# 更好顺序:内容在前,关键指令在后(更靠近生成位置)prompt = """{大量文章内容...}请对以上文章进行总结,要求:简洁、专业、不超过200字。"""—### 技巧10:使用 XML/Markdown 标签分隔内容当 Prompt 包含多个部分时,使用明确的分隔标签减少混淆:pythonprompt = """<task>分析以下用户评论的情感倾向,并提取关键诉求。</task><context>这是一家电商平台的商品评论,评论者是已购买的真实用户。</context><comment>{user_comment}</comment><output_format>情感:[正面/负面/中性]关键诉求:[逐条列出]优先级:[商家应优先处理哪些问题]</output_format>"""—## 三、系统级 Prompt 设计原则System Prompt 应包含:1. 角色定义和能力范围2. 输出格式规范3. 禁止行为清单4. 语气和风格要求5. 领域特定知识或规则用户 Prompt 应保持:1. 简洁,聚焦当前任务2. 提供必要上下文3. 明确期望结果—## 四、Prompt 评估与迭代好的 Prompt 不是一次写成的,需要系统化评估:python# 构建评估数据集test_cases = [ {"input": "...", "expected_output_contains": ["关键词1", "关键词2"]}, {"input": "...", "expected_format": "json"}, # ...]# 批量测试results = []for case in test_cases: response = llm.invoke(prompt_template.format(**case)) score = evaluate_response(response, case) results.append(score)# 计算通过率pass_rate = sum(results) / len(results)print(f"Prompt 通过率: {pass_rate:.2%}")—## 五、总结提示词工程的本质是降低模型的"理解歧义"。最有效的10个技巧:1. 角色设定 → 专业度提升2. 思维链 → 推理准确度3. 少样本示例 → 格式一致性4. 结构化输出 → 程序可解析性5. 步骤拆解 → 复杂任务质量6. 负面约束 → 减少不期望行为7. 置信度校验 → 减少幻觉8. 上下文顺序 → 注意力优化9. 标签分隔 → 结构清晰度10. 迭代评估 → 持续优化—标签:提示词工程 | Prompt Engineering | 思维链 | Few-Shot | 大模型应用

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐