Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Prompt

用好 AI

Prompt(提示词)是你与 AI 沟通的语言,也是决定输出质量的第一道关卡。

同样一个 AI 模型,有人用它生成的代码可以直接跑通,有人却连编译都过不了 — 差距往往不在模型本身,而在你怎么跟它说话。


一、Prompt 是什么

Prompt 就是你对 AI 说的那句话。它可以是一句简单的提问,也可以是一段结构化的任务描述。

比如下面这些,都是 Prompt:

  • 「帮我写一段 Swift 代码,实现图片缓存」
  • 「用小学生能理解的话解释什么是 HTTP」
  • 「从产品经理视角,分析一下小红书和抖音的差异」

你对 AI 说的每一句话,都是 Prompt。

Prompt 的核心特点

  • 即时性:只存在于当前对话中,下次对话 AI 不会记得
  • 灵活性:随时调整措辞、补充条件,改变 AI 的输出
  • 门槛低,上限高:谁都能写,但写出能稳定产出高质量结果的 Prompt,需要刻意练习

Prompt 与 Rules、Skills 的区别

概念 作用 特点
Prompt 告诉 AI「这一次做什么」 一次性指令,用完即消
Rules 告诉 AI「始终遵守什么」 持久化的行为规范
Skills 告诉 AI「这类事按什么流程做」 可复用的能力模块

Prompt 像是你在餐厅点菜时说的那句话,Rules 是厨房的卫生规范,Skills 是大厨的拿手菜谱。三者配合,才能端出一桌好菜。


二、为什么 Prompt 这么重要

同样的 AI,Prompt 不同,结果天差地别

模糊 Prompt 清晰 Prompt
输入 「写个登录功能」 「用 Swift + UIKit 实现登录页,包含账号密码输入框、表单校验、网络请求,使用 async/await,不用第三方库」
AI 表现 可能给你一段没有校验、没有错误处理、甚至语言都不对的代码 直接输出一份结构清晰、可以跑通的登录模块

原因在于大模型的工作方式 — 你给的信息越模糊,它要「猜」的地方就越多,结果就越不可控。下一节详细解释。

Prompt 同时在做三件事

控制方向 — 告诉 AI 从什么角度做。

「解释 TCP」→ AI 可能泛泛而谈。

「从 iOS 开发者的角度,解释 TCP 三次握手在网络请求中的实际影响」→ 聚焦到你关心的层面。

提供上下文 — 给 AI 足够的背景信息,减少猜测空间。

你是一名资深 iOS 架构师,请设计一个支持千万级用户的订单系统,包含架构图、核心模块和数据库设计。

一句话同时给了角色、任务、约束和输出形式。信息越完整,输出越贴合预期。

施加约束 — 限定输出的范围、格式和风格。

  • 「用 200 字以内解释什么是 GitHub」
  • 「请用表格形式输出」
  • 「只列要点,不要展开论述」

一句话总结:好的 Prompt = 方向明确 + 上下文充分 + 约束具体

学习 Prompt 的深层价值

学习写好 Prompt,收益不只是「AI 听话了」:

  • 提升表达精度:写 Prompt 的过程,本质上是在梳理「我到底要什么」。很多时候你觉得 AI 输出不好,回头看看 Prompt,往往是自己没想清楚。
  • 节省时间成本:一个精准的 Prompt 可以一次到位,省去反复沟通、多轮修改的时间。
  • 建立结构化思维:Prompt 的写法(角色、背景、任务、约束、输出)其实就是一套需求分析框架,这个能力在任何协作场景中都有用。

三、底层原理:为什么 Prompt 写法影响输出质量

写不好 Prompt,往往不是技巧不够,而是不理解模型在做什么。

大模型是一台「概率接龙机」

你输入的 Prompt(上下文)
        ↓
模型计算每个 Token 出现的概率
        ↓
选出概率最高的 Token,拼接成回答

模型不是在「思考」你的问题,而是在做文本接龙 — 根据前文,预测最可能的下文。

这有点像手机输入法的联想:你打「今天天气」,输入法建议「不错」「很好」,因为这些词出现频率最高。大模型做的事本质一样,只不过「联想」范围覆盖了整个人类知识库。

由此推出的四个关键认知

(1) AI 不理解世界,它理解的是文本模式

当你问「解释 TCP 三次握手」,模型并不是在思考网络协议的工作机制。它做的是:在训练数据中找到「解释 TCP 三次握手」这个上下文最常出现的后续文本,然后生成一段最像「正确解释」的回答。

它靠的是语言中的统计规律,而不是对协议本身的理解。这就是为什么 AI 有时候能写出看似正确但细节有误的内容 — 因为它追求的是「像」,不是「对」。

(2) Prompt 越清晰,模型「猜」得越少

  • 模糊 Prompt → 概率分散 → 模型靠猜补全 → 结果不可控
  • 清晰 Prompt → 概率集中 → 生成范围被锁定 → 结果稳定

「写段代码」→ 模型要猜语言、猜功能、猜风格。「用 Swift 写一个快速排序函数,包含泛型和详细注释」→ 所有关键变量被锁定。

(3) Prompt 不是「提问」,而是「上下文编程」

很多人把 Prompt 当「提一个问题,等回答」。更准确的理解:你在用自然语言给模型写一段临时程序,配置它的输出行为

你是一名资深 iOS 工程师。请分析下面代码的线程安全问题。只输出风险点。

拆开看:

Prompt 中的文字 实际作用
你是一名资深 iOS 工程师 配置模型的知识域
请分析线程安全问题 配置执行目标
只输出风险点 配置输出过滤条件

理解这一点,你写 Prompt 时就会从「随口一问」变成「有意识地设计」。

(4) 上下文有容量限制

大模型有「上下文窗口」(Context Window),目前主流模型在 128K ~ 200K Token。超过就会截断。所以提供高质量的精炼上下文,比提供大量低质量的信息更重要

关于 Token 和上下文窗口的详细解释,参见 Token


四、如何写好 Prompt

1. 核心要素

写之前过一遍这五类信息,不需要每次全写,但心里要有这个框架:

要素 作用 示例
角色 让 AI 站在特定专业视角 「你是一名有 10 年经验的 iOS 架构师」
任务 明确要做什么 「设计一个图片缓存系统」
背景 补充项目、场景、技术栈 「项目使用 Swift 5.9 + UIKit + SnapKit」
输入 提供需要处理的素材 「以下是现有的网络层代码:...」
输出 定义格式、长度、风格 「用 Markdown 表格输出,不超过 500 字」

最小可用组合:任务 + 输出格式。只写这两条,效果也比「裸问」好很多。

完整示例

你是一名资深 iOS 工程师(角色), 请分析下面 Swift 代码在网络请求场景下可能存在的问题(任务 + 背景), 重点关注线程安全和循环引用(约束), 只列出风险点,不需要解释基础语法(输出格式)。

2. 常用结构模板

(1) 角色 + 任务 + 格式(最简)

你是 [角色]。
请 [任务]。
输出要求:[格式/长度/形式]。

你是一名资深 iOS 工程师。请解释 Swift 中 escaping closure 的使用场景。输出要求:结合网络请求回调举例,并给出代码示例。

(2) 背景 + 任务 + 约束(工程问题)

背景:[项目/技术栈/当前状况]
任务:[要完成的事]
约束:[必须/禁止/偏好]

背景:正在开发一个 iOS App,需要实现图片列表加载。

任务:设计图片加载方案。

约束:使用 Swift,不用第三方库,支持内存 + 磁盘双级缓存,列表滚动时避免重复下载。

(3) Few-shot:给示例引导

需要 AI 严格按特定格式输出时,最有效的方法不是描述格式,而是给例子。

请把用户反馈分类为:功能建议 / Bug 报告 / 其他

示例:
输入:希望支持深色模式 → 输出:功能建议
输入:点击保存会闪退 → 输出:Bug 报告

现在分类:
输入:登录时一直转圈

给了示例后,模型会非常稳定地模仿格式输出。

(4) CRISPE 框架(复杂任务)

字母 含义 作用
C Capacity / Role 定义角色
R Request 明确任务
I Input 提供输入
S Steps 指定步骤
P Personality 设定风格
E Experiment 要求多方案

示例

Role:资深 iOS 架构师

Request:根据 PRD 设计客户端技术方案

Input:以下是产品需求文档摘要:(粘贴内容)

Steps:1. 分析核心业务模块 → 2. 设计数据模型 → 3. 给出接口结构和数据流

Personality:回答风格偏工程化,直接给方案

实际使用中不需要六个全写。社区中还有 BROKE、ICIO 等框架,核心思路都类似。不必纠结用哪个,找到一个顺手的就好。

3. 进阶技巧

思维链(CoT) — 加一句「请一步步分析」,AI 会展开推理过程,准确率显著提升。适合复杂推理和 Debug 场景。

分隔符 — Prompt 同时包含指令和数据时,用 """--- 或 XML 标签把两者分开,防止模型把数据当指令执行。

请分析下面 """ 包裹的代码中的循环引用风险:

"""
class ViewController {
    var onComplete: (() -> Void)?
    func setup() {
        onComplete = { self.doSomething() }
    }
}
"""

结构化 Prompt — 当 Prompt 变复杂时,借鉴编程思路,用 Markdown 模块化组织。LangGPT 是这个思路的典型代表:

# Role: iOS 代码审查专家

## Profile
- Language: 中文
- Description: 专注于 Swift/iOS 代码质量审查

## Skills
1. 识别内存泄漏、循环引用等常见问题
2. 评估代码的可读性和可维护性

## Rules
1. 只指出实际存在的问题,不要过度解读
2. 每个问题附上具体的代码行号和修改建议

## Workflow
1. 先通读代码,理解整体结构
2. 按优先级列出问题(严重 → 一般 → 建议)
3. 给出修改后的代码示例

模块清晰、易于复用、方便迭代。当某个 Prompt 需要反复使用时,把它结构化是值得投入的优化。

4. 三个设计原则

精准描述,减少歧义

写法 问题
❌ 「优化一下这段代码」 不知道优化什么:性能?可读性?安全性?
✅ 「重构这段代码,将嵌套回调改为 async/await,保持原有功能不变」 目标明确

拆分大任务,逐步推进

第一步:「分析这段代码的架构问题,列出 3 个最严重的」

第二步:「针对第 1 个问题,给出重构方案和代码」

第三步:「检查重构后的代码是否有性能问题」

明确边界,控制发挥空间

  • 「只列出风险点,不需要解释基础概念」
  • 「不要使用第三方库」
  • 「必须包含错误处理逻辑」

5. 常见问题与解决

问题 原因 解决
输出太泛 没有限定角色和场景 加角色设定和具体场景
输出太长 没有格式约束 加「200 字以内」「只列要点」
答非所问 混了多个任务 拆成多个 Prompt
格式不对 没给输出示例 用 Few-shot 给范例
代码跑不了 没指定技术栈版本 写清语言、框架、版本

6. Prompt 的工程化管理

当 Prompt 越来越多,值得系统化管理:

模板化 — 把常用 Prompt 固定为模板,每次只替换变量部分。

版本管理 — Prompt 改一个词,输出可能完全不同。给 Prompt 编版本号(v1、v2、v3),便于对比效果和回滚。

团队沉淀 — 在团队内部建立 Prompt Library,按场景分类(代码生成、代码审查、文档写作、Bug 分析),避免重复造轮子。


五、Prompt 调试:写一半 + 调一半

好的 Prompt 不是一次写出来的,而是调出来的。

第一步:写最简版本

解释 Swift 中的 escaping closure

看 AI 怎么回答,建立「基线」。

第二步:诊断问题

问题 表现
太浅 只讲概念,没深入到实际场景
太泛 什么都提了一嘴,但没针对你的需求
缺示例 全是文字,没有代码
偏离场景 讲的是通用场景,和你的项目不匹配

第三步:补约束,迭代

从 iOS 开发角度解释 escaping closure,结合网络请求回调场景,重点说明循环引用问题及解决方案,并给出代码示例。

对比第一步的输出,不满意就继续微调。先写「能跑」的版本,再有针对性地加约束、加示例、加角色 — 比冥思苦想一个「完美 Prompt」高效得多。


六、实战示例

几个常见开发场景的 Prompt,可以直接复用或根据你的技术栈微调。

代码解释

你是一名资深 iOS 工程师。请解释下面 Swift 代码的作用,重点说明线程安全和潜在问题。用要点列出,每个要点不超过两句话。

代码重构

请重构下面的 Swift 代码:1. 将回调嵌套改为 async/await;2. 保持原有功能不变;3. 添加错误处理;4. 提高可读性。

Bug 分析

下面是一段 Swift 代码和崩溃日志。请分析崩溃原因,列出排查思路,给出修复建议。重点关注内存管理和线程安全。

技术方案设计

你是一名 iOS 架构师。根据下面的需求,设计客户端实现方案,包括:模块划分、核心数据模型、关键接口设计、技术风险。输出用 Markdown 格式。

代码审查

请审查下面的代码,从代码规范、潜在 Bug、性能、可维护性四个角度给出反馈。每个问题附上具体代码行和修改建议。


七、常用资源

资源 说明
OpenAI Prompt Engineering 指南 官方最佳实践
Claude Prompt Engineering 文档 Anthropic 官方指南
LangGPT 结构化 Prompt 设计方法,中文社区活跃
Claude 提示词库 官方示例库,覆盖多种场景
通往 AGI 之路 AI 学习社区,含 Prompt 案例

使用建议:先理解角色、任务、约束、示例这些核心要素,再去模板站找相近场景改一改。在日常工作中刻意练习「加角色、加约束、加示例」,比只看教程进步快。效果好的 Prompt 保存下来按场景归类,下次直接复用。


八、Prompt 的局限

Prompt 是与 AI 交互的基础,但它有明确的能力边界。

上下文窗口有限 — 你无法把整个代码仓库一次性塞给 AI。信息不全时,AI 会用「常识」补全,这就是幻觉的来源之一。

单次 Prompt 驾驭不了复杂任务 — 涉及多文件、多步骤、多角色配合时,模型容易漏步骤、忘约束。Prompt 最适合「单点、明确、少步骤」的任务。

Prompt 无法替代系统化流程 — 完整的开发流程(需求 → 架构 → 编码 → 测试)靠 Prompt 推进,环节之间缺乏稳定衔接。这正是 RulesSkillsAgentMCP 出现的原因 — 当任务复杂到一定程度时,你需要从「写一句指令」升级到「配置一套系统」。