Prompt Engineering核心技巧有哪些
一、最重要的心智模型把模型想象成一个极其听话但字面理解能力极强的新员工。你说帮我写个好的回答它不知道好是什么意思。你说用中文回答分三点每点不超过两句话语气正式它就能做到。Prompt 的本质减少模型的猜测空间让它的行为符合你的预期。二、System Prompt 的四要素一个好的 system prompt 按这个顺序写① 角色定义 → 你是谁有什么背景 ② 能力范围 → 你能做什么 ③ 输出格式 → 怎么回答语言、结构、长度 ④ 边界规则 → 不能做什么差的 system prompt太模糊pythonsystem 你是一个助手帮用户解答问题。 # 问题什么类型的助手什么问题什么格式好的 system prompt四要素齐全pythonsystem 你是一个企业内部 HR 政策助手。 【能力范围】 - 回答员工关于年假、病假、报销、薪资发放的问题 - 解释公司规章制度 【回答格式】 - 使用中文语气专业但亲切 - 直接给出结论再解释原因 - 超过 3 个要点时用编号列表 - 回答控制在 200 字以内 【边界规则】 - 只基于公司政策回答不做个人判断 - 不确定时说建议直接联系 HR 团队确认 - 不讨论薪资谈判、绩效申诉等敏感话题三、六个核心技巧技巧 1Few-shot给例子不要只描述你要什么直接给几个输入输出的例子。模型会模仿格式pythonmessages [ {role: system, content: 将用户反馈分类为功能请求 / Bug 报告 / 使用咨询 / 其他}, # 三个示例few-shot {role: user, content: 登录按钮点击没反应}, {role: assistant, content: Bug 报告}, {role: user, content: 能不能支持暗黑模式}, {role: assistant, content: 功能请求}, {role: user, content: 怎么导出数据到 Excel}, {role: assistant, content: 使用咨询}, # 真正要分类的 {role: user, content: 上传文件后页面白屏了}, ]Few-shot 对格式控制特别有效——当你要模型按特定格式输出时给一两个例子比描述强十倍。技巧 2Chain of Thought让模型先想再答复杂推理任务数学、逻辑、多步判断里让模型展示思考过程能显著提升准确率python# 普通提问容易出错 {role: user, content: 这个合同条款是否符合劳动法[条款内容]} # CoT 提问让模型一步步推理 {role: user, content: 请分析这个合同条款是否符合劳动法。 请按以下步骤思考 1. 条款的核心主张是什么 2. 相关劳动法条文是什么 3. 条款是否与法条冲突 4. 最终结论 [条款内容] }也可以在 system prompt 里直接要求思维链pythonsystem 回答问题前先用 思考 标签写出你的推理过程再给出最终回答。 示例格式 思考 1. 问题涉及... 2. 需要考虑... 3. 因此... /思考 最终回答...技巧 3用 XML 标签隔离内容当 prompt 里混合了指令和数据时用 XML 标签清晰分隔。这在 RAG 场景里尤其重要防止文档内容被当作指令pythondef build_rag_prompt(question: str, docs: list[dict]) - str: context \n\n.join([ fdocument id{i1} source{d[filename]}\n{d[content]}\n/document for i, d in enumerate(docs) ]) return f你是知识库问答助手只基于以下文档回答问题。 documents {context} /documents question {question} /question 回答要求 - 只使用文档中的信息 - 引用时标注来源格式[文档1] - 文档中没有答案时说根据现有文档未找到相关信息 技巧 4输出格式约束明确指定格式减少解析失败的概率python# 要求 JSON 输出 system 分析用户反馈以 JSON 格式返回结果。 输出格式严格遵守不要输出其他内容 { category: 功能请求|Bug报告|使用咨询|其他, sentiment: positive|neutral|negative, priority: high|medium|low, summary: 一句话摘要不超过30字, requires_human: true或false } # 配合 Structured Outputs 更稳定见阶段2技巧 5正面描述 负面描述告诉模型做什么比告诉它不要做什么效果更好python# 差负面描述 不要废话不要重复问题不要用太多形容词 # 好正面描述 直接给出答案一句话结论在前细节在后语言精练技巧 6角色扮演提升专业性赋予模型具体的专业角色输出质量会提升python# 普通 system 帮我审查代码 # 有角色 system 你是一位有 10 年经验的 Python 后端工程师专注于 API 设计和性能优化。 代码审查时重点关注 - 安全漏洞SQL注入、认证缺失、敏感信息泄漏 - 性能问题N1 查询、不必要的同步调用 - 代码可维护性命名、拆分、重复逻辑 发现问题时给出具体的修改建议和代码示例。四、AI 应用里最常用的三类 Prompt 模板模板 1RAG 问答pythonRAG_SYSTEM 你是企业知识库助手。 规则 1. 只使用 context 标签中的信息回答 2. 引用时用 [来源N] 标注例如根据公司规定[来源1]... 3. 信息不足时说根据现有文档未找到相关信息。 4. 不要编造文档中没有的内容 输出格式 - 先给结论再给依据 - 超过 3 点时用编号列表 def make_rag_messages(question: str, chunks: list[dict]) - list[dict]: context \n\n.join([ f[来源{i1}] {c[filename]}:\n{c[content]} for i, c in enumerate(chunks) ]) return [ {role: system, content: RAG_SYSTEM}, {role: user, content: fcontext\n{context}\n/context\n\n问题{question}}, ]模板 2结构化信息提取pythonEXTRACT_SYSTEM 从文本中提取结构化信息以 JSON 返回。 只输出 JSON不要任何解释或 markdown 代码块。 如果某个字段在文本中找不到填 null。 def make_extract_messages(text: str, schema_desc: str) - list[dict]: return [ {role: system, content: EXTRACT_SYSTEM}, {role: user, content: f提取以下字段{schema_desc}\n\n文本{text}}, ]模板 3多步任务分解pythonAGENT_SYSTEM 你是一个任务执行助手。 处理用户请求时 1. 先分析需要哪些步骤 2. 说明你打算调用哪个工具以及原因 3. 根据工具返回结果判断是否继续 4. 所有信息齐全后给出最终回答 如果工具返回了错误解释错误原因并说明替代方案。五、测试和迭代的方法Prompt 不是写一次就完的要系统地测试python# 建立测试集准备 10-20 个有代表性的问题 test_cases [ {input: 年假有多少天, expected_keywords: [15天, 带薪]}, {input: 明天天气怎么样, should_answer: False}, # 知识库没有 {input: 报销上限是多少, expected_keywords: [500元, 审批]}, ] # 改了 prompt 后跑一遍测试集看通过率有没有提升 # 不要凭感觉要数据说话调优顺序先确保该回答的都能回答召回率→ 再优化回答的格式对不对精确率→ 最后优化回答的质量够不够好质量。六、常见坑Prompt 太长导致模型遗忘前面的指令— 把最重要的规则放在 system prompt 的开头和结尾中间放细节。格式要求写了但模型不遵守— 加 few-shot 示例光靠描述有时不够。多语言混乱— 在 system prompt 里明确写始终用中文回答即使用户用其他语言提问。模型创造了文档里没有的内容— 在 system prompt 里加如果不确定直接说不知道不要猜测并在 RAG prompt 里用 XML 标签清晰隔离文档内容和指令。推荐资料资料链接OpenAI Prompt 工程指南platform.openai.com/docs/guides/prompt-engineeringAnthropic Prompt 文档docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overviewPrompting Guidepromptingguide.ai/zh学 Prompt Engineering 最快的方式是在你的项目里实践——把 Task Manager 的/tasks/summarize接口的 system prompt 改五次每次记录输出结果的差异一下午就能建立直觉