【Prompt工程实战】从0到1构建智能学员辅导系统:Text2SQL+逆向提示词全解析
一、前言:当大模型遇上教育行业
"自己打败自己是最可悲的失败,自己战胜自己是最可贵的胜利。"
这句话不仅适用于个人成长,也完美诠释了大模型时代的Prompt工程 ------我们不是在训练模型,而是在驯服模型,让它按照我们的意图精准输出。
本文将基于真实项目,带你完整复现一个智能学员辅导系统,涵盖三大核心模块:
- 🎓 学员画像生成:基于问卷的大模型交互系统
- 🗄️ Text2SQL自然语言查询:让AI帮你写SQL
- 🔍 提示词逆向工程:拆解并复刻任意文本风格
二、项目架构总览
md
┌─────────────────────────────────────────────────────────────┐
│ 智能学员辅导系统架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 前端界面层 │─────►│ 大模型交互层 │─────►│ 业务逻辑层 │ │
│ │ Streamlit │ │ GPT/DeepSeek│ │ 数据处理 │ │
│ └──────┬──────┘ └─────────────┘ └──────┬──────┘ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ └────────►│ 核心功能模块 │◄─────────────┘ │
│ └────────┬────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │学员辅导 │ │Text2SQL │ │提示词 │ │
│ │问卷系统 │ │自然语言 │ │逆向工程 │ │
│ │ │ │转SQL │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
三、模块一:智能学员辅导系统
3.1 需求分析
传统招生顾问需要反复询问学员背景,效率低下。我们设计一个智能问卷系统,自动收集6维信息并生成个性化回复。
信息采集维度:
md
┌─────────────────────────────────────────┐
│ 学员信息采集矩阵 │
├─────────────────────────────────────────┤
│ Q1 │ 城市/职业状态/当前工作 │
│ Q2 │ 大模型认知水平/技术原理掌握度 │
│ Q3 │ 学习核心需求(职业转型/技能提升) │
│ Q4 │ 编程基础(Python/C/无基础) │
│ Q5 │ 每日学习时长/空闲时段 │
│ Q6 │ 其他补充问题 │
└─────────────────────────────────────────┘
3.2 技术选型:为什么选Streamlit?
md
传统前端开发 vs AI原生框架
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ HTML/CSS │ │ Streamlit│
│ JS/JQ │ │ Gradio │
│ Vue/React│ │ Chainlit│
└────┬─────┘ └────┬─────┘
│ │
学习成本高 5分钟上手
开发周期长 纯Python
维护难度大 自动适配移动端
│ │
└──────────┬───────────────┘
▼
本项目选择:Streamlit
原因:快速验证MVP,专注Prompt工程而非前端
3.3 核心Prompt设计
python
# 系统提示词模板
SYSTEM_PROMPT = """
你是一位资深的大模型学习顾问,需要根据学员的问卷回答,生成专业、亲切、有针对性的回复。
## 回复结构要求:
1. **开场白**:称呼学员,肯定其学习意愿
2. **背景分析**:基于Q1-Q4分析学员基础条件
3. **课程匹配**:说明课程如何解决其核心需求(Q3)
4. **学习规划**:结合Q5的时间安排给出建议
5. **行动号召**:鼓励报名,说明后续支持
## 语气要求:
- 亲切专业,避免过度推销
- 突出"零基础友好"和"项目实战"
- 强调时间灵活性(针对在职学员)
## 输出格式:
直接输出回复文本,不要包含"开场白"等标记
"""
3.4 完整实现代码
python
import streamlit as st
import os
from openai import OpenAI
# 页面配置
st.set_page_config(page_title="智能学员辅导系统", layout="wide")
st.title("🎓 智能学员辅导系统")
st.markdown("在下方输入您的问题,AI将为您生成专属学习方案")
# 初始化session状态
if 'generated' not in st.session_state:
st.session_state.generated = False
# 表单区域
with st.form(key='student_form'):
st.subheader("📋 学员信息采集")
col1, col2 = st.columns(2)
with col1:
q1 = st.text_input(
"Q1:您现在在哪个城市,是否在职,所从事的工作是什么?",
placeholder="例:长沙,在职,路桥设计"
)
q2 = st.text_area(
"Q2:对大模型有多少认知,了解多少原理与技术点?",
placeholder="例:对大模型的认知不高,具体的原理和技术没有明确认知"
)
q3 = st.text_area(
"Q3:学习大模型的最核心需求是什么?",
placeholder="例:能够开发出一个设计行业的大模型"
)
with col2:
q4 = st.text_input(
"Q4:是否有Python编程基础或其他编程基础?",
placeholder="例:Python基础没有,之前学过C语言,10多年没写代码"
)
q5 = st.text_input(
"Q5:每天能花多少时间学习,空闲时段?",
placeholder="例:每天2-3小时,晚上8点后"
)
q6 = st.text_area(
"Q6:其他问题补充(可选)",
placeholder="如有其他需求请在此说明"
)
submit_button = st.form_submit_button(label="🚀 生成专属方案")
# 大模型调用函数
def get_completion(prompt, model="gpt-3.5-turbo"):
"""调用OpenAI GPT模型"""
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt}
]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.7, # 适度创造性
max_tokens=1500
)
return response.choices[0].message.content
def get_completion_deepseek(prompt, model="deepseek-chat"):
"""调用DeepSeek模型(性价比之选)"""
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt}
]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.7
)
return response.choices[0].message.content
# 生成回复
if submit_button:
if not all([q1, q2, q3, q4, q5]):
st.error("请填写所有必填项(Q1-Q5)")
else:
with st.spinner("AI正在分析您的需求,请稍候..."):
# 构造用户输入
user_input = f"""
Q:您现在在哪个城市,是否在职,所从事的工作是什么?
A:{q1}
Q:对大模型有多少认知,了解多少原理与技术点?
A:{q2}
Q:学习大模型的最核心需求是什么?
A:{q3}
Q:是否有Python编程基础或者其他编程基础,有没有写过代码?
A:{q4}
Q:每天能花多少时间用于学习,大致空闲时间点处于什么时段?
A:{q5}
Q:除以上五点外是否还有其他问题想要补充?
A:{q6 if q6 else '无'}
"""
# 调用模型(默认使用DeepSeek,成本低)
try:
response = get_completion_deepseek(user_input)
st.session_state.generated = True
st.session_state.response = response
except Exception as e:
st.error(f"生成失败:{str(e)}")
# 展示结果
if st.session_state.generated:
st.success("✅ 专属学习方案已生成")
st.markdown("---")
st.markdown(st.session_state.response)
# 添加复制按钮
st.download_button(
label="📋 复制方案",
data=st.session_state.response,
file_name="学习方案.txt",
mime="text/plain"
)
3.5 效果示例
输入:
md
Q1:长沙,在职,路桥设计
Q2:对大模型的认知不高,具体的原理和技术没有明确的认知
Q3:能够开发出一个设计行业的大模型,能够产出设计方案
Q4:Python的基础没有,之前学过C语言,但是时间有点久了,工作后基本就搁置了,10多年没有写过代码
Q5:每天可以花2-3小时,空闲时间在晚上8点后
AI生成回复:
text
你好同学,看完你的描述之后,作为一名路桥设计师,你想开发一个适用于设计行业的大模型,这个想法既贴合实际又很有前瞻性。虽然你对大模型的了解还不算深入,但你有C语言的基础,即使已经搁置多年,编程的逻辑思维还在,这对你学习Python和大模型编程会有很大帮助。
我们的课程就是为你这样的学员量身打造的。从基础到应用,循序渐进地帮你掌握大模型的核心技术。课程内容不仅会讲解大模型的原理和技术要点,更重要的是教你如何把这些技术应用到实际项目中,比如你提到的设计行业。课程采用直播和录播相结合的方式,你可以根据自己的时间灵活安排学习,晚上8点后的空闲时间完全可以用来跟进课程进度...
四、模块二:Text2SQL自然语言转SQL
4.1 业务场景
业务人员不懂SQL,但需要查询数据库。我们构建一个自然语言转SQL系统,让用户用"人话"查数据。
md
┌─────────────────────────────────────────┐
│ Text2SQL交互流程 │
├─────────────────────────────────────────┤
│ │
│ 用户输入 ──► "查询每个班级的平均成绩" │
│ │ │
│ ▼ │
│ 表结构注入 ◄── 动态读取数据库Schema │
│ │ │
│ ▼ │
│ Prompt组装 ──► 系统提示+表结构+用户问题 │
│ │ │
│ ▼ │
│ 大模型生成 ──► SELECT class_id, │
│ AVG(score) FROM... │
│ │ │
│ ▼ │
│ 结果验证 ──► 语法检查+权限校验 │
│ │ │
│ ▼ │
│ 执行返回 ──► 表格/图表可视化 │
│ │
└─────────────────────────────────────────┘
4.2 动态表结构输入设计
python
import streamlit as st
st.title("🗄️ Text2SQL智能查询系统")
# 动态表结构输入
st.subheader("Step 1: 配置数据表")
table_count = st.number_input("请输入需要填写的表结构数量", min_value=1, max_value=5, value=1)
table_structures = []
for i in range(table_count):
with st.expander(f"表结构 {i+1}", expanded=True):
table_sql = st.text_area(
f"请输入第{i+1}个表的DDL语句",
height=150,
placeholder="""例:
CREATE TABLE Students (
student_id INT PRIMARY KEY,
name VARCHAR(100),
class_id INT
);"""
)
table_structures.append(table_sql)
# SQL需求输入
st.subheader("Step 2: 输入查询需求")
user_query = st.text_input(
"请用自然语言描述你的查询需求",
placeholder="例:查询每个班级的平均成绩,按平均分降序排列"
)
# 生成SQL
if st.button("🔍 生成SQL语句"):
if not all(table_structures) or not user_query:
st.error("请填写所有表结构和查询需求")
else:
# 构造Prompt
sql_prompt = f"""
你是一位专业的SQL工程师,请根据以下表结构,将用户的中文查询需求转换为标准的SQL语句。
## 表结构:
{'-' * 40}
"""
for i, ddl in enumerate(table_structures, 1):
sql_prompt += f"\n表{i}:\n{ddl}\n"
sql_prompt += f"""
{'-' * 40}
## 用户查询需求:
{user_query}
## 要求:
1. 只输出SQL语句,不要有任何解释
2. 使用标准SQL语法(MySQL兼容)
3. 必要时使用JOIN、GROUP BY、ORDER BY等
4. 字段名必须与表结构一致
5. 如果需求不明确,选择最合理的解释
SQL:
"""
# 调用模型...
st.code("SELECT * FROM generated_sql", language="sql")
4.3 测试案例
输入表结构:
sql
-- 班级表
CREATE TABLE Classes (
class_id INT PRIMARY KEY,
class_name VARCHAR(100) NOT NULL
);
-- 学生表
CREATE TABLE Students (
student_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
class_id INT,
FOREIGN KEY (class_id) REFERENCES Classes(class_id)
);
-- 成绩表
CREATE TABLE Scores (
score_id INT PRIMARY KEY,
student_id INT,
subject VARCHAR(100) NOT NULL,
score FLOAT NOT NULL,
FOREIGN KEY (student_id) REFERENCES Students(student_id)
);
用户提问:"查询每个班级的平均成绩,按平均分降序排列"
AI生成SQL:
sql
SELECT
c.class_name,
AVG(s.score) as avg_score
FROM Classes c
JOIN Students st ON c.class_id = st.class_id
JOIN Scores s ON st.student_id = s.student_id
GROUP BY c.class_id, c.class_name
ORDER BY avg_score DESC;
五、模块三:提示词逆向工程(Prompt Reverse Engineering)
5.1 什么是提示词逆向?
md
正向Prompt工程 逆向Prompt工程
│ │
▼ ▼
已知需求 ──► 写Prompt ──► 获得输出 已知输出 ──► 拆解Prompt ──► 复现风格
│ │
创造过程 分析过程
"我要什么" "这是怎么做到的"
应用场景:
- 🔥 复刻爆款文案的写作风格
- 📝 统一多篇文章的语调和结构
- 🎭 快速学习特定作者的表达方式
- 🚀 批量生成同质化但高质量的内容
5.2 逆向工程方法论
md
┌─────────────────────────────────────────┐
│ 提示词逆向工程五步法 │
├─────────────────────────────────────────┤
│ │
│ Step 1: 结构分析 │
│ ├── 识别文本的宏观结构(总分总/三段式) │
│ └── 标注段落功能和过渡逻辑 │
│ │
│ Step 2: 语言特征提取 │
│ ├── 句式复杂度统计(简单/复合句比例) │
│ ├── 词汇偏好(口语化/书面化程度) │
│ └── 修辞手法(排比/比喻/反复等) │
│ │
│ Step 3: 情感曲线绘制 │
│ ├── 标注情绪高点和低点 │
│ └── 分析转折点的触发机制 │
│ │
│ Step 4: 细节元素拆解 │
│ ├── 数据呈现方式(精确数字/模糊表述) │
│ ├── 文化符号引用(书籍/电影/历史) │
│ └── 感官描写类型(视觉/听觉/触觉) │
│ │
│ Step 5: Prompt重构 │
│ ├── 将分析结果转化为可执行的指令 │
│ ├── 设计变量占位符([主题]/[场景]) │
│ └── 添加约束条件和输出格式要求 │
│ │
└─────────────────────────────────────────┘
5.3 实战案例:逆向乔布斯演讲稿
原文本:乔布斯2005年斯坦福演讲(节选)
逆向Prompt设计:
md
## 任务
请对下列{{文本}}进行逆向提示词工程,生成一个可以仿写这段文章的提示词。
## 要求:
1. 运用写作领域的专业知识,进行写作要素的深度分析
2. 生成的提示词要发送给ChatGPT,让它能以任意主题,写出与原文风格类似的文章
## 文本内容:
{{乔布斯演讲稿中文版}}
---
## 逆向分析维度:
### 1. 叙事结构
- 采用三段式故事框架
- 每个故事包含:具体经历 → 戏剧性冲突 → 哲学启示
- 递进式金句结构:"...只有回头看时..." → "...不要失去信仰..." → "...死亡是生命最好的发明..."
### 2. 语言风格
- 句式:70%简单句 + 20%并列句 + 10%复合句
- 口头禅:"说实话"、"当然"、"但事实证明"
- 数据精确化:"20人的公司→400人,20亿"、"33年里每一天早晨"
### 3. 情感曲线
- 每段构建"低谷-转折-升华"情绪弧
- 物质困窘(睡地板/捡可乐罐) → 艺术启迪 → 商业成功
### 4. 修辞策略
- 三频次重复结构
- 科技-人文比喻链(书法→电脑字体)
- 结尾双关引用(Stay Hungry, Stay Foolish)
## 输出格式:
直接输出可用于仿写的完整Prompt,包含所有约束条件
5.4 逆向生成的Prompt(可直接使用)
md
请以[任意主题]为核心,用第一人称撰写一篇结构仿照乔布斯斯坦福演讲风格的文章。
## 1. 叙事结构
采用三段式故事框架,每个故事包含:
- a) 具体人生经历(求学/职业/健康等转折点)
- b) 戏剧性冲突(退学/被解雇/生死危机)
- c) 哲学性启示(须含递进式金句:
"...只有回头看时..." →
"...不要失去信仰..." →
"...生命最好的发明...")
## 2. 语言风格
- 口语化句式:70%简单句 + 20%并列句 + 10%复合句
- 使用弱化说教感的口头禅:"说实话"、"当然"、"但事实证明"
- 关键数据精确到具体数字(例:"20人的公司→400人,20亿")
- 时间锚点精确(例:"33年里每一天早晨"、"三到六个月")
## 3. 修辞策略
- 三频次重复结构:
* 段首重复:"我的第X个故事关于..."
* 教训重复:"你必须相信..."/"不要停止..."
* 结尾双关引用(经典语录+现代转译)
- 科技-人文比喻链(如:书法→电脑字体)
- 认知冲突点:每200-250字设置数据反转或生死悬念
## 4. 情感曲线
每段构建"低谷-转折-升华"情绪弧:
- 物质困窘 → 艺术启迪 → 商业成功
- 事业崩塌 → 爱情收获 → 创意爆发
- 死亡威胁 → 医学奇迹 → 生命顿悟
## 5. 细节处理
植入5-7个增强真实感的微观场景:
- 环境特写(宿舍地板纹理/扫描仪蓝光)
- 身体记忆(钢笔划破纸张的触感)
- 文化符号(《全球概览》杂志/梵文书法)
## 6. 认知模型
保持"经验分享者"而非"人生导师"姿态:
- 每段教训用"我确信..."/"可能..."等模糊限定
- 关键结论用感官隐喻替代直接说理(如"药苦但有效")
请以这种风格创作关于[用户指定主题]的文章,保持口语化叙述与哲学升华的平衡,结尾需引用与主题契合的经典格言(注明出处并作现代转译)。
5.5 小红书风格逆向案例
原文本:火锅探店文案
逆向生成的Prompt:
md
写一篇类似风格的探店文章,要求如下:
## 标题
- 采用二极管标题法,突出核心优势或特色
- 格式:"人均XX!XX店,性价比爆表🔥"
- 控制在20字以内,使用口语化表达
- 可使用emoji增加活力
## 正文
### 语气
亲切、热情、口语化,像跟朋友分享一样,使用"家人们"等称呼
### 开篇方法
言简意赅直接点明推荐内容:"家人们,今天给你们安利..."
### 结构
采用小标题形式,分点介绍:
- 【锅底】
- 【菜品】
- 【性价比】
- 【地址】
### 用词特点
- 口语化词汇:"安利"、"超满足"、"太划算了"
- 形容词修饰:"新鲜又实惠"、"色彩鲜艳"
### 句式
以短句为主,简洁明了,偶尔使用长句描述细节
## 首图建议
根据主题给出图片建议,突出关键特点,强调视觉吸引力
## 标签
选取3-6个SEO关键词,如:#探店 #性价比 #美食推荐 #宝藏店铺 #吃货必备 #美食分享
六、技术整合与部署
6.1 项目目录结构
md
smart-tutor-system/
├── 📁 app/
│ ├── __init__.py
│ ├── tutor.py # 学员辅导模块
│ ├── text2sql.py # SQL生成模块
│ └── reverse_prompt.py # 逆向工程模块
├── 📁 prompts/
│ ├── tutor_system.txt # 系统提示词
│ ├── sql_template.txt # SQL生成模板
│ └── reverse_template.txt # 逆向分析模板
├── 📁 utils/
│ ├── llm_client.py # 大模型封装
│ └── validators.py # 输入验证
├── config.yaml # 配置文件
├── requirements.txt
└── main.py # 入口文件
6.2 多模型适配方案
python
# utils/llm_client.py
from enum import Enum
from openai import OpenAI
class ModelProvider(Enum):
OPENAI = "openai"
DEEPSEEK = "deepseek"
MOONSHOT = "moonshot"
class LLMClient:
def __init__(self, provider: ModelProvider):
self.provider = provider
self.client = self._init_client()
def _init_client(self):
if self.provider == ModelProvider.OPENAI:
return OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
elif self.provider == ModelProvider.DEEPSEEK:
return OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
# 其他模型...
def chat(self, messages, temperature=0.7, **kwargs):
"""统一接口,屏蔽底层差异"""
model_map = {
ModelProvider.OPENAI: "gpt-3.5-turbo",
ModelProvider.DEEPSEEK: "deepseek-chat"
}
response = self.client.chat.completions.create(
model=model_map[self.provider],
messages=messages,
temperature=temperature,
**kwargs
)
return response.choices[0].message.content
6.3 成本优化策略
| 场景 | 推荐模型 | 成本对比 | 说明 |
|---|---|---|---|
| 学员辅导 | DeepSeek-V3 | 1/10 GPT-4 | 中文理解优秀,成本低 |
| SQL生成 | DeepSeek-Coder | 1/5 GPT-4 | 代码能力强,结构化输出稳定 |
| 逆向工程 | GPT-4 | 基准 | 复杂分析任务,精度要求高 |
| 批量生成 | 本地Qwen-7B | 几乎免费 | 固定格式内容,量化部署 |
七、总结与展望
7.1 核心知识点回顾
md
┌─────────────────────────────────────────┐
│ Prompt工程能力金字塔 │
├─────────────────────────────────────────┤
│ │
│ Level 3: 系统设计能力 │
│ ├── 多模块Prompt协同架构 │
│ ├── 安全与异常处理机制 │
│ └── 成本-效果平衡优化 │
│ ▲ │
│ Level 2: 高级技巧 │
│ ├── 少样本学习(Few-Shot) │
│ ├── 思维链(Chain-of-Thought) │
│ └── 提示词逆向工程 │
│ ▲ │
│ Level 1: 基础能力 │
│ ├── 清晰的角色定义 │
│ ├── 结构化输出格式 │
│ └── 约束条件设置 │
│ │
└─────────────────────────────────────────┘
7.2 扩展应用场景
| 行业 | 应用方向 | Prompt关键设计 |
|---|---|---|
| 教育 | 智能答疑/作文批改 | 苏格拉底式提问法 |
| 金融 | 研报生成/风险评估 | 数据验证与合规检查 |
| 医疗 | 病历摘要/用药建议 | 多重安全确认机制 |
| 法律 | 合同审查/案例检索 | 条款精确匹配与解释 |
| 电商 | 商品文案/客服机器人 | 情感分析与转化优化 |