【Prompt工程实战】从0到1构建智能学员辅导系统:Text2SQL+逆向提示词全解析

【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关键设计
教育 智能答疑/作文批改 苏格拉底式提问法
金融 研报生成/风险评估 数据验证与合规检查
医疗 病历摘要/用药建议 多重安全确认机制
法律 合同审查/案例检索 条款精确匹配与解释
电商 商品文案/客服机器人 情感分析与转化优化
相关推荐
logocode_li3 小时前
Prompt,除了使用外,你了解其核心原理么?
ai·prompt·指令调优
曦云沐5 小时前
第六篇:LangChain 1.0 消息系统与 Prompt 工程:从入门到精通的完整教程
人工智能·langchain·prompt·大模型开发框架
风雨中的小七6 小时前
解密Prompt系列69. 从上下文管理到Runtime操作系统
prompt
Loo国昌1 天前
AABB碰撞检测 + 分层Prompt:AI图形零重叠背后的6项关键技术
人工智能·后端·深度学习·自然语言处理·prompt
千里马也想飞1 天前
产业链供应链论文“从0到1”写作指南:我用这套AI指令三天跑完框架(附可直接复制的Prompt)
人工智能·prompt
Light601 天前
GitHub Copilot提示词终极攻略:从“能用”到“精通”的AI编程艺术
github·copilot·ai编程·代码生成·提示词工程·开发效率·人机协作
AI Echoes2 天前
LangChain使用函数调用的技巧与流程
数据库·人工智能·python·langchain·prompt
Java小生不才2 天前
提示词Prompt
prompt·spring ai
CeshirenTester2 天前
Prompt Engineering 进阶:如何写出让 AI 自动生成高质量测试用例的提示词?
人工智能·prompt·测试用例