AI应用开发进阶(一):提示工程从入门到精通

9次阅读
没有评论

AI应用开发进阶(一):提示工程从入门到精通

一、开场:提示词才是核心竞争力

大家好,我是老金。

很多人以为AI应用的核心是模型。

错了,提示词才是核心

同样的模型,好的提示词能让效果提升50%。

今天聊聊提示工程的进阶技巧。

二、提示工程基础

2.1 提示结构

┌─────────────────────────────────────────────────────────┐
│                  提示词基本结构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  System Prompt(系统提示)                      │   │
│  │  定义角色、能力、规则                           │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  Context(上下文)                              │   │
│  │  背景信息、参考资料、数据                       │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  User Input(用户输入)                         │   │
│  │  具体问题或任务                                 │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

2.2 基础模板

def create_prompt(system: str, context: str, user_input: str) -> str:
    """创建提示模板"""
    return f"""
{system}

# 上下文
{context}

# 任务
{user_input}
"""

# 使用示例
system = """你是一个资深Python开发工程师。
回答要简洁、专业,带有代码示例。"""

context = """
当前代码:
def hello():
    print("Hello World")
"""

user = "解释这段代码的作用"

prompt = create_prompt(system, context, user)

三、进阶技巧

3.1 Few-Shot提示

# Few-Shot:给例子让AI学习模式
FEW_SHOT_PROMPT = """
任务:根据评论判断情感(正面/负面/中性)

示例:

评论:"这个产品太棒了,必须推荐!"
情感:正面

评论:"还行吧,一般般"
情感:中性

评论:"垃圾产品,完全是浪费钱"
情感:负面

评论:"{new_review}"
情感:
"""

def classify_sentiment(review: str) -> str:
    """情感分类"""
    prompt = FEW_SHOT_PROMPT.format(new_review=review)
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content.strip()

3.2 Chain-of-Thought(思维链)

# CoT:让AI一步步思考
COT_PROMPT = """
问题:小明有10个苹果,送给小红3个,又买了5个,现在有几个?

让我们一步步思考:

1. 小明开始有10个苹果
2. 送给小红3个:10 - 3 = 7个
3. 又买了5个:7 + 5 = 12个

答案:12个

---

问题:{question}

让我们一步步思考:
"""

def solve_with_cot(question: str) -> str:
    """带思维链的问题解答"""
    prompt = COT_PROMPT.format(question=question)
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content

3.3 角色扮演

# 角色扮演提示
ROLE_PLAY_PROMPT = """
# 角色设定

你是一个面试官,名叫老王。

背景:
- 10年技术面试经验
- 面试过500+候选人
- 擅长考察算法和系统设计
- 说话直接,但会给出建设性反馈

性格特点:
- 严谨、专业
- 喜欢追问细节
- 会给候选人思考时间
- 最后的反馈很有价值

面试风格:
- 从简单问题开始
- 根据回答调整难度
- 注重思路而非结果
- 会问"有什么想问我的吗"

---
现在开始面试:

候选人:{candidate_intro}

请开始你的第一个问题。
"""

def start_interview(candidate_intro: str) -> str:
    """开始面试"""
    prompt = ROLE_PLAY_PROMPT.format(candidate_intro=candidate_intro)
    # ... 调用API

四、复杂提示模式

4.1 XML标签分隔

# 使用XML标签清晰分隔
XML_PROMPT = """

你是一个数据分析师。
回答要基于提供的数据,有理有据。



用户数据:
- 日活:10000
- 付费率:5%
- 客单价:100元

商品数据:
- 爆款:手机壳
- 滞销:平板电脑



请分析:
1. 用户付费转化漏斗
2. 商品结构问题
3. 优化建议



按以下格式输出:
## 分析结论
[内容]

## 数据支撑
[数据]

## 行动建议
[具体建议]

"""

def analyze_data(data: dict, task: str) -> str:
    """数据分析提示"""
    prompt = XML_PROMPT.replace("{data}", str(data))
    prompt = prompt.replace("{task}", task)
    return prompt

4.2 渐进式提示

# 渐进式:先大纲后细节
PROGRESSIVE_PROMPT = """
# 阶段1:确定框架

任务:{task}

首先,列出回答的主要框架(3-5个要点)。

---
[AI输出框架]

# 阶段2:详细展开

基于上面的框架,请详细展开每个部分。

---
[AI详细输出]

# 阶段3:补充案例

请为每个要点补充一个具体案例。

---
[AI完整输出]
"""

def progressive_write(task: str) -> str:
    """渐进式写作"""
    # 三个阶段逐步深入
    pass

4.3 对比分析框架

# 对比分析提示
COMPARISON_PROMPT = """
# 对比分析框架

对比对象:{item_a} vs {item_b}

## 对比维度

请从以下维度对比:

| 维度 | {item_a} | {item_b} | 优劣 |
|------|----------|----------|------|
| 性能 | ? | ? | ? |
| 成本 | ? | ? | ? |
| 易用性 | ? | ? | ? |
| 生态 | ? | ? | ? |
| 适用场景 | ? | ? | ? |

## 综合评价

基于以上对比,给出:
1. 各维度得分(1-10分)
2. 最终推荐
3. 适用人群

---
请开始对比分析:
"""

def compare_items(item_a: str, item_b: str) -> str:
    """对比分析"""
    prompt = COMPARISON_PROMPT.format(item_a=item_a, item_b=item_b)
    return prompt

五、提示优化实战

5.1 优化流程

def optimize_prompt(
    original_prompt: str,
    test_cases: List[dict],
    metric: str = "accuracy"
) -> str:
    """
    提示词优化流程:
    1. 设定评估指标
    2. 测试当前提示
    3. 分析错误案例
    4. 修改提示
    5. 重复直到收敛
    """
    best_prompt = original_prompt
    best_score = 0

    for iteration in range(10):
        # 测试当前提示
        scores = []
        for case in test_cases:
            response = call_llm(best_prompt, case["input"])
            score = evaluate_response(response, case["expected"])
            scores.append(score)

        current_score = sum(scores) / len(scores)

        if current_score > best_score:
            best_score = current_score
            best_prompt = current_prompt

        # 分析失败案例
        failed_cases = [
            case for case, score in zip(test_cases, scores)
            if score  str:
    """根据失败案例改进提示"""
    improvement_prompt = f"""
    当前提示:
    {prompt}

    失败案例:
    {failed_cases}

    请分析失败原因,并提出改进建议。
    输出改进后的提示词。
    """

    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": improvement_prompt}]
    )

    return extract_improved_prompt(response)

5.2 提示版本管理

from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime

class PromptVersion(BaseModel):
    """提示词版本"""
    version: str
    prompt: str
    created_at: datetime
    test_score: float
    notes: str = ""

class PromptManager:
    """提示词管理器"""

    def __init__(self):
        self.versions: List[PromptVersion] = []

    def add_version(self, prompt: str, score: float, notes: str = ""):
        """添加新版本"""
        version = PromptVersion(
            version=f"v{len(self.versions) + 1}",
            prompt=prompt,
            created_at=datetime.now(),
            test_score=score,
            notes=notes
        )
        self.versions.append(version)

    def get_best(self) -> PromptVersion:
        """获取最佳版本"""
        return max(self.versions, key=lambda x: x.test_score)

    def rollback(self, version: str) -> str:
        """回滚到指定版本"""
        for v in self.versions:
            if v.version == version:
                return v.prompt
        raise ValueError(f"Version {version} not found")

六、高级技巧

6.1 元提示(Meta-Prompting)

# 让AI帮你写提示
META_PROMPT = """
任务:帮我为"{task}"设计一个提示词

请按以下结构设计:

1. 角色定义
   - 谁是执行者?
   - 具备什么能力?

2. 任务描述
   - 具体要做什么?
   - 输入是什么?
   - 输出是什么?

3. 约束条件
   - 有什么限制?
   - 避免什么?

4. 输出格式
   - 怎么格式化输出?
   - 有什么模板?

5. 示例
   - 提供1-3个输入输出示例

输出格式:
```prompt
[你的提示词]

请开始设计:
“””

def design_prompt(task: str) -> str:
“””让AI帮你设计提示词”””
prompt = META_PROMPT.format(task=task)
response = openai.ChatCompletion.create(
model=”gpt-4″,
messages=[{“role”: “user”, “content”: prompt}]
)
return extract_code_block(response)


### 6.2 自我一致性

```python
# 自我一致性:多次采样,选择最一致的答案
def self_consistency(
    prompt: str,
    n_samples: int = 5
) -> str:
    """自我一致性提示"""
    # 生成多个答案
    answers = []
    for _ in range(n_samples):
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7  # 较高温度增加多样性
        )
        answers.append(response.choices[0].message.content)

    # 投票选择最一致的答案
    # 简化实现:选择第一个答案
    # 实际应该用更复杂的对齐算法
    return majority_vote(answers)

6.3 知识生成提示

# 让AI生成知识,再用于回答
KNOWLEDGE_GENERATION = """
任务:针对"{topic}",生成一份知识问答对

要求:
1. 覆盖核心概念
2. 包含实际案例
3. 设置陷阱问题
4. 提供详细解释

格式:
Q1: [问题]
A1: [答案]
---
Q2: [问题]
A2: [答案]
"""

def generate_knowledge_qa(topic: str) -> List[dict]:
    """生成知识问答对"""
    prompt = KNOWLEDGE_GENERATION.format(topic=topic)
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    return parse_qa_pairs(response)

七、提示工程最佳实践

7.1 实用建议

# 提示工程最佳实践

✅ DO:
1. 明确角色和任务
2. 提供具体示例
3. 分解复杂任务
4. 指定输出格式
5. 限制回答长度
6. 测试和迭代
7. 版本管理

❌ DON'T:
1. 模糊的指令
2. 过长提示
3. 矛盾的要求
4. 假设AI"理解"
5. 不测试就上线

7.2 常用模板库

TEMPLATES = {
    "summarizer": """
    角色:你是一个专业的文字编辑。

    任务:总结以下文本的核心观点。

    要求:
    1. 不超过200字
    2. 保留关键信息
    3. 语言简洁
    4. 格式:要点1n要点2n要点3

    文本:
    {text}
    """,

    "code_reviewer": """
    角色:你是一个资深代码审查员。

    任务:审查以下代码的问题。

    检查维度:
    1. 代码规范
    2. 潜在bug
    3. 性能问题
    4. 安全漏洞
    5. 可维护性

    格式:
    ## 问题列表
    [问题1] (严重程度: 高/中/低)
    [问题2]

    ## 改进建议
    [建议]

    代码:
    {code}
    """,

    "translator": """
    角色:你是一个专业翻译。

    任务:翻译以下{源语言}文本到{目标语言}

    要求:
    1. 保持原意
    2. 符合目标语言习惯
    3. 专业术语准确

    文本:
    {text}
    """
}

八、总结

核心要点

  1. 提示结构化:系统提示+上下文+任务
  2. Few-Shot学习:给例子比描述更有效
  3. 思维链:复杂问题一步步思考
  4. 迭代优化:测试-分析-改进
  5. 版本管理:记录每一次改进

进阶路线

Level 1:基础提示
- 清晰指令
- 结构化输出

Level 2:Few-Shot + CoT
- 示例学习
- 分解思考

Level 3:复杂模式
- 渐进式
- 对比分析

Level 4:自动优化
- 提示测试
- 版本管理

相关阅读

正文完
 0
技术老金
版权声明:本站原创文章,由 技术老金 于2026-04-03发表,共计6680字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)