微信扫码
添加专属顾问
我要投稿
探索人工智能时代的关键技能——提示工程
核心内容:
1. 提示工程的兴起与行业需求
2. 提示与大模型互动的原理
3. 提升大模型输出质量的技巧
今天咱们要重点探讨一个在人工智能大模型时代中相当关键的领域:提示工程(Prompt Engineering)。现在已经有了专门的职位叫“提示工程师”,足见这项技能在业内的火热程度。国内一些公司给提示工程师的薪水与软件开发工程师的待遇几乎持平,年薪可达 20~30 万人民币;而在海外,部分资深提示工程师的收入甚至高达 30 万美元以上。这种超越一般软件开发岗位薪酬的现象让很多人都倍感惊讶。是什么原因导致了提示工程师如此吃香?要揭开这个谜团,我们先得知道什么是“提示”,进而明白什么是“提示工程”。
你也许会问:我们日常使用大模型,不就是在“提问”并得到“回答”吗?哪里看得见什么“提示”?其实,如果去读一下 OpenAI 的官方文档就会发现,文档里几乎看不到“问答”两个词,取而代之的是“prompt”和“completion”,翻译过来就是“提示”和“补全”。也就是说,当我们向大模型输入某个问题时,其实是在给模型一个“提示”,而它所生成的那部分文本则叫“补全”。
之所以这么称呼,和大模型的训练原理密切相关。GPT 这类模型多基于 Transformer 架构里的解码器机制,并通过自回归的无监督预训练方法来“记忆”海量文本。简单说,就是模型在接受了海量文本训练后,会对输入的“提示”进行概率推断,依次生成最有可能出现的后续文本——这就形成了我们平时所看到的回答。
大模型每次输出一个字(或一个 token)都在计算概率,所以生成速度相对而言不算快。可见,“提示”是我们与大模型互动时最重要的沟通桥梁,也正是提示工程得以存在的基础。
相信很多人第一次用 ChatGPT 时,都被它令人惊艳的表现所折服,甚至觉得它能“读懂”人的情绪。然而,等到第二天再用,往往会觉得它生成的回答未必如想象般丰富,甚至显得有些重复和缺乏新意。
出现这种落差,可能是因为提示没给好。大多数人给大模型的指令都过于简短,比如:
就拿【提示一】来说,试想一下,你有一个秘书小李,想让他帮忙做个 PPT,你们的对话一般来说应该是这样的:
??:小李,请帮我写一个 PPT。
?:老板,您的 PPT 需要什么内容,用来做什么?
??:我明天去拜访客户,向客户展示我们的新产品。
?:那您需要简要介绍还是详细介绍?除了产品还需要放其他内容吗?
??:简要介绍即可,除了产品介绍,再放一些客户案例。
?:好的,老板,您需要什么风格的 PPT 呢?
??:有科技感一点的。
?:好的,老板。
但是,如果把大模型当作你的“虚拟员工”或秘书,你就会发现:要想让它输出满足你需求的结果,你得先把需求本身说得够清楚、够详细。一个高质量的提示,通常会把任务场景、目标、示例、角色、风格等信息都写明,让模型尽量“理解”你要的是什么。
正常来说,你是需要向小李详细描述你的 PPT 内容的,这样小李才能尽可能准确地制作符合你要求的 PPT,其实上面的对话还不够详细,不出预料,当小李把初稿发给你后,你还会提出一些建议,再次进行修改,有时甚至会修改多轮。
如果把大模型当作秘书小李的话,那我们给他的提示就不应该是简单的一句话了,而是尽可能地将需求描述清楚,需求描述越详细越准确,大模型输出的内容越符合你的要求。所以说好的提示,包含很多信息,这些信息帮助你和大模型相互了解,所以它是复杂的、规范的,类似于人与人相处,要相互了解才能合作愉快、高效。
因此,提示工程(Prompt Engineering)就是一门研究如何设计最佳提示、让语言模型更加高效地完成特定任务的新兴学科。它不仅包括提示的编写与迭代,还涉及如何与大模型对接、理解大模型的局限和潜能,从而利用它来完成各种工作。换句话说,如果把大模型看作一位高智商的“全能员工”,那么提示工程就是如何训练自己具备“带领它做事”的能力,也即我们所谓的“AI 领导力”。
做过团队管理的人都知道,“领导力”对一个管理者而言极其重要。而随着 AI 大模型的发展,我们手里其实就有了一名“虚拟员工”——它在理论上拥有海量知识和不俗的理解力,但能否让它取得出色表现,关键还得看你怎么带。
一个拥有 140+ 智商、储备了全世界大部分公开信息的员工,你有没有把握去管理好?尽管这个问题听起来吓人,但解决思路很简单——我们要提升自身的AI 领导力。在与 AI 打交道的过程中,提示就是唯一的沟通媒介,只有掌握了提示技巧,我们才能发挥出这位“虚拟员工”的最大潜能。
要得到令人满意的输出结果,通常有两种方法:
我更推荐第二种,原因在于:一次性写完整了,模型对上下文的理解会更加直接清晰。根据实践经验,可以用下面这条“小公式”来构思一个好提示,主要包括如下几个模块:
这几个模块的优先级通常是:任务 > 上下文 > 示例 > 角色 > 格式 > 语气。一个高质量的提示,不一定要全部包含,但至少“任务”和“上下文”是必备的。
举个开发场景的例子:如果你想让大模型帮忙生成一个用户登录模块的示例代码,你可以这样写:
❝你是一个软件开发工程师,请使用 Java 语言,写一个登录的模块,生成相关代码。
我们为模型指定了角色:软件开发工程师,并指定使用 Java 写一个登录模块。以下是 ChatGPT3.5 返回的结果。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
publicclass LoginModule {
private Map<String, String> userDatabase;
public LoginModule() {
// 初始化用户数据库,实际应用中通常会连接到数据库
userDatabase = new HashMap<>();
userDatabase.put("user1", "password1");
userDatabase.put("user2", "password2");
// 添加更多用户...
}
public boolean authenticateUser(String username, String password) {
// 在实际应用中,这里通常会连接到数据库,验证用户名和密码是否匹配
String storedPassword = userDatabase.get(username);
return storedPassword != null && storedPassword.equals(password);
}
public static void main(String[] args) {
LoginModule loginModule = new LoginModule();
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名: ");
String username = scanner.nextLine();
System.out.print("请输入密码: ");
String password = scanner.nextLine();
if (loginModule.authenticateUser(username, password)) {
System.out.println("登录成功!");
} else {
System.out.println("登录失败,用户名或密码错误!");
}
scanner.close();
}
}
可以看出来,并不是我们想要的代码,因为一般情况下我们需要的是 Web 页面登录,而上述结果是一个控制台程序,所以我们接着修改提示。
❝你是一个软件开发工程师,请使用 Java 语言,写一个 Web 登录的模块,请使用 SpringBoot 框架,前端使用 ReactJS 语言,要求密码使用 MD5 加密。第一步:用户在页面输入用户名和密码,点击登录。第二步:服务端接口收到请求,对参数进行非空验证。第三步:通过数据库查询用户名和密码进行验证。请生成相关代码。
这一次我们不仅指定了角色,还为任务指定了生成步骤,当然模型输出的内容也更加详细了。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
publicclass UserController {
@PostMapping("/login")
public String login(@RequestBody UserLoginRequest request) {
// 第二步:非空验证
if (request.getUsername() == null || request.getPassword() == null) {
return"用户名和密码不能为空";
}
// 第三步:数据库验证
if (isValidUser(request.getUsername(), request.getPassword())) {
return"登录成功";
} else {
return"用户名或密码错误";
}
}
private boolean isValidUser(String username, String password) {
// 这里应该调用数据库查询用户信息的方法,进行用户名和密码的验证
// 在实际项目中,不应该将密码存储为明文,而是使用哈希算法进行存储和比对
// 这里仅为演示,实际中应该使用更安全的方式
return"admin".equals(username) && "21232f297a57a5a743894a0e4a801fc3".equals(md5(password));
}
private String md5(String input) {
// 这里是一个简单的MD5加密示例,实际项目中应该使用更安全的加密方式
// 注意:MD5不是安全的加密算法,仅作为演示使用
// 实际项目中应该使用更安全的哈希算法,如BCrypt
// 可以使用Spring Security等库来进行密码的安全处理
return org.apache.commons.codec.digest.DigestUtils.md5Hex(input);
}
}
加入了 UserController,定义了 RESTful 接口,但是数据库连接部分还是通过注释提示的,没有生成出来,我们可以继续优化提示。
❝你是一个软件开发工程师。请生成一个 Web 用户登录模块。前端使用 ReactJS+CSS+HTML 进行页面布局和发起 HTTP 请求。后端请使用 Java+SpringBoot+MyBatis 框架,使用 Maven 进行依赖包管理。要求密码使用 MD5 加密,并将具体的数据库连接代码生成出来。请按照以下步骤生成代码。第一步:用户在页面输入用户名和密码,点击登录。第二步:前端发起 HTTP 请求,服务端接口收到请求,对参数进行非空验证。第三步:通过数据库查询用户名和密码进行验证。请生成相关代码。
当我们这样提问后,基本该有的代码都有了,数据库连接也加上了,前端页面的代码也补上了。这是一个简单的示例,需要注意的是,不同的大模型实现机制以及配置不同,你需要通过不断调试,找到合适的方式和大模型进行沟通交互,最终构建最合适的提示。
有一个特别有意思的方法,就是让 ChatGPT 帮你写“提示”,也就是用提示去生成更好的提示。可以尝试在对话中告诉 ChatGPT:
❝“我想让你做我的提示工程师。我们的目标是一起打磨一个最合适的提示。你先问我需要做什么,我来回答,然后你给出改进后的提示方案和需要补充的问题。我们反复迭代,直到我觉得完成为止。”
查看:https://chatgpt.com/share/67d6e2f6-9f70-8001-b4f9-345ec14822e8
这个工具的厉害之处在于,只要我们不喊停,它就会一直问,可以把提示调整得非常完善,这一步后,我就主动叫停了。
通过这种自问自答式的引导,我们就能不断完善提示,让需求指令越来越明确,最后得出一个十分完善的提示方案。这个方法特别强大,对于新手或在需求描述中仍不够熟练的人来说,能极大地提高效率,且减少与大模型交流时的反复。
人工智能正在以超乎想象的速度演进。对很多软件工程师来说,这意味着不久的将来,编程的重点可能会从“写代码”转移到“写提示”。换句话说,我们极有可能在五年内,迎来软件开发从“代码思维”到“提示思维”的大变革。如今我们存储在 GitHub 或代码仓库里的各种源代码,将来或许就会被各类“提示库”取代。
目前,软件开发人员的工作流程是:
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-16
这段Prompt提示词生成的自我介绍卡,让别人3年后还记得你
2025-04-16
思维链 (Chain of Thought)是什么?有什么价值?怎么用?
2025-04-16
大模型Prompt工程:从理论到实践
2025-04-16
重磅!OpenAI 官方发布 GPT-4.1 最强提示词指南,AI 能力全面升级!
2025-04-15
提示词(prompt)那些事
2025-04-15
高级提示工程
2025-04-14
小白也能写出专业文生图Prompt,超棒的提示词框架+AI生图工具分享。
2025-04-13
提示工程的本质:从Anthropic专家视角看如何有效与AI对话
2024-08-20
2024-06-29
2023-06-08
2024-09-17
2024-06-27
2024-06-26
2024-07-09
2024-07-12
2024-09-16
2024-06-14
2025-04-16
2025-04-11
2025-02-25
2025-02-21
2025-01-05
2025-01-04
2024-12-15
2024-11-15