提示词工程实战:从普通提问到AI高手Prompt的五大核心技巧
2026/8/30 19:09:40 网站建设 项目流程

同样是用 ChatGPT、Claude、DeepSeek 这些大模型,为什么有的人写出来的分析报告逻辑清晰、数据准确、代码可用,而自己得到的回答总像是“正确的废话”?很多时候,问题真的不在模型本身,而在于你发给模型的 prompt(提示词)。

Prompt 就是你和 AI 之间的沟通语言。你描述得越模糊,AI 只能靠“猜”来给你结果;你描述得越精准、越结构化,AI 给出的答案就越接近你真正想要的东西。很多人在网上看过各种“高手 Prompt 模板”,但拿过来自己用还是效果一般,原因并不是模板不好,而是没理解模板背后的设计逻辑。

这篇文章会从实际对比出发,拆解普通用户和 AI 高手在 prompt 使用上的核心差距,并给出完整的示例代码、结构化模板、常见报错排查和工程化建议。不管你是刚开始接触 AI 大模型,还是已经在做 AI 应用开发,都可以从中找到可以直接落地的思路。

1. 为什么同一款 AI,不同人用效果完全不同?

1.1 先看一个直观对比

假设你要让 AI 帮你写一个 Python 函数,普通用户可能会这样提问:

帮我写一个Python函数,计算两个日期之间的天数。

AI 给出的结果往往也能用,但你会发现它可能没处理日期格式异常、没考虑开始日期晚于结束日期等情况。而一个 AI 高手的 prompt 可能是这样的:

# 角色 你是一名精通Python标准库的资深后端开发工程师。 # 任务 编写一个Python函数,用于计算两个日期之间的天数差。 # 输入参数 - start_date: str,格式 YYYY-MM-DD - end_date: str,格式 YYYY-MM-DD # 要求 1. 只使用Python标准库datetime,不使用第三方库 2. 如果 start_date > end_date,返回负数 3. 如果日期格式不合法,抛出ValueError,并给出清晰的中文错误提示 4. 输出完整可运行代码,包含函数定义、类型注解和docstring # 示例 输入: start_date="2025-01-01", end_date="2025-01-10" 输出: 9 请直接输出代码。

同样一个需求,两种 prompt 得到的代码质量差别非常大。高手的 prompt 其实只是在四个维度上做了提升:角色、目标、约束、示例。

1.2 大模型是怎么“理解”Prompt 的

要理解 prompt 为什么重要,先要理解大模型的运行机制。以 GPT、ChatGLM、DeepSeek 这类大型语言模型为例,它的核心能力是:给定一段文本,预测下一个最可能出现的 token(词元)。你输入的 prompt,本质上是在指定一个条件概率分布。prompt 里提供的上下文越具体,模型在生成时可供“推理”的约束就越多,输出就越稳定。

这也能解释为什么同一个问题,你追问一句“请用 Markdown 表格输出”和“请详细解释”,得到的结果会完全不同。因为模型不是真的“看懂”了你的意图,而是根据你给的文本,在高维空间中往最可能的方向生成。

所以 Prompt Engineering(提示词工程)本质上不是玄学,而是一种“如何用更高质量的上下文,引导模型在期望范围内生成”的工程方法。

1.3 Prompt、Skill 和 Agent 的关系

最近 AI 圈经常出现几个概念:prompt、skill、agent,很多初学者容易混淆。

  • Prompt:你发给模型的指令文本,是一切交互的基础。
  • Skill:可以理解为一个封装好的“技能模板”,里面可能包含多组 prompt、参数配置和使用说明。例如在 Coze、Dify 这类平台上,你可以把一套写文案的流程封装成 skill,复用到不同场景。
  • Agent:在 prompt 的基础上,增加工具调用、记忆、任务规划、循环执行等能力,让模型能自主完成一个多步骤任务。Prompt 往往是 Agent 的“大脑系统提示词”,负责定义 Agent 的行为边界和任务目标。

可以简单理解成:Prompt 是“说一句话”,Skill 是“一套话术模板”,Agent 是“一个会调用工具来完成任务的数字员工”。

2. 环境准备:搭建一个可复现的 Prompt 调试环境

在继续讲技巧之前,建议你先准备好一个本地调试环境。后面很多示例代码,你需要实际跑一遍才能感受到 prompt 差异带来的输出变化。

2.1 准备模型服务

本文示例使用 OpenAI 兼容接口风格调用,适合 ChatGPT、DeepSeek、通义千问、Moonshot 等大多数国内可访问的大模型服务。以 DeepSeek 为例,你需要先到官网注册账号,创建一个 API Key。

需要说明的是,各家的模型版本、接口地址和计费规则变化较快,下面代码中的 base_url、model 名称需要根据你所用的服务商进行调整。

2.2 安装 Python 依赖

建议使用 Python 3.9 以上版本,然后安装 openai 库:

pip install openai

如果你使用的是国内网络环境,直接安装即可,不需要额外配置代理。

2.3 基础调用示例

创建一个 Python 文件test_prompt.py,写入以下内容:

from openai import OpenAI client = OpenAI( api_key="sk-你的APIKey", base_url="https://api.deepseek.com" ) response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一名资深的Python后端工程师。"}, {"role": "user", "content": "请写一个函数,判断一个字符串是否为合法的邮箱地址。"} ], temperature=0.3 ) print(response.choices[0].message.content)

运行:

python test_prompt.py

这里有两个参数需要注意:

  • temperature:控制随机性。值越低,输出越稳定保守;值越高,输出越发散。调试 prompt 阶段建议设为 0.1~0.3,方便对比不同 prompt 的真实效果。
  • messages:包含 system(系统角色)和 user(用户输入)。高手通常会把角色设定放在 system 中,把具体任务放在 user 中,让模型更容易遵循指令。

3. AI 高手写 Prompt 的五个核心技巧

3.1 先给角色,再给任务

很多人习惯直接写“帮我写一段文案”“帮我写一段代码”,但高手通常会先给模型设定一个角色。原因在于,角色设定会激活模型在训练阶段学习到的特定领域表达模式。

bad_prompt = "帮我写一份产品需求文档。" good_prompt = """ # 角色 你是一名拥有5年经验的B端产品经理,擅长撰写逻辑严谨、可落地执行的产品需求文档。 # 任务 请针对一个「企业内部员工请假审批系统」撰写一份产品需求文档。 """

在 API 调用中,角色信息可以放到 system 消息里:

messages = [ {"role": "system", "content": "你是一名资深后端工程师,代码风格简洁,注重边界条件处理。"}, {"role": "user", "content": "实现一个函数:给定一个整数列表,返回列表中的最大值。请考虑空列表的异常情况。"} ]

需要注意的是,角色设定不能太宽泛。比如“你是一名专家”这种说法效果有限,不如“你是一名精通 Python 的量化交易系统开发工程师”来得具体,因为后者提供了更明确的领域上下文。

3.2 给足上下文,但别给噪声

模型在回答时,主要依据 prompt 中提供的上下文进行推理。如果上下文缺少关键信息,模型只能靠猜,或者用“正确的废话”来填充。

例如你想让 AI 帮你分析用户流失原因,只写“帮我分析用户流失”肯定不够。高手会先描述业务背景、数据字段、分析目标和输出形式。

同时,也不要给太多无关信息。把和任务无关的背景、历史对话、冗余描述堆在一起,反而会干扰模型。一个经验法则是:prompt 中每句话都应该为“让模型更准确地完成目标”服务,多余的话要么删掉,要么折叠到 system 中。

3.3 少讲抽象要求,多给 Few-shot 示例

这是新手和高手之间最明显的差距之一。新手喜欢用形容词来约束模型,比如“写得好一点”“写得专业一点”“结构清晰一点”。但模型对“好”“专业”“清晰”的理解和你可能不一致。

高手更倾向于用 Few-shot(少样本示例)来告诉模型“什么样算好”。示例比形容词更直接。

few_shot_prompt = """ 请判断以下用户反馈属于哪个问题分类:性能问题、稳定性问题、功能建议、其他。 示例1: 用户反馈: 登录页面一直转圈,卡了五分钟才打开。 分类: 性能问题 示例2: 用户反馈: 点击支付按钮没有反应,App直接闪退了。 分类: 稳定性问题 示例3: 用户反馈: 设置里找不到夜间模式,建议增加这个功能。 分类: 功能建议 用户反馈: 下单成功之后没有收到确认短信,订单超时被取消了。 分类: """

这里不需要长篇大论解释分类规则,几个示例就能让模型学会你的分类标准。

3.4 拆解复杂任务,引导模型分步思考

对于复杂任务,直接让模型一次性输出完整答案,往往会出现遗漏或逻辑跳跃。这时候可以采用“分步引导”的方式,让模型先拆解步骤,再逐步推导。

典型方式有两种:

第一种是显式分步提问:

请计算 ((2 + 3) * 4 - 1) / 1.5 的结果。 请你按以下步骤执行,并输出每一步的计算结果: 1. 先计算括号内的加法 2 + 3 2. 再计算乘法 3. 然后计算减法 4. 最后计算除法

第二种是让模型在内部“先想后答”:

在给出最终方案之前,请先列出: 1. 用户的核心诉求 2. 可能存在的边界场景 3. 技术选型理由 然后再给出完整方案。

这种“先拆解再回答”的方式,能明显提高长文本生成的逻辑一致性,在编写代码、撰写方案、数据分析和内容创作场景中都非常有效。

3.5 用输出格式约束生成结果

如果你只是把 AI 当成聊天工具,输出格式不重要。但如果你在做 AI 应用开发,或者希望批量处理结果,就必须在 prompt 中明确输出格式。

最常见的是 JSON 格式约束:

请提取合同中的关键信息,并严格按照JSON格式输出,不要输出其他内容。 输出格式: { "contract_no": "合同编号", "sign_date": "签署日期", "party_a": "甲方名称", "party_b": "乙方名称", "total_amount": "合同总金额", "currency": "币种", "payment_terms": "支付条款摘要" }

如果你想得到表格:

请将以下数据整理成Markdown表格,包含三列:字段名、说明、数据类型。

需要注意的是,虽然 prompt 可以要求模型输出 JSON,但模型偶尔还是会输出一些额外文字。在工程实践中,通常还要在后端代码中做一次格式校验和异常兜底,不能完全依赖 prompt。

4. 实战案例:把普通 Prompt 一步步改写成高手 Prompt

下面我们通过一个完整的实战案例,演示如何把一个模糊的 prompt,逐步优化成高质量、可稳定复现的 prompt。

4.1 原始业务需求

假设我们是电商平台的数据分析师,需要让 AI 生成一份“用户流失预警分析”的代码和结论。原始需求很简单:

帮我写一份用户流失分析的代码。

这个 prompt 的问题在于:数据源不明确、字段不明确、流失定义不明确、输出形式不明确,AI 只能给一个泛泛而谈的通用模板。

4.2 第一版:补充任务背景

我是一家电商平台的数据分析师,运营团队想了解用户流失的原因。 请帮我分析订单数据,找出可能流失的用户,并给出建议。

这一版补充了业务场景,但依然缺少数据结构、流失定义、分析深度等关键信息。

4.3 第二版:描述字段与处理逻辑

我有一份用户订单表,字段包括: user_id, order_date, order_amount, order_status, last_login_date 用户如果超过30天没有登录,且近90天没有下单,视为流失用户。 请帮我: 1. 统计每个月的流失用户数 2. 分析流失用户最后一次订单金额的分布情况 3. 给出完整的Python代码,使用pandas处理,结果输出为Markdown表格 请编写代码,并解释每个步骤的用途。

这一版已经能跑出一个完整结果了。它给出了数据结构、流失定义、分析目标、技术栈和输出形式。

4.4 第三版:加入 Few-shot 和边界条件

# 角色 你是一名电商行业的数据分析师,擅长使用pandas进行用户行为分析。 # 任务 基于用户订单数据表,完成以下分析需求: - 按月统计流失用户数 - 分析流失用户的最后一次订单金额分布 # 数据表字段 - user_id: 用户ID - order_date: 下单日期,格式 YYYY-MM-DD - order_amount: 订单金额 - order_status: 订单状态(completed/cancelled/pending) - last_login_date: 最后登录日期 # 流失定义 用户超过30天未登录,且近90天无下单记录,则标记为流失。 # 输出要求 1. 使用pandas处理,不依赖数据库 2. 代码需要包含必要的注释 3. 结果输出为Markdown表格 4. 如果数据中有缺失值,请先说明处理方式 # 边界条件 - 如果某个月没有流失用户,也请显示0,不要跳过该月份 - 订单状态为cancelled的记录不计入下单金额统计 请先给出完整代码,再给出执行结果示例。

对比两个版本可以发现,第三版 prompt 在角色、任务、数据结构、流失定义、输出要求、边界条件六个维度上全部做了明确。尤其是“某个月没有流失用户也显示 0”的约束,能避免模型在生成代码时直接把空月份过滤掉。

4.5 用 Python 脚本自动测试不同 Prompt 的效果

为了实际感受 prompt 差异,你可以把这几个版本的 prompt 保存成不同的变量,通过 API 调用对比输出:

from openai import OpenAI client = OpenAI( api_key="sk-你的APIKey", base_url="https://api.deepseek.com" ) def run_prompt(prompt_text): response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一名资深数据分析师。"}, {"role": "user", "content": prompt_text} ], temperature=0.2 ) return response.choices[0].message.content # 第一版 v1 = "帮我写一份用户流失分析的代码。" result_v1 = run_prompt(v1) print("========== V1 输出 ==========") print(result_v1) # 第三版 v3 = """ ...这里粘贴上文中第三版prompt... """ result_v3 = run_prompt(v3) print("========== V3 输出 ==========") print(result_v3)

你在本地运行后会发现,V1 的结果更像一个“模板”,V3 的结果则更接近可以直接用于数据处理的脚本。这种对比,比看任何教程都更直观。

4.6 结果评价思路

对于 prompt 调优,不要只看“能不能跑”。建议从以下角度评价:

  • 代码是否可以直接运行
  • 是否覆盖了边界条件
  • 输出是否符合预期格式
  • 是否节省了人工修改的时间

如果发现输出不稳定,可以降低 temperature,或者在 prompt 中追加一句“请严格按照上述要求输出,不要画蛇添足”。

5. 常见问题与排查思路

在实际使用和开发中,围绕 prompt 会出现很多报错或异常。这里整理几个高频问题。

5.1 Prompt 被安全机制拦截

一些用户在调用大模型接口时,会遇到类似报错:

invalid prompt: your prompt was flagged as potentially violating our usage policy

这种提示说明你发送的 prompt 触发了服务商的内容安全机制。可能的原因包括:输入内容包含暴力、歧视、色情、违法违规暗示,或者被模型判定为高风险文本。

遇到这种情况,正确做法是:

  1. 检查 prompt 中是否有敏感词汇或容易被误判的表述。
  2. 删除与任务无关的极端案例描述。
  3. 明确说明你的合法使用目的,例如“用于教学场景”“用于企业内部分析”。
  4. 如果业务确实需要处理某些高风险文本,务必通过合法渠道,在合规前提下使用专门的内容审核服务,而不是尝试绕过安全限制。

这里要特别提醒一点:不要试图通过所谓的“无违禁词”“越狱”手段绕过平台的安全策略。这不是技术问题,而是合规问题。使用 AI 服务时,应该遵守服务条款和当地法律法规。

5.2 输出内容不符合预期

这是最常见的问题,现象是:模型没有报错,但输出内容和你想要的不一致。

常见原因和解决思路如下:

问题现象常见原因解决思路
回答太泛泛角色设定缺失、上下文不足补充角色、业务背景和任务目标
代码不可用缺少运行约束和数据格式说明说明技术栈、输入输出格式、边界条件
格式混乱没有指定输出格式明确要求 Markdown/JSON/表格
结果不稳定temperature 过高或示例不足降低 temperature,增加 Few-shot
长篇内容跑题任务目标不清晰把任务拆分成多个子任务,逐个提问

5.3 Prompt 过长导致 Token 超限

如果你使用的是 API 方式,当输入内容过长时会看到类似报错:

The number of tokens to keep from the initial prompt is greater than the context length

意思是初始 prompt 的 token 数超过了模型上下文窗口大小。解决方法:

  1. 精简 prompt,删除冗余描述。
  2. 如果历史对话过长,只保留最近的几轮,或者把历史对话先做摘要。
  3. 把大段参考文档拆分多个片段,分别发送,再汇总结果。
  4. 使用支持更长上下文的模型,例如 128K 上下文版本。

在长文档分析场景中,更推荐配合 RAG(检索增强生成)来使用,而不是把所有内容都塞进 prompt。

5.4 AI Agent 运行中 Prompt 相关错误

如果你在使用 LangChain、Dify、Coze 等框架开发 AI Agent,可能会遇到类似错误:

Agent terminated due to error you can prompt the model to try again or start

这通常意味着 Agent 在执行过程中,大模型返回了无法被框架解析的内容,或者子任务的 prompt 不符合预期。排查思路:

  1. 检查 Agent 的 system prompt 是否把工具使用的格式说明清楚。
  2. 检查模型输出是否是合法的 JSON 或函数调用格式。
  3. 增加重试机制,当解析失败时让模型重新生成。
  4. 在 prompt 末尾加一句“只输出 JSON,不要输出解释”。

Agent 开发中的 prompt 设计,比普通对话 prompt 更强调格式稳定性,因为这直接关系到下游代码能否解析成功。

5.5 AI 幻觉

AI 幻觉指模型生成了看似合理但事实错误的内容。降低幻觉的经验方法:

1. 在 prompt 中明确要求模型“如果信息不在给定上下文中,请直接回答‘无法从给定资料中确认’,不要编造”。 2. 输入参考材料,要求模型只基于材料回答。 3. 降低 temperature。 4. 对于事实性强的任务,增加后置校验流程。

例如:

请基于下面提供的公司公告回答问题。如果公告中没有提到,请回答“公告未提及”。 公司公告:... 问题:公司今年第一季度净利润是多少?

6. 工程化 Prompt 的最佳实践与进阶建议

如果你只是偶尔用 AI 写点东西,掌握上面这些技巧就够了。但如果你想在团队或产品中深度使用 AI 能力,就需要考虑把 prompt 工程化。

6.1 把 Prompt 纳入版本管理

Prompt 本质上是项目的一份“可迭代资产”。建议把每个场景的 prompt 保存成独立的.md.py文件,放到项目的prompts/目录下,用 Git 管理。

一个推荐的项目结构:

project/ ├── prompts/ │ ├── system/ │ │ ├── data_analyst.md │ │ ├── content_writer.md │ │ └── code_reviewer.md │ ├── tasks/ │ │ ├── user_loss_analysis.md │ │ └── contract_info_extract.md │ └── few_shot/ │ ├── classification_examples.json │ └── extract_examples.json ├── src/ │ ├── llm_client.py │ └── prompt_loader.py └── tests/ └── test_prompt_output.py

这样做的价值在于:你可以清晰地看到每次 prompt 改动带来的效果变化,也能方便团队成员复用。

6.2 建立 Prompt 评测集

不要凭感觉判断 prompt 好坏。建议做一套小而精的评测集:

  • 挑选 10~30 个典型输入场景。
  • 每个场景记录期望输出类型和行为。
  • 每次调整 prompt 后,批量跑一遍评测集,对比输出质量。

在 Python 中,可以用简单的脚本实现:

test_cases = [ {"input": "登录页面一直转圈", "expected_category": "性能问题"}, {"input": "点击支付闪退", "expected_category": "稳定性问题"}, # ... ] for case in test_cases: result = run_prompt(case["input"]) print(case["input"], "=>", result)

有了评测集后,你的 prompt 优化不再是“感觉变好了”,而是有对比依据。

6.3 注意成本和安全边界

Prompt 越长,消耗的 token 越多,成本越高。在工程中要注意:

  • 控制 system prompt 的长度,避免每次请求都携带大量重复文本。
  • 把固定不变的内容缓存到服务端,而不是重复发送。
  • 对敏感业务数据做脱敏处理。
  • 记录每次调用的 token 消耗,方便核算成本。

另外,API Key 必须保存在服务端环境变量中,不能写在前端代码里,也不能提交到 Git 仓库。

6.4 从 Prompt 走向 RAG 和 Agent

Prompt 是基础,但在复杂业务中,单靠 prompt 很难覆盖所有场景。比如:

  • 知识库问答:需要 RAG 技术,先检索相关文档片段,再把片段拼进 prompt。
  • 多步骤任务:需要 Agent 框架,让模型调用搜索、计算、数据库等外部工具。
  • 规范化输出:需要函数调用(Function Calling)或 JSON Schema,让输出结果可被程序直接处理。

这也是为什么现在像 LangChain、Spring AI、MCP 这类工具越来越受关注。它们做的事情,本质上就是把“prompt + 工具 + 记忆 + 循环”组装起来,形成一个更稳定的 AI 应用系统。

如果你已经在 prompt 层面做得比较熟练,下一步可以重点学习这些方向:

  1. 结构化输出:JSON Schema、函数调用。
  2. 检索增强生成(RAG):向量数据库、Embedding、重排。
  3. Agent 开发:LangChain、Dify、Coze,或者直接用代码编排多轮任务。
  4. AI 编程工具:Cursor、PyCharm AI 插件等,让 prompt 技巧直接服务于开发提效。

7. 总结与学习路线

回头再看标题的问题:你跟 AI 高手的 prompt 水平差距有多大?其实差距并不在于天赋,而在于是否理解了一个核心原则:prompt 是你在为模型创造上下文,上下文质量决定了答案质量。

高手的 prompt,往往具备以下几个特征:

  • 有明确角色和任务目标
  • 有完整的背景信息和输入参数说明
  • 有清晰的技术栈或领域限制
  • 有输出格式和边界条件的约束
  • 通过示例而不是形容词传达预期
  • 经过评测和迭代,而不是写完一次就完事

如果你希望快速提高 prompt 水平,可以按这条路线练习:

  1. 先把本文的版本对比案例在本地跑一遍,感受不同 prompt 带来的输出差异。
  2. 选一个你日常工作中经常重复的任务,比如周报生成、代码审查、SQL 编写,花一个下午把它改写成结构化 prompt。
  3. 建立一个小型评测集,持续迭代你的模板。
  4. 再进一步,学习怎么在代码中调用模型 API,把 prompt 集成到真实程序里。

下次和 AI 对话之前,不妨先花 30 秒把需求写清楚,把角色、目标、约束、示例补全。你会发现,AI 的表现会明显上一个大台阶。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询