AI入门——什么是提示词Prompt?
- AI入门——什么是提示词Prompt?
-
- Prompt基本概念
-
- Prompt(提示词):Agent 的「行动准则」
- 如何使用Prompt
-
- Prompt的作用
-
- 命名规范
- 日志规范
- 代码格式
- 注释规范
- 性能与优雅
- 如何写好Prompt
-
- 写好Prompt的核心要素
-
- 目标明确
- 上下文充分
- 约束清晰
- 输出格式明确
- 评价标准明确
- 示例优先
- 任务拆解
- 告诉模型如何取舍
- 行业标准的共同点
- 对写作类 Prompt 的建议
- 对编程类 Prompt 的建议
- 最容易写坏 prompt 的几个问题
- 实用口诀
- 优秀的Prompt示范
AI入门——什么是提示词Prompt?
Prompt基本概念
Prompt(提示词):Agent 的「行动准则」
-
本质:Prompt不是大模型的能力来源而是大模型能力约束和行为准则。Prompt 先把“要做什么”说清楚,比如是回答问题、改代码、做调研,还是先规划后执行。没有这个目标约束,大模型很容易做出“看起来努力,但方向不对”的行为。所以Prompt不是简单的「问问题」,而是「结构化的指令集」—— 包含「角色定义 + 任务目标 + 执行规则 + 上下文 + 输出格式」。
-
核心作用:
① 定义 Agent 的「角色」(比如「你是一名电商客服 Agent,语气要友好」);
② 明确「任务边界」(比如「只处理退货咨询,不回答价格问题」);
③ 给出「执行步骤」(比如「先核实用户订单,再确认退货原因,最后生成退货链接」);
④ 约束「输出格式」(比如「用 JSON 返回结果,包含订单号、退货原因、链接」)。
-
工作方式:
Agent 启动时先「读取 Prompt」,把 Prompt 作为「核心上下文」存入记忆,后续所有决策都基于 Prompt 的规则。
举个实际的 Prompt 例子(电商客服 Agent):
角色:你是某电商平台的退货处理Agent,仅处理已付款订单的退货咨询。
规则:
1. 先向用户索要订单号,验证订单是否已付款;
2. 若未付款,告知用户「未付款订单无法退货」,结束对话;
3. 若已付款,询问退货原因,生成对应退货链接;
4. 输出格式:{"订单号":"xxx","退货原因":"xxx","退货链接":"xxx"}。Agent 会严格按照这个 Prompt 的逻辑执行,不会偏离规则。
如何使用Prompt
Prompt的作用
下面以一个例子来说明使用prompt的好处,我们提问
- Q:生成一个打印99乘法表的代码
- AI:给你最常用、最简单的 99 乘法表代码,复制直接运行👇
-
Python 版(最简洁) python 运行 打印99乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\\t")
print() -
Java 版
public class NineNineTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + (i * j) + "\\t");
}
System.out.println();
}
}
} -
C / C++ 版
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d\\t", j, i, i * j);
}
printf("\\n");
}
return 0;
}
运行效果1×1=1
1×2=22×2=4
1×3=32×3=63×3=9
…
1×9=92×9=183×9=274×9=365×9=456×9=547×9=638×9=729×9=81
由于提问中缺少输出的限定(比如限定某种语言),AI会一下子给我们输出了python/java/c++三个版本,可能我们只需要java版本,白白浪费了python和c++的token;另一种场景可能大模型只输出c++不满足我们的要求。
下面我们对大模型的输出结果限定,只允许输出java版本,这时我们可以限定
- Q:你是一名java开发工程师,生成一个打印99乘法表的代码
- AI:好的,作为一名 Java 开发工程师,我为你提供规范、工整、可直接运行的 99 乘法表 Java 代码,注释详细、格式对齐,完全符合开发规范public class NineNineTable {
public static void main(String[] args) {
// 外层循环:控制行数 i 从 1 到 9
for (int i = 1; i <= 9; i++) {
// 内层循环:控制每行的列数 j 从 1 到 i
for (int j = 1; j <= i; j++) {
// 打印乘法公式,\\t 是制表符,让格式对齐
System.out.print(j + " × " + i + " = " + (i * j) + "\\t");
}
// 每行结束后换行
System.out.println();
}
}
}
运行效果(控制台输出)1 × 1 = 1
1 × 2 = 22 × 2 = 4
1 × 3 = 32 × 3 = 63 × 3 = 9
1 × 4 = 42 × 4 = 83 × 4 = 124 × 4 = 16
……一直到 9×9
这时可以看到代码更加专业(类名、注释等)。但是代码风格还有一些差异,比如我们一般用通用日志组件如slf4j+log4j等替代控制台输出。我们可以继续加一些约束
- Q:你是一名java开发工程师,生成一个打印99乘法表的代码,使用slf4j打印日志,并检测代码是否符合业界java代码编码规范
- AI:符合业界规范的 Java 99 乘法表(SLF4J 日志版) 作为 Java 开发工程师,我为你编写企业级规范代码: 使用slf4j-api + logback-classic打印日志(业界标准日志方案) 严格遵循 Alibaba Java 开发手册 / Oracle 编码规范 类、方法、变量命名规范,注释完整,格式统一 可直接运行、无警告、无硬编码、结构清晰
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 九九乘法表打印工具类
* 遵循Java编码规范,基于SLF4J日志输出
*
* @author Java Developer
* @date 2025-01-01
*/
public class MultiplicationTableGenerator {
// 日志常量定义规范:static final + 类名.class
private static final Logger logger = LoggerFactory.getLogger(MultiplicationTableGenerator.class);
/**
* 生成并打印99乘法表
*/
public static void generateNineNineTable() {
// 外层循环控制行数 1~9
for (int i = 1; i <= 9; i++) {
StringBuilder rowBuilder = new StringBuilder();
// 内层循环控制每行的列数
for (int j = 1; j <= i; j++) {
// 格式化拼接每一项,保证对齐
rowBuilder.append(String.format("%d*%d=%-2d\\t", j, i, j * i));
}
// 使用SLF4J输出当前行日志
logger.info(rowBuilder.toString().trim());
}
}
public static void main(String[] args) {
logger.info("===== 开始打印九九乘法表 =====");
generateNineNineTable();
logger.info("===== 九九乘法表打印完成 =====");
}
}
依赖配置(Maven pom.xml) 必须引入依赖才能使用 SLF4J:
<dependencies>
<!– SLF4J 日志接口 –>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
<!– Logback 日志实现(业界标准) –>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.11</version>
</dependency>
</dependencies>
运行效果
[main] INFO MultiplicationTableGenerator – ===== 开始打印九九乘法表 =====
[main] INFO MultiplicationTableGenerator – 1*1=1
[main] INFO MultiplicationTableGenerator – 1*2=22*2=4
[main] INFO MultiplicationTableGenerator – 1*3=32*3=63*3=9
…
[main] INFO MultiplicationTableGenerator – ===== 九九乘法表打印完成 =====
✅ 业界编码规范检查结果
命名规范
- 类名:大驼峰 MultiplicationTableGenerator
- 方法名:小驼峰 generateNineNineTable
- 常量:全大写 + 下划线
日志规范
- 使用 SLF4J 门面模式,不直接使用 log4j/jul
- Logger 定义为 private static final Logger
- 禁止 System.out.println(),统一用日志输出
代码格式
- 缩进统一、空格规范
- 循环 / 代码块结构清晰
- 方法单一职责
注释规范
- 类注释、方法注释完整
- 关键逻辑添加说明
性能与优雅
- 使用 StringBuilder 拼接字符串(避免 String + 产生大量对象)
- 格式化输出保证排版整齐
可见大模型生成的代码已基本具备工程级规范了
如何写好Prompt
看完上面的案例后有一个问题:如何写好Prompt? 参考 Anthropic Claude、Cursor、OpenAI/ChatGPT 的官方提示词实践,可以把“写好 prompt”的核心总结为一句话:
把任务说清楚,把上下文给够,把边界定死,把结果定义好。
写好Prompt的核心要素
#mermaid-svg-mRZXcySDD7qNlb3E{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mRZXcySDD7qNlb3E .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mRZXcySDD7qNlb3E .error-icon{fill:#552222;}#mermaid-svg-mRZXcySDD7qNlb3E .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mRZXcySDD7qNlb3E .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mRZXcySDD7qNlb3E .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mRZXcySDD7qNlb3E .marker.cross{stroke:#333333;}#mermaid-svg-mRZXcySDD7qNlb3E svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mRZXcySDD7qNlb3E p{margin:0;}#mermaid-svg-mRZXcySDD7qNlb3E .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-mRZXcySDD7qNlb3E .cluster-label text{fill:#333;}#mermaid-svg-mRZXcySDD7qNlb3E .cluster-label span{color:#333;}#mermaid-svg-mRZXcySDD7qNlb3E .cluster-label span p{background-color:transparent;}#mermaid-svg-mRZXcySDD7qNlb3E .label text,#mermaid-svg-mRZXcySDD7qNlb3E span{fill:#333;color:#333;}#mermaid-svg-mRZXcySDD7qNlb3E .node rect,#mermaid-svg-mRZXcySDD7qNlb3E .node circle,#mermaid-svg-mRZXcySDD7qNlb3E .node ellipse,#mermaid-svg-mRZXcySDD7qNlb3E .node polygon,#mermaid-svg-mRZXcySDD7qNlb3E .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mRZXcySDD7qNlb3E .rough-node .label text,#mermaid-svg-mRZXcySDD7qNlb3E .node .label text,#mermaid-svg-mRZXcySDD7qNlb3E .image-shape .label,#mermaid-svg-mRZXcySDD7qNlb3E .icon-shape .label{text-anchor:middle;}#mermaid-svg-mRZXcySDD7qNlb3E .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mRZXcySDD7qNlb3E .rough-node .label,#mermaid-svg-mRZXcySDD7qNlb3E .node .label,#mermaid-svg-mRZXcySDD7qNlb3E .image-shape .label,#mermaid-svg-mRZXcySDD7qNlb3E .icon-shape .label{text-align:center;}#mermaid-svg-mRZXcySDD7qNlb3E .node.clickable{cursor:pointer;}#mermaid-svg-mRZXcySDD7qNlb3E .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mRZXcySDD7qNlb3E .arrowheadPath{fill:#333333;}#mermaid-svg-mRZXcySDD7qNlb3E .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mRZXcySDD7qNlb3E .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mRZXcySDD7qNlb3E .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mRZXcySDD7qNlb3E .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mRZXcySDD7qNlb3E .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mRZXcySDD7qNlb3E .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mRZXcySDD7qNlb3E .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mRZXcySDD7qNlb3E .cluster text{fill:#333;}#mermaid-svg-mRZXcySDD7qNlb3E .cluster span{color:#333;}#mermaid-svg-mRZXcySDD7qNlb3E div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mRZXcySDD7qNlb3E .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mRZXcySDD7qNlb3E rect.text{fill:none;stroke-width:0;}#mermaid-svg-mRZXcySDD7qNlb3E .icon-shape,#mermaid-svg-mRZXcySDD7qNlb3E .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mRZXcySDD7qNlb3E .icon-shape p,#mermaid-svg-mRZXcySDD7qNlb3E .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mRZXcySDD7qNlb3E .icon-shape rect,#mermaid-svg-mRZXcySDD7qNlb3E .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mRZXcySDD7qNlb3E .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mRZXcySDD7qNlb3E .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mRZXcySDD7qNlb3E :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
核心要素
目标明确
上下文充分
约束清晰
输出格式明确
评价标准明确
示例优先
任务拆解
任务拆解
告诉模型如何取舍
目标明确
不要只说“帮我优化一下”或“写一份文档”,要说清楚你到底要什么结果。 好的 prompt 会回答这几个问题:
- 要做什么
- 为谁做
- 解决什么问题
- 最终产物是什么
例如: 弱:帮我写知识图谱文档 强:写一篇面向初学者的知识图谱 Markdown 文档,包含基础概念、应用场景,以及一个用 Neo4j 构建简单图谱的案例
上下文充分
Claude、Cursor、ChatGPT 的共同原则都是:模型不是读心术,缺什么就补什么。 常见上下文包括:
- 背景信息
- 目标读者
- 使用场景
- 已有材料
- 技术栈 / 文件路径 / 约定
- 当前问题和限制
对 coding agent 尤其重要的是:
- 指定文件、目录、符号
- 提供报错信息
- 说明当前状态和已有尝试
约束清晰
好 prompt 不是“越开放越好”,而是要明确边界。
常见约束有:
- 不要改哪些内容
- 使用什么语言或框架
- 输出长度
- 风格要求
- 是否允许联网、安装依赖、改配置
- 是否需要兼容旧系统
例如:
使用 Markdown 输出
不要写成论文腔
代码示例使用 Cypher
不修改已有业务逻辑
输出格式明确
这是 OpenAI 和 Anthropic 都反复强调的重点。你越明确结果长什么样,模型越稳定。 建议提前规定:
- 输出结构
- 标题层级
- 是否用表格
- 是否要代码块
- 是否要分步骤
- 是否要 JSON / Markdown / SQL / PRD
例如:
请按“概念介绍 / 核心组成 / Neo4j 案例 / 总结”四部分输出
每部分 3 到 5 个自然段
每部分 3 到 5 个自然段
所有代码放在代码块中
评价标准明确
最好的 prompt 不只是说“做什么”,还会说“什么算做好”。 这在 Claude Code、Cursor 这类 agent 场景里特别重要。
常见验收标准:
- 内容完整
- 逻辑清楚
- 可执行
- 没有编造
- 术语准确
- 示例能直接运行
- 风格符合受众
例如:
文档要让零基础读者也能看懂
Neo4j 示例要能直接复制执行
避免空泛定义,尽量用例子解释
示例优先
Anthropic 和 OpenAI 都很强调 few-shot examples。如果你对输出风格有明确预期,最有效的方法往往不是“描述”,而是“给例子”。
适合给示例的场景:
- 固定格式输出
- 特定语气
- 特定风格文案
- 特定代码模式
- 审核标准
原则是:
- 少量但高质量
- 与目标任务高度相似
- 示例本身不要含糊
任务拆解
Cursor 和 Claude Code 这类 agent 对“分步骤任务”通常响应更稳。 复杂任务尽量拆成几个阶段:
- 先理解
- 再规划
- 再执行
- 最后验证 例如:
先总结知识图谱基础知识
再设计一个最小 Neo4j 图谱模型
最后生成 Markdown 文档
告诉模型如何取舍
这是很多人忽略的一点。一个优秀 prompt 会说明优先级。 例如:
- 优先准确,其次简洁
- 优先可执行,其次完整
- 优先保守,不要猜测
- 如果信息不足,先提问,不要强行输出
这能显著减少“看起来很完整但其实不可靠”的回答。
行业标准的共同点
如果把 Claude、Cursor、ChatGPT 的官方建议压缩一下,共同点基本是这 6 条:
- 清晰直接:不要绕,不要含糊
- 上下文充足:给背景、材料、限制
- 结构化表达:分块、分步骤、加分隔
- 指定输出:格式、长度、风格、字段
- 必要时给例子:比抽象描述更有效
- 可验证:说明什么结果才算成功
对写作类 Prompt 的建议
如果你是写文档、方案、汇报、文章,重点是这几个维度:
- 目标读者是谁
- 文风是什么
- 深度到什么程度
- 是否要案例
- 是否要结合行业背景
- 是否要结论导向 一个写作类 prompt 模板可以写成:
你是一名[角色],请为[目标读者]写一篇关于[主题]的内容。
目标:
– [希望解决的问题]
– [最终产物]
要求:
– 输出格式:[Markdown / PPT 提纲 / 报告]
– 风格:[专业 / 通俗 / 简洁]
– 篇幅:[字数或章节数]
– 必须包含:[A、B、C]
– 不要包含:[D、E]
验收标准:
– [什么算写得好]
– [是否需要案例、图表、代码]
对编程类 Prompt 的建议
如果你面对的是 Cursor、Claude Code 这种 coding agent,prompt 里建议多补这几类信息:
- 目标文件或目录
- 要改什么,不要改什么
- 当前错误信息
- 技术约束
- 期望验证方式
- 是否允许新增依赖
- 是否需要先分析再改
一个更适合 coding agent 的模板:
目标:
– 修复[具体问题]
上下文:
– 项目技术栈:[例如 React + TypeScript]
– 相关文件:[路径]
– 当前报错:[完整报错]
– 已尝试:[可选]
约束:
– 不要修改[某些模块]
– 不要新增依赖
– 保持现有接口不变
输出要求:
– 先说明原因
– 再给修改方案
– 最后给验证方法
验收标准:
– [页面/接口/测试]恢复正常
– 不引入新的 lint 或类型错误
最容易写坏 prompt 的几个问题
- 目标太大:一句话里塞 5 个任务
- 描述太空:只有“优化一下”“完善一下”
- 上下文缺失:不说对象、不说场景、不说约束
- 格式不定:导致输出忽长忽短、结构混乱
- 没有验收标准:模型不知道你更看重准确、速度还是完整
- 一次要求太多风格:既要专业又要口语化,既要简洁又要全面,容易冲突
实用口诀
你可以用这个简单框架来检查自己的 prompt:
任务 + 背景 + 约束 + 输出 + 标准
对应 5 个问题:
- 要做什么
- 基于什么信息
- 不能越过哪些边界
- 最终怎么输出
- 什么算完成得好
优秀的Prompt示范
- github Prompt-Engineering-Guide:https://github.com/dair-ai/Prompt-Engineering-Guide





