当前位置: 首页 > news >正文

15|Prompt 结构化:目标-上下文-约束-输出格式

本篇目标:这是卷 2(提示工程实战)的第一篇。我们将告别“聊天式提问”,学会像写代码一样写 Prompt,让 AI 的回答从“看运气”变成“稳定交付”。


一、为什么你的 Prompt 总是不稳定?

很多人的提问方式是碎片化的:

  • 第一句:“帮我写个 Python 脚本。”
  • AI 给了个脚本。
  • 第二句:“不对,要能读取 Excel 的。”
  • AI 改了。
  • 第三句:“要把结果存到数据库。”
  • AI 又改了。
  • 第四句:“能不能加个进度条?”

这种“挤牙膏”式的提问,不仅累,而且容易让 AI迷失上下文(记得卷 1 讲的遗忘原理吗?)。
更高效的做法是:一次性把话说完,并且说得有条理。这就是结构化 Prompt


二、结构化 Prompt 的四大支柱(GOCO 模型)

一个完美的 Prompt,应该包含四个核心模块:Goal(目标)、Context(上下文)、Constraints(约束)、Output(输出格式)

1. Goal(目标):你要干什么?

用一个动词开头,清晰定义任务。

  • :“看看这个代码。”
  • :“重构这段 Python 代码,使其符合 PEP8 规范,并优化循环性能。”

2. Context(上下文):背景信息

告诉 AI 它不知道的信息。

  • 角色:你是谁?(资深后端工程师)
  • 环境:代码运行在哪里?(Ubuntu 22.04, Python 3.10)
  • 依赖:已经装了什么库?(Pandas, SQLAlchemy)
  • 业务背景:这是给谁用的?(给财务部门用的报表工具)

3. Constraints(约束):红线与边界

告诉 AI不能做什么,或者必须做什么。

  • “必须使用pathlib,禁止使用os.path。”
  • “代码必须包含类型注解(Type Hints)。”
  • “不要解释基础概念,直接给代码。”

4. Output(输出格式):交付物标准

告诉 AI 你想要什么样子的结果。

  • “返回一个 JSON 格式的列表。”
  • “只返回修复后的代码块,不要 Markdown 包裹。”
  • “先列出修改计划,再给代码。”

三、实战对比:从“路人甲”到“工程师”

任务:写一个 SQL 查询,统计每个用户的订单总额。

❌ 路人甲 Prompt

“写个 SQL 查用户订单总额。”

AI 回复(随机性大)
它可能会给你写个 MySQL 的,也可能写个 PostgreSQL 的;可能没考虑订单状态(退款的也算进去了?);字段名也是瞎编的。


✅ 结构化 Prompt

# Goal Write a SQL query to calculate the total order amount for each user. # Context - Database: PostgreSQL 15 - Table `users`: `id`, `username` - Table `orders`: `id`, `user_id`, `amount` (decimal), `status` (string), `created_at` (timestamp) - Business Logic: Only include orders with status 'completed'. # Constraints - Use `LEFT JOIN` to include users with zero orders (show 0 as total). - Sort by total amount descending. - Use `COALESCE` to handle NULL values. # Output Format - Return only the SQL code block. - Add comments explaining the logic.

AI 回复(精准稳定)

-- Calculate total order amount for each user, including those with no ordersSELECTu.id,u.username,COALESCE(SUM(o.amount),0)AStotal_amountFROMusers uLEFTJOINorders oONu.id=o.user_idANDo.status='completed'GROUPBYu.id,u.usernameORDERBYtotal_amountDESC;

结果完全符合预期:用了 Postgres 语法,过滤了状态,处理了 NULL 值,排序正确。


四、Prompt 的“积木化”管理

不要每次都从头写 Prompt。你应该建立自己的“Prompt 积木库”。

1. 角色积木(Role Block)

存一个文件role_python.md

You are a Senior Python Engineer. - You prefer `pydantic` for data validation. - You use `pytest` for testing. - You follow Google Style Guide for docstrings.

2. 任务积木(Task Block)

存一个文件task_refactor.md

# Goal Refactor the provided code for better readability and performance. # Constraints - Keep the original logic unchanged. - Add comments for complex logic.

3. 组合使用

当你需要重构 Python 代码时,只需要把这两个积木拼起来,再贴上你的代码即可。
CursorTrae中,你可以把这些积木存为.cursorrules或 Snippets,一键调用。


五、本篇产出:通用 Prompt 模板(可复制)

请把这个模板保存到你的笔记软件里,每次提问前填空。

# Role (角色) [你是谁?例如:资深前端开发,精通 React 和 Tailwind CSS] # Goal (目标) [你要做什么?例如:实现一个响应式的登录页面组件] # Context (上下文) [背景信息?例如: - 使用 Next.js 14 App Router - 已安装 lucide-react 图标库 - 需要适配深色模式 ] # Constraints (约束) [规则是什么?例如: - 使用 TypeScript - 必须包含表单验证(Zod) - 不要使用任何额外的 CSS 文件,全部用 Tailwind 类 ] # Output Format (输出格式) [长什么样?例如: - 只提供组件代码文件 (.tsx) - 不解释基础 import ] # Input Data (输入数据 - 可选) [如果有代码要改,贴在这里]

练习题:修复这个烂 Prompt

烂 Prompt:“帮我把这个 excel 转成 csv。”

请用上面的模板,把它改成一个结构化 Prompt。
(提示:你要考虑 excel 有几个 sheet?csv 存哪里?编码格式是 utf-8 吗?要不要保留表头?)

点击查看参考答案
# Goal Write a Python script to convert an Excel file to CSV. # Context - Input file: `data.xlsx` (contains multiple sheets) - Target sheet: "Sheet1" only # Constraints - Use `pandas` library. - Encoding: UTF-8 with BOM (to support Chinese in Excel). - Separator: Comma (`,`). - Handle missing values: Fill with empty string. # Output Format - Provide the full Python script.

下一步:掌握了结构化,你的 Prompt 已经及格了。但有时候,仅仅把话说清楚还不够,你得给 AI “打个样”。下一章我们将学习Few-Shot Prompting(示例驱动)——这是让 AI 瞬间学会你团队代码风格的终极秘籍。

http://www.jsqmd.com/news/522322/

相关文章:

  • Qwen-Image-Edit免费体验:阿里通义千问开源模型,零成本玩转AI修图
  • CppStateMachine嵌入式状态机库深度解析
  • ECCV2024新星MambaIRv2:图像去噪效果实测与性能优化技巧
  • PandaCam云台库:面向空间任务的高精度I2C闭环控制方案
  • 别再让大文件撑爆你的Git仓库了!手把手教你用Git LFS管理视频和数据集
  • Power BI数据刷新全攻略:从网关安装到自动刷新配置(2023最新版)
  • Python处理CSV文件行数的3种高效方法(附性能对比)
  • Qwen3-VL-4B Pro快速部署指南:开箱即用的视觉语言模型,看图说话超简单
  • Vue2项目实战:用js-audio-recorder和阿里云WebSocket搞定网页录音转文字(附完整代码)
  • 终局思维:亚马逊领导者的“品类定义权”与终局布局
  • 0~40kPa微差压传感器模块驱动与TM7711嵌入式实现
  • 无刷电机PWM控制实战:从占空比到转速曲线的完整测试记录
  • CoPaw强化学习环境模拟:加速智能体训练与策略评估
  • stlink v1.8.0 升级指南:提升STM32开发效率的开源工具升级方案
  • 实测分享:Fish-Speech-1.5语音合成效果到底有多自然?
  • 账户入侵应急响应机制与身份恢复策略的时效性研究
  • 使用Lingbot-depth-pretrain-vitl-14实现实时深度估计的优化技巧
  • Nginx交叉编译实战:从Ubuntu20.04到ARM64 Linux的完整移植记录
  • 别再手动调焦了!UE5 Sequencer里用Crane Rig+Look-At Tracking,5分钟搞定环绕目标拍摄
  • 从零开始:在Ubuntu22.04上用Anaconda创建Python3.8虚拟环境并安装Pytorch1.12
  • Python实战:用朴素贝叶斯分类器预测西瓜好坏(附完整代码)
  • 墨语灵犀深度评测:33语种互译精度 vs 传统引擎,Hunyuan-MT美学翻译实测
  • vLLM-v0.11.0新手避坑指南:从镜像选择到服务验证全流程
  • 不用GPT-4也能玩转RAG:手把手教你用LightRAG+Ollama搭建本地知识库
  • Python heapq实战:如何用__lt__方法实现自定义优先级队列(附完整代码)
  • TensorBoard可视化实战:从安装到解读F1曲线,新手必看指南
  • Windows Server上OpenVPN 2.4.8双因子认证实战:账号密码+证书,附一键脚本
  • 2026年3月山东电线电缆厂家最新推荐:电力电缆、控制电缆、阻燃耐火电缆、低烟无卤电缆、光伏电缆、特种线缆厂家选择指南 - 海棠依旧大
  • WebStorm 2019激活码失效?最新2023年合法激活方法全攻略
  • 【ESP32-S3】7.3 I2S实战——从SD卡读取并实时播放WAV音频