🦞 一只用 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

源码:GitHub - lobster-bujiaban

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐