Prompt 的本质不是「聊天」,是「编程」
🦞 一只用 AI Agent 搭副业产线的程序员
你看过 ChatGPT 的聊天框吗?大多数人往里面打字的样子,像是在跟一个人类同事说话。
「你好,能帮我写个函数吗?哦对了,要有错误处理。嗯……还要加个超时。算了,你先写个基础版吧。」
这不是在跟人说话。这是在烧 token。
这篇文章可能会让你不舒服。因为它会打破你对 Prompt 的一个核心误解。
Prompt 不是自然语言,是自然语言写的「代码」
给你看两组 Prompt,同一个任务——让 AI 从一段文字里提取人名、公司和职位。
Prompt A(大多数人写的):
帮我从下面这段文字里提取一下里面提到的人名、公司还有他们的职位,谢谢啦!
{text}
Prompt B(把 Prompt 当代码写的人写的):
从以下文本中提取实体信息,按 JSON 格式返回。
文本:
{text}
输出格式(严格遵守,不要输出任何其他内容):
{
"people": [
{"name": "姓名", "company": "公司", "title": "职位"}
]
}
规则:
- 如果某个字段无法确定,填 "未知",不要留空
- 同一个人只出现一次
- 按人名拼音首字母排序
同一个任务。同样的模型。同样的输入。
Prompt A 的返回:
好的!我从文字中提取了以下信息:
人名:张三、李四
公司:阿里巴巴、腾讯
职位:张三好像是高级工程师,李四是产品经理
Prompt B 的返回:
{
"people": [
{"name": "李四", "company": "腾讯", "title": "产品经理"},
{"name": "张三", "company": "阿里巴巴", "title": "高级工程师"}
]
}
差别在哪?
Prompt A 是在「聊天」。Prompt B 是在「编程」。
组成一个「程序化 Prompt」的 5 个要素
我拆解一下 Prompt B 的结构:
1. 任务定义(做什么)
从以下文本中提取实体信息,按 JSON 格式返回。
2. 输入数据(给什么)
文本:{text}
3. 输出格式(怎么给我)
{ "people": [{"name": "", "company": "", "title": ""}] }
4. 约束规则(边界条件)
- 不确定填"未知"
- 去重
- 排序
5. 负面指令(不要做什么)
不要输出任何其他内容
一个有经验的程序员写 Prompt,跟写函数签名没什么两样:
// 这像一个函数签名
func ExtractEntities(text string) []Person
# 像 API 文档
Endpoint: /extract-entities
Method: POST
Input: { text: string }
Output: { people: [{name, company, title}] }
Errors: 不确定填"未知"
把 Prompt 当 API 写。别当聊天写。
一个实验:好 Prompt vs 烂 Prompt 的可复用性
我做了一个实验。上面那个提取人物的 Prompt,我跑了 50 段不同的新闻文本。
Prompt A(聊天式):
| 指标 | 结果 |
|---|---|
| 返回 JSON 格式(可用代码解析) | 23/50(46%) |
| 人名提取正确率 | 78% |
| 没有废话(不含「好的」「当然」) | 8/50(16%) |
| 平均输出 token 消耗 | 180 |
46% 的情况返回的不是 JSON——可能是「好的!……」,可能是「以下是人名列表:……」,可能多了一段「总结」。你没法在代码里稳定地解析这种输出。
Prompt B(程序式):
| 指标 | 结果 |
|---|---|
| 返回 JSON 格式 | 50/50(100%) |
| 人名提取正确率 | 91% |
| 没有废话 | 50/50(100%) |
| 平均输出 token 消耗 | 85 |
100% 可解析。正确率高于 A。输出 token 还省了一半。
同样的模型能力,输出质量差了 13%。成本差了 1 倍。
为什么「聊天式 Prompt」不稳定
LLM 的核心机制决定了——它不知道你是在「聊天」还是在「下指令」。
你用聊天的语气,它就切到了聊天的模式。聊天模式下,AI 会:
- 寒暄(浪费 token)
- 加修饰词(浪费 token)
- 可能理解偏差(你说的「帮我搞一下」到底是生成、提取、还是翻译?)
你用语精确、格式明确、边界清晰——它就直接干活了。
AI 的「性格」不是你设定的,是 Prompt 风格塑造的。
三条铁律
铁律一:输出格式先定好
永远告诉 AI 你期望的输出格式。JSON、Markdown、代码块、纯文本——你不说,它就自己决定。它决定的通常不是你想要的。
# 烂
"把这个文本总结一下"
# 好
"把以下文本总结为 3 个要点,每个要点不超过 50 字,用 Markdown 列表格式输出。"
# 更好
"把以下文本总结为 3 个要点,按此格式输出:
- 要点1(≤50字)
- 要点2(≤50字)
- 要点3(≤50字)
不要输出其他内容。"
铁律二:说「要什么」的同时说「不要什么」
AI 不是人。人听到「总结」自然知道不要写废话。AI 不一定。
# 烂
"分析这段代码"
# 好
"分析这段代码的安全漏洞。
不要列优点、不要写总结、不要给修复建议(我会在下次提问时问)。
只输出漏洞列表。"
铁律三:把 Prompt 当成要维护的代码
不要每次临时在对话框里写。用文件管理、用 Git 版本控制、用变量替换。
后面会专门讲怎么构建一个 Prompt 模板引擎。
一句话总结
| 烂 Prompt | 好 Prompt |
|---|---|
| 像在跟人聊天 | 像在写 API 文档 |
| 输出不可预测 | 输出格式固定 |
| 每次用要临时改 | 模板化,变量替换 |
| 效果不稳定 | 效果可复现 |
| 只能自己用 | 团队能共享 |
从下一篇开始,你写的每一个 Prompt 都将是「代码化」的:有结构、有格式、有约束。能复用、能调试、能测试。
下一篇我们拆解 System Prompt 和 User Prompt 的分工——并且用 JSON 配置驱动一个完整的 Prompt 管理器。
关注我,别错过。
🦞 一只用 AI Agent 搭副业产线的程序员
全平台同名:虾哥不加班
需要定制 AI 工具?来聊聊 → lob_ai
更多推荐



所有评论(0)