七月 Prompt 工程复盘:这一个月我们踩过的提示词十大坑
七月 Prompt 工程复盘这一个月我们踩过的提示词十大坑一、七月的 Prompt 迭代记录像一份事故调查报告翻开七月的工作日志有关 Prompt 的修改记录占了 40%。修改 System Prompt 角色设定→测试 3 次→回滚、增加 2 个 Few-shot 示例→输出长度暴增→删除示例、添加输出格式约束→JSON 解析失败率 15%→切换为 Markdown 表格。这些问题单看都不大。但每个都浪费了至少半天时间。十个问题加起来七月有整整五个工作日消耗在了 Prompt 调试上。更深的痛点是同样的 Prompt 在 GPT-4 上效果很好换到 Qwen 上输出格式完全不同。多模型兼容的代价是 Prompt 复杂度指数级增长。见证奇迹的时刻不是 Prompt 突然变好了——是整理完这十个坑之后发现其中七个有通用的解决方案。这篇文章就是这份解决方案的总结。二、十大坑的根因分析十个坑按阶段分为三类设计阶段的 3 个、执行阶段的 4 个、评估阶段的 3 个。最严重的四个标红是角色设定模糊、JSON 格式失控、缺乏量化指标、版本管理缺失。见证奇迹的时刻当你意识到花在 Prompt 调试上的时间里80%消耗在不确定这个改动是变好了还是变坏了——缺乏量化评估是一切问题的放大器。三、十大坑的逐一拆解与解决方案坑1角色设定模糊症状System Prompt 写你是一个专业助手输出风格时准时飘忽。根因模糊的角色定义让 LLM 在自由发挥和遵循指令之间摇摆。# ❌ 模糊的角色设定 SYSTEM_PROMPT_BAD 你是一个专业的技术助手请帮助用户解决问题。 # ✅ 明确的角色设定含具体能力边界和行为规范 # 设计原因明确告知LLM能做什么和不能做什么 # 比单纯的角色标签更能约束行为边界 SYSTEM_PROMPT_GOOD 你是一个专注于Python后端开发的技术助手。 能力范围 - Python 3.10 语法和最佳实践 - FastAPI、Django框架使用 - PostgreSQL、Redis数据库操作 - Docker容器化部署 行为规范 - 代码示例必须可运行包含必要的import语句 - 不输出超过100行的代码块 - 对不确定的问题明确说我不确定 - 使用简体中文回复代码注释使用英文 禁止事项 - 不提供前端代码除非与后端API交互相关 - 不讨论非技术话题 - 不自称专家或资深 坑4JSON 格式失控症状让 LLM 输出 JSON结果包裹在 markdown 代码块里或者多了逗号、少了引号。根因LLM 不是 JSON 生成器它在理解内容和遵守格式之间的优先级取决于训练数据。def parse_llm_json_output(raw_output: str) - dict: 健壮的JSON解析器。 设计原因LLM输出的JSON有五种常见变异 每种都需要专门处理不能依赖单次json.loads。 import json import re # 策略1直接解析最理想的情况 try: return json.loads(raw_output) except json.JSONDecodeError: pass # 策略2提取markdown代码块中的JSON # 设计原因GPT-4等模型经常把JSON包裹在json中 json_block re.search(r(?:json)?\s*\n?(.*?)\n?, raw_output, re.DOTALL) if json_block: try: return json.loads(json_block.group(1)) except json.JSONDecodeError: pass # 策略3提取第一个{...}或[...] # 设计原因有时候JSON前后有解释文字 json_match re.search(r(\{.*\}|\[.*\]), raw_output, re.DOTALL) if json_match: try: return json.loads(json_match.group(1)) except json.JSONDecodeError: pass # 策略4修复常见JSON错误 # 设计原因LLM偶尔会生成尾部逗号、单引号等非标准JSON cleaned raw_output cleaned re.sub(r,\s*}, }, cleaned) # 移除尾部逗号 cleaned re.sub(r,\s*], ], cleaned) # 移除数组尾部逗号 cleaned cleaned.replace(, ) # 单引号转双引号(谨慎使用) try: return json.loads(cleaned) except json.JSONDecodeError: pass # 策略5提取所有键值对 # 设计原因最坏情况—从自由文本中提取字段 kv_pattern re.findall(r(\w)\s*:\s*([^]*), raw_output) if kv_pattern: return dict(kv_pattern) raise ValueError(f无法解析LLM输出为JSON: {raw_output[:200]})坑8缺乏量化指标from dataclasses import dataclass from typing import List dataclass class PromptEvalMetrics: Prompt评估指标。 设计原因将感觉好多了转化为可比较的数字 这是Prompt工程从艺术到工程的转变点。 format_compliance: float # 格式符合率 (0-1) hallucination_rate: float # 幻觉率 (0-1) avg_output_length: int # 平均输出长度 task_success_rate: float # 任务成功率 (0-1) json_parse_success: float # JSON解析成功率 (0-1) def compare_with(self, baseline: PromptEvalMetrics) - dict: 与基线对比量化改进幅度 return { format: self.format_compliance - baseline.format_compliance, hallucination: baseline.hallucination_rate - self.hallucination_rate, success: self.task_success_rate - baseline.task_success_rate, }坑10版本管理缺失Prompt 也需要版本管理。每次修改 Prompt 后记录修改了什么、为什么改、对哪个指标有什么影响。简单的 Git 提交信息就是最低成本的版本管理。四、Prompt 工程的边界权衡越长越好 vs 越精越好很多人认为 Prompt 越详细越好。但超过 500 字的 System Prompt 反而降低了关键指令的遵循度。长 Prompt 中LLM 的注意力被分散。核心约束放在开头和结尾中间放示例。Few-shot 数量0-shot 适合简单任务。1-3 shot 适合格式约束。5-shot 以上边际收益递减。见证奇迹的时刻当从 3-shot 增加到 5-shot 后格式符合率仅提升 2%但 token 消耗增加了 60%。通用 Prompt vs 场景特化一个 Prompt 覆盖所有场景是不可能的。务实的分层策略公共部分提取为基础模板场景特有约束作为叠加层。五、总结七月 Prompt 工程复盘揭示了十大常见问题按阶段分类为设计阶段 3 个角色定义模糊、指令冲突、Few-shot 质量低、执行阶段 4 个JSON 解析失败、Token 预算超支、跨模型兼容、温度参数不当、评估阶段 3 个缺乏量化指标、测试用例不足、版本管理缺失。核心解决方案包括角色定义需包含明确的能力边界和行为禁止项、JSON 输出需多策略容错解析、Prompt 评估必须引入量化指标替代主观判断、版本管理需至少保留修改记录和指标变化。Prompt 的长度的收益在 500 字附近达到最优Few-shot 数量超过 3-5 条后边际收益快速递减。

相关新闻

ResNet残差网络:原理、实现与工业应用指南

ResNet残差网络:原理、实现与工业应用指南

1. 残差网络的前世今生:从退化问题到深度学习革命2015年,当微软研究院的何恺明团队在ImageNet竞赛中以3.57%的错误率夺冠时,整个计算机视觉领域都为之震动。这个名为ResNet的架构不仅超越了人类5%左右的识别错误率,更破解了困扰深…

2026/10/14 11:46:09 阅读更多 →
Qt QWebSocket实战:从零构建实时双向通信服务端与客户端

Qt QWebSocket实战:从零构建实时双向通信服务端与客户端

1. 项目概述:为什么选择QWebSocket?在开发需要实时双向通信的桌面应用时,我们常常面临选择。传统的HTTP轮询效率低下,长轮询又不够优雅。而WebSocket协议,作为HTML5标准的一部分,为我们提供了全双工、低延迟…

2026/10/14 23:51:45 阅读更多 →
参与开源项目的收获与反思:代码写得再好,文档不好没人用

参与开源项目的收获与反思:代码写得再好,文档不好没人用

参与开源项目的收获与反思:代码写得再好,文档不好没人用 一、一份 2000 行的 Pull Request,被 Reviewer 打了回来 PR 描述写了 300 字,代码通过了所有单元测试,性能提升了 12%。但 Reviewer 的第一条评论只有五个字&…

2026/10/14 23:51:51 阅读更多 →

最新新闻

2025北森测评题库刷题攻略:言语理解、图形推理与资料分析备考方法

2025北森测评题库刷题攻略:言语理解、图形推理与资料分析备考方法

简介:2025北森测评题库是一份面向校招、社招求职者备考北森在线测评的练习资料,聚焦言语理解、资料分析、图形推理三大高频模块,适合用来熟悉题型、训练逻辑思维与提升做题速度。资源包为单个docx文档,大小约6.18MB,文…

2026/10/15 23:21:41 阅读更多 →
TOGAF企业架构实战指南:十个阶段、落地工具与常见误区

TOGAF企业架构实战指南:十个阶段、落地工具与常见误区

我在参与企业信息化规划时,见过最多的场面是:业务部门拉出一张组织架构图讲需求,IT部门打开一堆系统清单讲现状,两边聊了几个小时,最后没有一张图能把“业务为什么需要、系统怎么支持、数据怎么流转”串起来。后来引入…

2026/10/15 23:21:41 阅读更多 →
UEditor公式插件集成指南:从LaTeX录入到回显的完整实践

UEditor公式插件集成指南:从LaTeX录入到回显的完整实践

简介:一份整合了 kityformula-plugin 数学公式插件的 UEditor 编辑器资源包,面向需要在网页或博客后台录入数学公式的开发者、教育类站点运维者及前端工程师。插件与编辑器深度结合后,可在富文本中直接插入与编辑 LaTeX 风格的公式&#xff0…

2026/10/15 23:21:41 阅读更多 →
手把手教你用 Codex 打造 AI 编程工作流:从需求拆解到代码验收(TaoToken 统一 Key 接入版)

手把手教你用 Codex 打造 AI 编程工作流:从需求拆解到代码验收(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 23:21:41 阅读更多 →
C#版PACS源码拆解:DICOM协议与.NET影像链路全解析

C#版PACS源码拆解:DICOM协议与.NET影像链路全解析

简介:这套资源是一套基于C#与.NET框架开发的全套PACS(医学影像存档与通信系统)源码,适合医疗信息化开发者、HIS/LIS系统集成人员以及想了解医学影像技术的软件工程师。源码围绕图像采集、DICOM通信、SQL数据库存储、工作站显示等核…

2026/10/15 23:21:41 阅读更多 →
Python函数全解析:从基础语法到工程实践

Python函数全解析:从基础语法到工程实践

函数是每个 Python 开发者都绕不开的核心话题,无论你写的是几十行的脚本,还是几千文件的大型系统,本质上都是在定义函数、调用函数、组织函数。很多人学完基础语法后写代码总感觉“差点意思”,代码又长又乱,改一个逻辑…

2026/10/15 23:20:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →