Prompt工程01:任务定义
从角色、目标、输入、输出、验收标准,理解如何定义一个清晰的任务给大模型。
任务定义是 Prompt 工程的第一步,也是最重要的一步。一个清晰的任务定义能让模型更准确地理解你的需求,输出更高质量的结果。
任务定义的重要性
很多人使用大模型效果不好,不是因为模型不行,而是因为任务定义不清晰。
模糊任务 vs 清晰任务
模糊任务:
帮我写一段代码。
清晰任务:
角色:你是一名资深 Java 后端工程师
目标:实现一个用户登录接口
输入:用户名和密码
输出:登录结果(成功/失败)和 JWT token
约束:使用 Spring Boot,密码使用 BCrypt 加密,返回 JSON 格式
验收标准:
1. 接口路径:POST /api/login
2. 请求体:{"username": "string", "password": "string"}
3. 成功响应:{"success": true, "token": "xxx"}
4. 失败响应:{"success": false, "message": "xxx"}
任务定义的影响
| 维度 | 模糊任务 | 清晰任务 |
|---|---|---|
| 理解成本 | 高 | 低 |
| 输出质量 | 不稳定 | 稳定 |
| 修改次数 | 多 | 少 |
| 调试时间 | 长 | 短 |
任务定义的要素
一个完整的任务定义应该包含以下要素:
角色(Role)
告诉模型它应该扮演什么角色:
| 角色类型 | 示例 | 适用场景 |
|---|---|---|
| 专家角色 | ”你是一名资深架构师” | 需要专业知识 |
| 助手角色 | ”你是我的编程助手” | 日常帮助 |
| 工具角色 | ”你是一个代码生成器” | 特定任务 |
| 评审角色 | ”你是一个代码审查员” | 代码审查 |
角色定义的技巧:
- 具体:不要只说”专家”,要说”资深 Java 后端架构师”
- 权威:赋予角色权威性,让模型更自信
- 一致性:同一对话中保持角色一致
目标(Objective)
明确告诉模型要完成什么任务:
| 目标类型 | 示例 | 适用场景 |
|---|---|---|
| 生成目标 | ”生成一段 Python 代码” | 代码生成 |
| 分析目标 | ”分析这段代码的性能问题” | 代码分析 |
| 总结目标 | ”总结这篇文章的要点” | 文本总结 |
| 转换目标 | ”将这段 SQL 转换为 MongoDB 查询” | 代码转换 |
目标定义的技巧:
- 明确:不要说”做一些优化”,要说”优化这段代码的时间复杂度”
- 可衡量:目标应该是可以验证的
- 单一:一次只定义一个主要目标
输入(Input)
告诉模型需要处理什么数据:
| 输入类型 | 示例 | 处理方式 |
|---|---|---|
| 文本 | ”以下是一段代码…” | 直接粘贴 |
| 代码 | 代码片段 | 用代码块包裹 |
| 文档 | 文档内容 | 分段提供 |
| 参数 | 参数说明 | 结构化说明 |
输入提供的技巧:
- 完整:提供所有必要的输入
- 结构化:用代码块、列表等格式组织输入
- 标注:对重要部分进行标注
输出(Output)
告诉模型应该输出什么格式和内容:
| 输出类型 | 示例 | 适用场景 |
|---|---|---|
| 代码 | 完整代码 | 代码生成 |
| 分析报告 | 分析结果 | 代码分析 |
| 总结 | 要点总结 | 文本总结 |
| 方案 | 技术方案 | 方案设计 |
输出定义的技巧:
- 格式:明确输出格式(JSON、Markdown、代码等)
- 结构:明确输出结构(标题、段落、列表等)
- 长度:明确输出长度限制
约束(Constraints)
告诉模型需要遵守的规则:
| 约束类型 | 示例 | 适用场景 |
|---|---|---|
| 技术栈 | ”使用 Java 和 Spring Boot” | 技术选型 |
| 时间限制 | ”代码执行时间不超过 1 秒” | 性能要求 |
| 安全限制 | ”不要暴露敏感信息” | 安全要求 |
| 风格限制 | ”代码风格符合 Google 规范” | 代码规范 |
约束定义的技巧:
- 必要:只定义必要的约束
- 明确:不要说”代码要简洁”,要说”代码行数不超过 50 行”
- 优先级:重要的约束放在前面
验收标准(Acceptance Criteria)
告诉模型如何判断任务是否完成:
| 标准类型 | 示例 | 适用场景 |
|---|---|---|
| 功能标准 | ”代码能正确运行” | 代码生成 |
| 性能标准 | ”响应时间小于 100ms” | 性能优化 |
| 格式标准 | ”输出符合 JSON 格式” | 数据处理 |
| 质量标准 | ”代码通过单元测试” | 代码质量 |
验收标准定义的技巧:
- 可验证:标准应该是可以验证的
- 具体:不要说”代码质量高”,要说”代码包含单元测试”
- 完整:覆盖所有重要方面
任务定义的模板
使用模板可以快速定义一个清晰的任务:
角色:[角色名称]
目标:[具体目标]
输入:
- [输入1]
- [输入2]
输出:
- [输出格式]
- [输出结构]
约束:
- [约束1]
- [约束2]
验收标准:
- [标准1]
- [标准2]
示例:
输入:[示例输入]
输出:[示例输出]
模板使用示例
角色:你是一名资深前端工程师
目标:实现一个响应式导航栏组件
输入:
- 导航菜单项:首页、产品、关于我们、联系我们
- 设计要求:移动端显示汉堡菜单,桌面端显示完整菜单
输出:
- HTML 结构
- CSS 样式
- JavaScript 交互逻辑
约束:
- 使用纯 HTML/CSS/JavaScript,不使用框架
- 响应式设计,支持移动端和桌面端
- 使用 Flexbox 布局
验收标准:
- 在 375px 屏幕宽度下显示汉堡菜单
- 在 1024px 屏幕宽度下显示完整菜单
- 点击汉堡菜单可以展开/收起导航
示例:
输入:导航菜单项
输出:[代码示例]
任务定义的常见问题
问题1:目标不明确
表现:模型不知道要做什么
示例:
帮我优化一下代码。
解决:
帮我优化这段代码的时间复杂度,要求:
1. 当前时间复杂度:O(n²)
2. 优化后时间复杂度:O(n log n)
3. 使用 Java 语言实现
问题2:输入不完整
表现:模型缺少必要的信息
示例:
帮我写一个查询用户的接口。
解决:
帮我写一个查询用户的接口,输入:
- 用户表结构:id (Long), name (String), email (String), created_at (Date)
- 查询条件:支持按 name 和 email 模糊查询
- 分页参数:page, size
问题3:输出格式不明确
表现:模型输出的格式不符合预期
示例:
分析这段代码的问题。
解决:
分析这段代码的问题,输出格式:
1. 问题描述:[问题说明]
2. 影响:[问题影响]
3. 修复方案:[修复方案]
问题4:缺少示例
表现:模型不知道输出应该是什么样的
示例:
将以下文本转换为 JSON 格式。
解决:
将以下文本转换为 JSON 格式,示例:
输入:"姓名:张三,年龄:30"
输出:{"name": "张三", "age": 30}
项目判断清单
- 模型输出不稳定 → 检查任务定义是否清晰
- 需要专业知识 → 定义具体的专家角色
- 需要特定格式输出 → 明确输出格式和结构
- 需要验证结果 → 定义明确的验收标准
- 复杂任务 → 拆分为多个简单任务
- 多次修改才能得到满意结果 → 完善任务定义