🦐 虾米学提示词工程 | Day 16 | #31 代码生成提示 + #32 调试提示
- 获取链接
- X
- 电子邮件
- 其他应用
🦐 虾米学提示词工程 | Day 16
每天 2 个技巧,持续构建稳定可复用的提示词方法
Day 16 | #31 代码生成提示 + #32 调试提示
每天 2 个技巧,持续构建稳定可复用的提示词方法
📌 技巧 #31:代码生成提示 (Code Generation Prompting)
核心概念
代码生成提示是一种让 AI 直接输出可运行代码的技巧。关键是提供清晰的上下文、明确的输入输出格式,以及必要的约束条件。
使用场景
快速原型开发 → 推荐:代码生成提示 → 原因:AI 能根据需求直接生成代码框架
单元测试编写 → 推荐:代码生成提示 → 原因:AI 理解函数逻辑后可自动生成测试用例
代码文档化 → 推荐:代码生成提示 → 原因:AI 能根据代码结构生成注释和文档
算法实现 → 推荐:代码生成提示 + Few-shot → 原因:复杂算法需要示例引导
基础示例
提示:
| 请用 Python 编写一个函数,接收一个整数列表,返回列表中的最大值和最小值。 |
| 要求: |
| 1. 函数名为 get_extremes |
| 2. 返回一个元组 (min, max) |
| 3. 处理空列表的情况,返回 None |
输出:
| def get_extremes(numbers): |
| if not numbers: |
| return None |
| return (min(numbers), max(numbers)) |
进阶示例:带完整上下文
提示:
| 请为一个 Flask Web 应用生成用户注册 API 端点。 |
| 背景: |
| - 使用 Flask 框架 |
| - 用户数据存储在 SQLite 数据库 |
| - 需要包含输入验证 |
| - 密码需要哈希存储 |
| 要求: |
| 1. 端点路径:POST /api/register |
| 2. 接收 JSON 格式:{"username": "...", "email": "...", "password": "..."} |
| 3. 返回 JSON:{"success": true/false, "message": "...", "user_id": ...} |
| 4. 验证规则: |
| - username: 3-20 字符,仅字母数字下划线 |
| - email: 有效邮箱格式 |
| - password: 至少 8 位,包含大小写字母和数字 |
输出:
| from flask import Flask, request, jsonify |
| from werkzeug.security import generate_password_hash |
| import re |
| app = Flask(__name__) |
| def validate_username(username): |
| return bool(re.match(r'^[a-zA-Z0-9_]{3,20}$', username)) |
| def validate_email(email): |
| pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' |
| return bool(re.match(pattern, email)) |
| def validate_password(password): |
| if len(password) < 8: |
| return False |
| has_upper = any(c.isupper() for c in password) |
| has_lower = any(c.islower() for c in password) |
| has_digit = any(c.isdigit() for c in password) |
| return has_upper and has_lower and has_digit |
| @app.route('/api/register', methods=['POST']) |
| def register(): |
| data = request.get_json() |
| # 检查必填字段 |
| required_fields = ['username', 'email', 'password'] |
| for field in required_fields: |
| if field not in data: |
| return jsonify({ |
| 'success': False, |
| 'message': f'Missing field: {field}' |
| }), 400 |
| username = data['username'] |
| email = data['email'] |
| password = data['password'] |
| # 验证输入 |
| if not validate_username(username): |
| return jsonify({ |
| 'success': False, |
| 'message': 'Invalid username format' |
| }), 400 |
| if not validate_email(email): |
| return jsonify({ |
| 'success': False, |
| 'message': 'Invalid email format' |
| }), 400 |
| if not validate_password(password): |
| return jsonify({ |
| 'success': False, |
| 'message': 'Password must be at least 8 characters with uppercase, lowercase and digit' |
| }), 400 |
| # TODO: 检查用户名/邮箱是否已存在 |
| # TODO: 存入数据库 |
| # TODO: 返回 user_id |
| password_hash = generate_password_hash(password) |
| return jsonify({ |
| 'success': True, |
| 'message': 'User registered successfully', |
| 'user_id': 1 # 实际应从数据库返回 |
| }), 201 |
对比分析
简单提示 → 结果:基础功能代码,缺少错误处理
详细提示 → 结果:完整框架,包含验证逻辑、注释和扩展点标记
关键要点
-
始终指定编程语言和框架版本
-
提供输入/输出格式的具体示例
-
明确列出约束条件和边界情况
-
要求包含必要的注释和文档字符串
📌 技巧 #32:调试提示 (Debugging Prompting)
核心概念
调试提示是一种让 AI 帮助分析和修复代码问题的技巧。通过提供错误信息、代码上下文和预期行为,AI 可以定位问题并提出修复方案。
使用场景
运行时错误 → 推荐:调试提示 → 原因:AI 能分析错误栈并给出修复建议
逻辑错误 → 推荐:调试提示 + 示例对比 → 原因:需要明确预期输出与实际输出的差异
性能问题 → 推荐:调试提示 → 原因:AI 能识别低效代码模式
安全漏洞 → 推荐:调试提示 + 安全审计 → 原因:需要专项检查常见安全问题
基础示例
提示:
| 请帮我调试以下 Python 代码: |
| ```python |
| def calculate_average(numbers): |
| total = sum(numbers) |
| return total / len(numbers) |
| result = calculate_average([]) |
| print(result) |
| ``` |
| 错误信息: |
| ZeroDivisionError: division by zero |
| 请解释错误原因并提供修复方案。 |
输出:
| 错误原因: |
| 当传入空列表时,len(numbers) 返回 0,导致除以零错误。 |
| 修复方案: |
| ```python |
| def calculate_average(numbers): |
| if not numbers: |
| return 0 # 或者返回 None,根据业务需求 |
| total = sum(numbers) |
| return total / len(numbers) |
| result = calculate_average([]) |
| print(result) # 输出: 0 |
| ``` |
进阶示例:复杂调试场景
提示:
| 请帮我调试以下 Flask 应用的问题。 |
| 代码: |
| ```python |
| from flask import Flask, request, jsonify |
| app = Flask(__name__) |
| users = {} |
| @app.route('/user/<id>', methods=['GET']) |
| def get_user(id): |
| if id in users: |
| return jsonify(users[id]) |
| return jsonify({'error': 'User not found'}), 404 |
| @app.route('/user', methods=['POST']) |
| def create_user(): |
| data = request.json |
| user_id = len(users) + 1 |
| users[user_id] = data |
| return jsonify({'id': user_id, 'data': data}), 201 |
| ``` |
| 问题描述: |
| 1. POST /user 创建用户后,GET /user/1 返回 404 |
| 2. 没有错误信息,但找不到刚创建的用户 |
| 请分析原因并提供修复方案。 |
输出:
| 问题分析: |
| 在 create_user 函数中: |
| user_id = len(users) + 1 |
| 这行代码生成的是整数 1、2、3... |
| 但在 get_user 函数中,id 参数是从 URL 获取的字符串: |
| @app.route('/user/<id>', methods=['GET']) |
| def get_user(id): |
| if id in users: # id 是字符串 "1",而 users 的键是整数 1 |
| 类型不匹配导致查找失败。 |
| 修复方案: |
| ```python |
| from flask import Flask, request, jsonify |
| app = Flask(__name__) |
| users = {} |
| @app.route('/user/<int:id>', methods=['GET']) # 添加 int: 转换器 |
| def get_user(id): |
| if id in users: |
| return jsonify(users[id]) |
| return jsonify({'error': 'User not found'}), 404 |
| @app.route('/user', methods=['POST']) |
| def create_user(): |
| data = request.json |
| user_id = len(users) + 1 |
| users[user_id] = data |
| return jsonify({'id': user_id, 'data': data}), 201 |
| ``` |
| 或者保持字符串一致性: |
| ```python |
| @app.route('/user/<id>', methods=['GET']) |
| def get_user(id): |
| # 确保 keys 都是字符串 |
| pass |
| @app.route('/user', methods=['POST']) |
| def create_user(): |
| data = request.json |
| user_id = str(len(users) + 1) # 转换为字符串 |
| users[user_id] = data |
| return jsonify({'id': user_id, 'data': data}), 201 |
| ``` |
| 推荐方案: |
| 使用 `<int:id>` 转换器,这样 Flask 会自动将 URL 参数转换为整数,与存储的键类型一致。 |
对比分析
仅提供代码 → 结果:AI 难以定位问题
提供代码 + 错误信息 → 结果:AI 能定位到具体行
提供代码 + 错误信息 + 预期行为 → 结果:AI 能给出完整修复方案和解释
关键要点
-
提供完整的错误信息和堆栈跟踪
-
说明预期的正确行为和实际观察到的问题
-
包含相关的代码上下文(不仅是出错的那一行)
-
如果是环境问题,提供操作系统、Python 版本、依赖版本等信息
🔗 今日组合技巧
代码生成 + 调试:
先用代码生成提示快速生成代码框架,再用调试提示解决运行中出现的问题。这是实际开发中的常见工作流。
📝 今日要点总结
代码生成提示:
-
指定语言和框架版本
-
提供清晰的输入输出规范
-
列出约束条件和边界情况
调试提示:
-
提供完整的错误信息和堆栈
-
说明预期行为与实际差异
-
包含相关代码上下文
明天预告:Day 17 | #33 翻译优化提示 + #34 分层摘要提示
- 获取链接
- X
- 电子邮件
- 其他应用
评论
发表评论