ChatGPT提示工程入门 - 释放大语言模型的真正潜力

引言

在人工智能快速发展的今天,大语言模型(LLM)如ChatGPT已经成为我们日常工作和生活中不可或缺的助手。但你是否想过,为什么有些人能让ChatGPT生成完美的回答,而有些人却只能得到平庸的结果?答案就在于提示工程(Prompt Engineering)

本文是吴恩达《ChatGPT提示工程师》课程系列的第一篇,将带你深入了解提示工程的基础概念,为后续的深入学习打下坚实基础。

什么是提示工程?

提示工程是指设计和优化输入文本(提示词)的过程,目的是引导大语言模型生成高质量、符合预期的输出。这是一门结合了艺术和科学的技能。

为什么提示工程如此重要?

  1. 提升输出质量: 好的提示词能让模型理解你的真实意图
  2. 节省时间成本: 减少反复试错的次数
  3. 解锁高级功能: 发现模型的隐藏能力
  4. 构建应用程序: 为基于LLM的产品奠定基础

两种大语言模型类型

理解LLM的分类是掌握提示工程的第一步:

1. Base LLM (基础LLM)

工作原理: 基于训练数据预测下一个词

示例:

  • 输入: “从前有一个独角兽”

  • 输出: “生活在一个魔法森林里…”

  • 输入: “法国的首都是什么?”

  • 输出: “法国最大的城市是什么? 法国的人口是多少?” (继续生成问题列表)

特点:

  • 纯粹的文本续写
  • 输出不可控
  • 不一定回答问题本身

2. Instruction Tuned LLM (指令调优LLM)

工作原理: 在Base LLM基础上进行微调,学会遵循指令

训练流程:

Base LLM 
  → 指令微调(使用输入-输出对) 
  → RLHF(人类反馈强化学习)
  → Instruction Tuned LLM

示例:

  • 输入: “法国的首都是什么?”
  • 输出: “法国的首都是巴黎。”

特点:

  • 直接回答问题
  • 遵循用户意图
  • 更安全、更有用
  • ChatGPT就是这种类型

环境设置 - 开始实践

安装依赖

pip install openai python-dotenv

配置API密钥

创建.env文件:

OPENAI_API_KEY=your_api_key_here

基础代码框架

import openai
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()
openai.api_key = os.getenv('OPENAI_API_KEY')

def get_completion(prompt, model="gpt-3.5-turbo"):
    """
    辅助函数:发送提示词并获取模型响应
    
    参数:
        prompt: 用户的提示词
        model: 使用的模型名称
    
    返回:
        模型生成的文本
    """
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0  # 控制输出的随机性,0表示确定性输出
    )
    return response.choices[0].message["content"]

# 测试
prompt = "什么是机器学习?"
response = get_completion(prompt)
print(response)

理解temperature参数

  • temperature=0: 输出最确定、一致
  • temperature=0.7: 平衡创造力和一致性
  • temperature=1.0: 最具创造力和随机性

建议:

  • 需要一致性输出时使用0(如客服、分类)
  • 需要创意时使用0.7-1.0(如写作、头脑风暴)

提示工程的应用场景

1. 文本摘要

text = """
人工智能是计算机科学的一个分支,致力于创建能够执行通常需要人类智能的任务的系统。
这包括学习、推理、问题解决、感知和语言理解等能力...
"""

prompt = f"请用一句话总结以下文本:\n\n{text}"
print(get_completion(prompt))

2. 文本推理

review = "这款笔记本电脑性能出色,但价格偏高。"
prompt = f"以下产品评论的情感是积极还是消极?\n\n评论: {review}"
print(get_completion(prompt))

3. 文本转换

prompt = "将以下句子翻译成法语: 'The weather is beautiful today.'"
print(get_completion(prompt))

4. 文本扩展

keywords = "节能, 环保, 智能家居"
prompt = f"根据以下关键词编写一段产品描述:\n{keywords}"
print(get_completion(prompt))

最佳实践原则

1. 从简单开始

不要一开始就写复杂的提示词,先用最简单的版本测试。

2. 迭代优化

尝试 → 分析结果 → 调整提示词 → 再次尝试

3. 明确角色和任务

prompt = """
你是一位专业的技术文档编写者。
请将以下代码片段转换为详细的说明文档。

代码:
def factorial(n):
    return 1 if n <= 1 else n * factorial(n-1)
"""

4. 提供上下文

好的提示词应该包含:

  • 背景信息
  • 具体任务
  • 期望的输出格式
  • 约束条件

常见误区

❌ 误区1: 提示词太模糊

# 不好
prompt = "写点东西关于AI"

# 好
prompt = "写一段200字的介绍,解释AI如何改变医疗行业,面向非技术读者"

❌ 误区2: 期望一次成功

提示工程是迭代过程,需要不断优化。

❌ 误区3: 忽略输出格式

如果需要结构化数据,一定要在提示词中明确说明。

实战练习

练习1: 创建一个代码解释器

code = """
def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)
"""

prompt = f"""
请详细解释以下Python代码的工作原理,
包括:
1. 算法名称
2. 每一步的作用
3. 时间复杂度

代码:
{code}
"""

print(get_completion(prompt))

练习2: 创建内容过滤器

content = "这是一条测试消息"

prompt = f"""
分析以下文本是否包含不当内容(暴力、仇恨言论、成人内容)。
返回JSON格式:
{{"is_appropriate": true/false, "reason": "原因"}}

文本: {content}
"""

print(get_completion(prompt))

课程资源

推荐阅读

  • OpenAI官方文档: https://platform.openai.com/docs
  • Prompt Engineering Guide: https://www.promptingguide.ai

下一步学习

在下一篇文章中,我们将深入探讨:

  • 提示词编写的两大核心原则
  • 如何让模型更准确理解你的意图
  • 避免常见的提示词陷阱

总结

本文介绍了提示工程的基础知识:

  • ✅ 理解Base LLM vs Instruction Tuned LLM的区别
  • ✅ 掌握基础的API调用方法
  • ✅ 了解提示工程的主要应用场景
  • ✅ 学习最佳实践原则

记住:好的提示工程师不是天生的,而是通过不断实践和迭代培养出来的。 现在就开始你的第一个提示词实验吧!


作者注: 本文基于吴恩达《ChatGPT Prompt Engineering for Developers》课程整理,课程视频地址: https://www.youtube.com/playlist?list=PL1bD7CLmGebf9FewSIJGZhFDK6FyWBH7P

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐