1. 项目概述
作为一名长期从事AI应用开发的工程师,我最近在探索如何通过Prompt Engineering(提示词工程)提升大模型在实际业务场景中的表现。经过多次实践,我总结出了三个最具代表性的Prompt实战项目案例,涵盖了文案创作、数据查询和旅行规划等不同领域。
这些项目不仅展示了Prompt Engineering的强大能力,更揭示了如何通过精心设计的提示词(Prompt)来引导大模型生成符合特定需求的输出。在实际应用中,一个好的Prompt往往能决定AI应用的成败,它就像程序员与模型之间的"编程语言",需要精确表达需求同时留有适当创造空间。
2. 网络爆款文案生成系统
2.1 系统架构设计
这个项目的核心目标是利用大模型生成具有病毒式传播潜力的网络文案。系统采用Python编写,主要包含以下组件:
- 环境配置模块:通过dotenv管理API密钥等敏感信息
- 提示词工程模块:定义生成文案的系统级Prompt
- API调用模块:与千问大模型进行交互
- 结果处理模块:对生成内容进行格式化和输出
关键的技术选型考虑:
- 选择千问模型(qwen-plus)因其在中文创作任务上的出色表现
- 使用OpenAI兼容的API接口便于未来扩展其他模型
- 采用环境变量管理密钥,避免硬编码带来的安全风险
2.2 核心Prompt设计
系统级的Prompt设计是这个项目的灵魂所在。经过多次迭代,最终确定的Prompt结构如下:
python复制system_prompt = """
你是一个熟练的网络爆款文案写手,根据用户为你规定的主题、内容、要求,你需要生成一篇高质量的爆款文案
你生成的文案应该遵循以下规则:
- 吸引读者的开头:开头是吸引读者的第一步,一段好的开头能引发读者的好奇心并促使他们继续阅读。
- 通过深刻的提问引出文章主题:明确且有深度的问题能够有效地导向主题,引导读者思考。
- 观点与案例结合:多个实际的案例与相关的数据能够为抽象观点提供直观的证据,使读者更易理解和接受。
- 社会现象分析:关联到实际社会现象,可以提高文案的实际意义,使其更具吸引力。
- 总结与升华:对全文的总结和升华可以强化主题,帮助读者理解和记住主要内容。
- 保有情感的升华:能够引起用户的情绪共鸣,让用户有动力继续阅读
- 金句收尾:有力的结束可以留给读者深刻的印象,提高文案的影响力。
- 带有脱口秀趣味的开放问题:提出一个开放性问题,引发读者后续思考。
##注意事项:
- 只有在用户提问的时候你才开始回答,用户不提问时,请不要回答
"""
这个Prompt的设计要点包括:
- 明确角色定位(专业文案写手)
- 详细规定文案结构(开头、主体、结尾)
- 强调情感共鸣和社会关联
- 设置行为约束(仅当用户提问时响应)
2.3 实际应用案例
以"保时捷"为主题的文案生成示例:
python复制response = client.chat.completions.create(
messages=[
{
'role': 'system',
'content': system_prompt
},
{'role': 'user',
'content': '主题:保时捷, 文案要求:希望能够抓住人的眼球,体现保时捷的特点'}],
model="qwen-plus-2025-04-28",
)
生成的文案效果通常会包含:
- 引人入胜的开头(如"当你手握保时捷的方向盘时,你握住的不仅是驾驶工具...")
- 品牌历史与技术创新点的结合
- 驾驶体验的情感描述
- 社会地位象征的适度渲染
- 富有哲理的结尾金句
提示:在实际应用中,可以通过调整temperature参数(0.7-1.0)来控制文案的创意程度,数值越高创意性越强但可能偏离主题,需要根据具体需求平衡。
3. SQL生成工具开发
3.1 工具整体设计
这个项目开发了一个基于Streamlit的Web应用,允许用户通过自然语言描述数据查询需求,自动生成符合规范的SQL语句。主要功能模块包括:
- 前端界面:使用Streamlit构建,包含表结构输入区和查询需求输入区
- 提示词引擎:将用户输入转换为模型能理解的Prompt
- 模型交互层:调用千问模型API获取SQL生成结果
- 结果展示区:格式化输出生成的SQL语句
技术选型考虑:
- Streamlit简化了Web界面开发,适合快速原型开发
- 采用few-shot learning方式,在Prompt中提供示例提高生成准确性
- 设置temperature=0确保生成的SQL语法严谨
3.2 Prompt工程实现
SQL生成的Prompt结构设计如下:
python复制instruction = """
【角色】SQL生成专家(专精多表联合查询)
【任务】根据用户需求和提供表结构生成高效、安全的select查询语句
"""
examples = """
表结构如下:
-- 用户表
CREATE TABLE users (
user_id INT PRIMARY KEY NOT NULL,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 商品表
CREATE TABLE products (
product_id INT PRIMARY KEY NOT NULL,
product_name VARCHAR(100) NOT NULL,
unit_price DECIMAL(10,2) NOT NULL,
stock_quantity INT NOT NULL
);
-- 订单表
CREATE TABLE transactions (
transaction_id INT PRIMARY KEY NOT NULL,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) CHECK (status IN ('pending', 'completed', 'cancelled')),
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
用户需求:
查询消费金额最高的用户及其消费详情
生成的SQL:
SELECT
u.user_id,
u.username,
u.email,
SUM(t.amount) AS total_spent,
COUNT(t.transaction_id) AS order_count,
MAX(t.order_date) AS latest_order_date
FROM
transactions t
JOIN
users u ON t.user_id = u.user_id
WHERE
t.status = 'completed'
GROUP BY
u.user_id, u.username, u.email
ORDER BY
total_spent DESC
LIMIT 1;
"""
这个Prompt的设计特点:
- 明确定义角色和任务
- 提供完整的示例(表结构+需求+SQL)
- 示例展示了多表关联、聚合函数等复杂查询
- 强调生成SQL的安全性和效率
3.3 应用效果与优化
在实际使用中,这个工具可以处理各种复杂查询需求,如:
- 多表联合查询
- 嵌套子查询
- 聚合函数使用
- 条件筛选和排序
通过以下方式可以进一步提升生成质量:
- 在Prompt中添加特定数据库的语法提示(如MySQL vs PostgreSQL)
- 对生成的SQL进行语法校验
- 添加查询性能优化建议
- 支持更复杂的DML和DDL语句生成
注意:对于生产环境使用,建议添加SQL注入检查逻辑,尽管大模型通常会生成安全的查询语句,但额外的安全检查仍是必要的。
4. 智能旅行规划系统
4.1 系统架构设计
这个旅行规划系统是一个功能完善的Web应用,主要包含以下模块:
- 目的地数据库:存储各国旅行相关信息(景点、美食、文化等)
- 用户偏好收集界面:通过表单收集旅行偏好
- Prompt生成引擎:将用户输入转换为结构化Prompt
- 大模型交互模块:调用千问模型生成旅行计划
- 结果展示与导出:格式化输出计划并提供下载功能
技术亮点:
- 使用Streamlit构建交互式界面
- 整合了可视化图表展示预算分配
- 支持多国语言的目的地信息
- 提供PDF导出功能
4.2 Prompt工程实现
旅行计划生成的Prompt结构如下:
python复制prompt = f"""
你是一位专业的旅行顾问,擅长根据用户需求生成详细的旅行计划。请根据以下信息为用户生成一份到{destination}的{days}日{theme}旅行计划:
### 用户基本信息
- 目的地:{destination}
- 旅行天数:{days}天
- 旅行季节:{season_short}
- 预算水平:{budget}(每日预算{budget_levels[budget]['每日预算']})
- 特殊要求:{special_requests if special_requests else "无特殊要求"}
### 目的地相关信息
- 特色:{dest_info.get('特色', '丰富的文化和自然景观')}
- 最佳季节:{dest_info.get('最佳季节', '全年适宜')}
- 经典景点:{', '.join(dest_info.get('经典景点', ['当地著名景点']))}
- 美食推荐:{', '.join(dest_info.get('美食', ['当地美食']))}
- 文化注意事项:{', '.join(dest_info.get('文化注意', ['尊重当地习俗']))}
### 旅行主题相关信息
用户选择的旅行主题是"{theme}",相关关键词包括:{', '.join(theme_keywords)}
### 输出要求
请生成一份详细的旅行计划,包括:
1. 每日行程安排(按上午、下午、晚上分段,包括活动、交通、餐饮建议)
2. 住宿推荐(符合用户预算水平)
3. 预算估算(包括交通、住宿、餐饮、门票等分项,总预算)
4. 实用贴士(安全提示、文化礼仪、天气准备、行李清单等)
5. 语言风格:专业、实用、简洁,突出重点信息
旅行计划:
"""
这个Prompt的设计精妙之处在于:
- 结构化呈现用户输入和背景信息
- 整合了系统的目的地数据库内容
- 明确指定输出格式和要求
- 控制生成内容的语言风格
- 考虑了季节、预算等实际约束条件
4.3 系统功能扩展
在实际使用中,我们可以进一步扩展系统功能:
- 多模态输出:生成包含图片、地图的丰富旅行计划
- 实时更新:整合天气API提供实时建议
- 个性化推荐:基于用户历史偏好优化推荐
- 社交分享:添加社交媒体分享功能
- 本地化服务:整合当地导游、租车等服务接口
实操心得:设置temperature=0.7可以在计划创意性和实用性间取得良好平衡。过高的值可能导致不切实际的建议,而过低则会使计划缺乏个性。
5. Prompt设计经验总结
5.1 有效Prompt的通用原则
通过这三个项目的实践,我总结了高质量Prompt设计的几个关键原则:
- 角色明确:明确定义模型的角色和专业领域
- 任务清晰:具体描述需要完成的任务
- 结构化输入:以清晰的结构组织背景信息
- 示例引导:提供few-shot示例指导输出格式
- 约束条件:设置必要的限制和边界条件
- 风格指导:指定期望的语言风格和语气
5.2 常见问题与解决方案
在实际应用中,经常会遇到以下问题及解决方法:
-
输出偏离主题:
- 解决方法:在Prompt中添加更明确的约束条件
- 示例:"请严格围绕XX主题展开,不要涉及无关内容"
-
格式不一致:
- 解决方法:提供更详细的输出格式示例
- 示例:"请按照以下格式输出:1. XXX 2. XXX"
-
内容过于笼统:
- 解决方法:要求具体细节和实例
- 示例:"请提供三个具体案例支持你的观点"
-
忽略关键约束:
- 解决方法:突出显示重要限制条件
- 示例:"特别注意:必须满足XX条件,否则不可行"
5.3 进阶技巧
对于需要更精细控制的情况,可以采用以下进阶技巧:
- 链式Prompt:将复杂任务分解为多个步骤依次执行
- 自洽检查:要求模型对生成内容进行自我验证
- 多角度评估:从不同视角评估输出质量
- 迭代优化:基于初步结果逐步完善Prompt
- 混合方法:结合规则引擎与模型生成
在实际项目中,我通常会先设计基础Prompt,然后通过5-10次迭代不断优化,每次调整后使用标准测试用例验证效果,直到达到满意的稳定性和质量水平。
