AI入门------什么是提示词Prompt?
- AI入门------什么是提示词Prompt?
-
- Prompt基本概念
-
- [Prompt(提示词):Agent 的「行动准则」](#Prompt(提示词):Agent 的「行动准则」)
- 如何使用Prompt
- 如何写好Prompt
- 优秀的Prompt示范
AI入门------什么是提示词Prompt?
Prompt基本概念
Prompt(提示词):Agent 的「行动准则」
-
本质 :Prompt不是大模型的能力来源而是大模型能力约束和行为准则。Prompt 先把"要做什么"说清楚,比如是回答问题、改代码、做调研,还是先规划后执行。没有这个目标约束,大模型很容易做出"看起来努力,但方向不对"的行为。所以Prompt不是简单的「问问题」,而是「结构化的指令集」------ 包含「角色定义 + 任务目标 + 执行规则 + 上下文 + 输出格式」。
-
核心作用:
① 定义 Agent 的「角色」(比如「你是一名电商客服 Agent,语气要友好」);
② 明确「任务边界」(比如「只处理退货咨询,不回答价格问题」);
③ 给出「执行步骤」(比如「先核实用户订单,再确认退货原因,最后生成退货链接」);
④ 约束「输出格式」(比如「用 JSON 返回结果,包含订单号、退货原因、链接」)。
-
工作方式:
Agent 启动时先「读取 Prompt」,把 Prompt 作为「核心上下文」存入记忆,后续所有决策都基于 Prompt 的规则。
举个实际的 Prompt 例子(电商客服 Agent):
plaintext角色:你是某电商平台的退货处理Agent,仅处理已付款订单的退货咨询。 规则: 1. 先向用户索要订单号,验证订单是否已付款; 2. 若未付款,告知用户「未付款订单无法退货」,结束对话; 3. 若已付款,询问退货原因,生成对应退货链接; 4. 输出格式:{"订单号":"xxx","退货原因":"xxx","退货链接":"xxx"}。Agent 会严格按照这个 Prompt 的逻辑执行,不会偏离规则。
如何使用Prompt
Prompt的作用
下面以一个例子来说明使用prompt的好处,我们提问
-
Q:生成一个打印99乘法表的代码
-
AI:给你最常用、最简单的 99 乘法表代码,复制直接运行👇
-
Python 版(最简洁)
python
运行 打印99乘法表
pythonfor i in range(1, 10): for j in range(1, i + 1): print(f"{j}×{i}={i*j}", end="\t") print() -
Java 版
javapublic 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++ 版
cpp#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; }
运行效果
plaintext1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ... 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81 -
由于提问中缺少输出的限定(比如限定某种语言),AI会一下子给我们输出了python/java/c++三个版本,可能我们只需要java版本,白白浪费了python和c++的token;另一种场景可能大模型只输出c++不满足我们的要求。
下面我们对大模型的输出结果限定,只允许输出java版本,这时我们可以限定
-
Q:你是一名java开发工程师,生成一个打印99乘法表的代码
-
AI:好的,作为一名 Java 开发工程师,我为你提供规范、工整、可直接运行的 99 乘法表 Java 代码,注释详细、格式对齐,完全符合开发规范
javapublic 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(); } } }运行效果(控制台输出)
plaintext1 × 1 = 1 1 × 2 = 2 2 × 2 = 4 1 × 3 = 3 2 × 3 = 6 3 × 3 = 9 1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16 ......一直到 9×9
这时可以看到代码更加专业(类名、注释等)。但是代码风格还有一些差异,比如我们一般用通用日志组件如slf4j+log4j等替代控制台输出。我们可以继续加一些约束
- Q:你是一名java开发工程师,生成一个打印99乘法表的代码,使用slf4j打印日志,并检测代码是否符合业界java代码编码规范
- AI:符合业界规范的 Java 99 乘法表(SLF4J 日志版)
作为 Java 开发工程师,我为你编写企业级规范代码:
使用slf4j-api + logback-classic打印日志(业界标准日志方案)
严格遵循 Alibaba Java 开发手册 / Oracle 编码规范
类、方法、变量命名规范,注释完整,格式统一
可直接运行、无警告、无硬编码、结构清晰
java
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:
xml
<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>
运行效果
plaintext
[main] INFO MultiplicationTableGenerator - ===== 开始打印九九乘法表 =====
[main] INFO MultiplicationTableGenerator - 1*1=1
[main] INFO MultiplicationTableGenerator - 1*2=2 2*2=4
[main] INFO MultiplicationTableGenerator - 1*3=3 2*3=6 3*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的核心要素
核心要素
目标明确
上下文充分
约束清晰
输出格式明确
评价标准明确
示例优先
任务拆解
任务拆解
告诉模型如何取舍
目标明确
不要只说"帮我优化一下"或"写一份文档",要说清楚你到底要什么结果。 好的 prompt 会回答这几个问题:
- 要做什么
- 为谁做
- 解决什么问题
- 最终产物是什么
例如:
弱:帮我写知识图谱文档
强:写一篇面向初学者的知识图谱 Markdown 文档,包含基础概念、应用场景,以及一个用 Neo4j 构建简单图谱的案例
上下文充分
Claude、Cursor、ChatGPT 的共同原则都是:模型不是读心术,缺什么就补什么。 常见上下文包括:
- 背景信息
- 目标读者
- 使用场景
- 已有材料
- 技术栈 / 文件路径 / 约定
- 当前问题和限制
对 coding agent 尤其重要的是:
- 指定文件、目录、符号
- 提供报错信息
- 说明当前状态和已有尝试
约束清晰
好 prompt 不是"越开放越好",而是要明确边界。
常见约束有:
- 不要改哪些内容
- 使用什么语言或框架
- 输出长度
- 风格要求
- 是否允许联网、安装依赖、改配置
- 是否需要兼容旧系统
例如:
plaintext
使用 Markdown 输出
不要写成论文腔
代码示例使用 Cypher
不修改已有业务逻辑
输出格式明确
这是 OpenAI 和 Anthropic 都反复强调的重点。你越明确结果长什么样,模型越稳定。 建议提前规定:
- 输出结构
- 标题层级
- 是否用表格
- 是否要代码块
- 是否要分步骤
- 是否要 JSON / Markdown / SQL / PRD
例如:
plaintext
请按"概念介绍 / 核心组成 / Neo4j 案例 / 总结"四部分输出
每部分 3 到 5 个自然段
每部分 3 到 5 个自然段
所有代码放在代码块中
评价标准明确
最好的 prompt 不只是说"做什么",还会说"什么算做好"。 这在 Claude Code、Cursor 这类 agent 场景里特别重要。
常见验收标准:
- 内容完整
- 逻辑清楚
- 可执行
- 没有编造
- 术语准确
- 示例能直接运行
- 风格符合受众
例如:
plaintext
文档要让零基础读者也能看懂
Neo4j 示例要能直接复制执行
避免空泛定义,尽量用例子解释
示例优先
Anthropic 和 OpenAI 都很强调 few-shot examples。如果你对输出风格有明确预期,最有效的方法往往不是"描述",而是"给例子"。
适合给示例的场景:
- 固定格式输出
- 特定语气
- 特定风格文案
- 特定代码模式
- 审核标准
原则是:
- 少量但高质量
- 与目标任务高度相似
- 示例本身不要含糊
任务拆解
Cursor 和 Claude Code 这类 agent 对"分步骤任务"通常响应更稳。 复杂任务尽量拆成几个阶段:
- 先理解
- 再规划
- 再执行
- 最后验证
例如:
plaintext
先总结知识图谱基础知识
再设计一个最小 Neo4j 图谱模型
最后生成 Markdown 文档
告诉模型如何取舍
这是很多人忽略的一点。一个优秀 prompt 会说明优先级。 例如:
- 优先准确,其次简洁
- 优先可执行,其次完整
- 优先保守,不要猜测
- 如果信息不足,先提问,不要强行输出
这能显著减少"看起来很完整但其实不可靠"的回答。
行业标准的共同点
如果把 Claude、Cursor、ChatGPT 的官方建议压缩一下,共同点基本是这 6 条:
- 清晰直接:不要绕,不要含糊
- 上下文充足:给背景、材料、限制
- 结构化表达:分块、分步骤、加分隔
- 指定输出:格式、长度、风格、字段
- 必要时给例子:比抽象描述更有效
- 可验证:说明什么结果才算成功
对写作类 Prompt 的建议
如果你是写文档、方案、汇报、文章,重点是这几个维度:
- 目标读者是谁
- 文风是什么
- 深度到什么程度
- 是否要案例
- 是否要结合行业背景
- 是否要结论导向
一个写作类 prompt 模板可以写成:
plaintext
你是一名[角色],请为[目标读者]写一篇关于[主题]的内容。
目标:
- [希望解决的问题]
- [最终产物]
要求:
- 输出格式:[Markdown / PPT 提纲 / 报告]
- 风格:[专业 / 通俗 / 简洁]
- 篇幅:[字数或章节数]
- 必须包含:[A、B、C]
- 不要包含:[D、E]
验收标准:
- [什么算写得好]
- [是否需要案例、图表、代码]
对编程类 Prompt 的建议
如果你面对的是 Cursor、Claude Code 这种 coding agent,prompt 里建议多补这几类信息:
- 目标文件或目录
- 要改什么,不要改什么
- 当前错误信息
- 技术约束
- 期望验证方式
- 是否允许新增依赖
- 是否需要先分析再改
一个更适合 coding agent 的模板:
plaintext
目标:
- 修复[具体问题]
上下文:
- 项目技术栈:[例如 React + TypeScript]
- 相关文件:[路径]
- 当前报错:[完整报错]
- 已尝试:[可选]
约束:
- 不要修改[某些模块]
- 不要新增依赖
- 保持现有接口不变
输出要求:
- 先说明原因
- 再给修改方案
- 最后给验证方法
验收标准:
- [页面/接口/测试]恢复正常
- 不引入新的 lint 或类型错误
最容易写坏 prompt 的几个问题
- 目标太大:一句话里塞 5 个任务
- 描述太空:只有"优化一下""完善一下"
- 上下文缺失:不说对象、不说场景、不说约束
- 格式不定:导致输出忽长忽短、结构混乱
- 没有验收标准:模型不知道你更看重准确、速度还是完整
- 一次要求太多风格:既要专业又要口语化,既要简洁又要全面,容易冲突
实用口诀
你可以用这个简单框架来检查自己的 prompt:
任务 + 背景 + 约束 + 输出 + 标准
对应 5 个问题:
- 要做什么
- 基于什么信息
- 不能越过哪些边界
- 最终怎么输出
- 什么算完成得好
优秀的Prompt示范
- github Prompt-Engineering-Guide :https://github.com/dair-ai/Prompt-Engineering-Guide