提示工程(Prompt Engineering):释放生成式人工智能的潜力

近年来,生成式人工智能(Generative AI)的快速发展改变了我们与计算机交互的方式。如何正确地设计提示(Prompt)是解锁其潜力的关键技能之一,被称为 提示工程(Prompt Engineering)。本文将通过深度解读提示工程的理念,并展示多种代码实例,助力开发者更好地理解并运用这一技能。

什么是提示工程?

生成式 AI(如 OpenAI 的 GPT 系列、DALL-E、Stable Diffusion 等)依赖输入的文本提示来生成内容。设计高质量的提示不仅可以显著提升结果的质量,还能优化交互效率。因此,提示工程就是一种综合应用技术,它包含以下几方面的核心作用:

  1. 提高生成质量:构造逻辑性更强且准确度更高的内容。

  2. 节省开发成本:通过精确提示减少调试和反复实验的时间。

  3. 拓展应用场景:实现复杂需求,例如多步骤推理或代码生成。

本文以实际代码生成任务为例,逐步剖析如何优化提示,最终生成具备可操作性的解决方案。

应用场景示例:实现基于 FastAPI 的 CRUD 应用

我们将使用 FastAPI 和 SQLite 构建一个简单的 CRUD 接口,涵盖从初始提示到最终生成优化代码的完整过程。

示例目标

我们的目标是利用生成式 AI 创建以下功能的代码:

  • 基于 FastAPI 框架实现。

  • 数据库使用 SQLite,且通过 SQLAlchemy 管理模型。

  • 提供标准的 CRUD 路由。

  • 返回 JSON 响应,符合 RESTful API 设计。

  • 符合 PEP 8 规范,包含注释和类型注解。

初始提示:简单描述任务

创建一个使用 FastAPI 框架的 CRUD 应用。

这种提示虽然明确了目标,但缺乏关键细节。生成的代码可能存在遗漏,例如没有数据库支持或者路由实现不完整。

优化提示 1:增加功能要求
创建一个基于 FastAPI 框架的 CRUD 应用,要求:
- 使用 SQLite 数据库。
- 使用 SQLAlchemy 管理数据模型。
- 包括添加、读取、更新、删除四种路由。

添加了功能描述后,AI 会生成更符合需求的代码框架,但代码可能缺少标准化和细节。

优化提示 2:增加风格和质量要求
创建一个基于 FastAPI 的 CRUD 应用,具体要求:
- 使用 SQLite 数据库,通过 SQLAlchemy 管理数据模型。
- 包括 CRUD 操作的完整 RESTful API 路由。
- 返回 JSON 格式的响应,状态码应准确。
- 代码符合 PEP 8 标准,包含类型注解与适当注释。

此提示更加明确,让生成的代码具有高质量和易读性。

示例代码:

以下是根据优化后的提示生成的代码实例:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session

# 数据库设置
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

class Item(Base):
    __tablename__ = 'items'
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String, index=True)

Base.metadata.create_all(bind=engine)

# FastAPI 应用实例
app = FastAPI()

class ItemCreate(BaseModel):
    name: str
    description: str

@app.post("/items/", response_model=ItemCreate)
def create_item(item: ItemCreate):
    db: Session = SessionLocal()
    db_item = Item(**item.dict())
    db.add(db_item)
    db.commit()
    db.refresh(db_item)
    return db_item

@app.get("/items/{item_id}")
def read_item(item_id: int):
    db: Session = SessionLocal()
    item = db.query(Item).filter(Item.id == item_id).first()
    if not item:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

@app.put("/items/{item_id}")
def update_item(item_id: int, item: ItemCreate):
    db: Session = SessionLocal()
    db_item = db.query(Item).filter(Item.id == item_id).first()
    if not db_item:
        raise HTTPException(status_code=404, detail="Item not found")
    for key, value in item.dict().items():
        setattr(db_item, key, value)
    db.commit()
    db.refresh(db_item)
    return db_item

@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    db: Session = SessionLocal()
    db_item = db.query(Item).filter(Item.id == item_id).first()
    if not db_item:
        raise HTTPException(status_code=404, detail="Item not found")
    db.delete(db_item)
    db.commit()
    return {"message": "Item deleted successfully"}

多步提示工程示例

为了进一步细化提示并扩展功能,可以按如下步骤进行:

  1. 添加分页支持

    修改代码以支持分页功能。

增加分页支持的路由:

@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10):
    db: Session = SessionLocal()
    items = db.query(Item).offset(skip).limit(limit).all()
    return items
  1. 添加搜索功能

    在读取操作中支持通过名称搜索。

实现搜索功能:

@app.get("/items/search/")
def search_items(query: str):
    db: Session = SessionLocal()
    items = db.query(Item).filter(Item.name.contains(query)).all()
    return items
  1. 添加 JWT 身份验证

结合提示工程,引入身份验证模块,确保 API 安全性。

提示工程的技巧总结

  1. 目标明确:精准描述预期结果。

  2. 分解任务:将复杂目标划分为子任务。

  3. 迭代完善:根据生成结果不断调整提示。

  4. 标准化要求:通过添加规范增强输出的可用性与一致性。

结语

提示工程不仅仅是一种与生成式 AI 交互的工具,更是一门技术与艺术相结合的学问。希望通过本文的详细讲解与丰富代码示例,能帮助读者深入理解并掌握提示工程,为自己的开发流程带来实质性的效率提升。

引用与资源

相关推荐
通信.萌新8 分钟前
深度学习——pytorch基础入门
人工智能·pytorch·深度学习
雪球小梦26 分钟前
OpenAI掌舵人解读OpenAI新进展:迈向超级智能。
人工智能·chatgpt
XianxinMao35 分钟前
GOT-OCR2.0:突破性端到端架构与高精度文本识别的技术创新
人工智能·深度学习
徐礼昭|商派软件市场负责人35 分钟前
支持各大平台账单处理,支持复杂业财数据的精细化对账|商派OMS
大数据·数据库·人工智能·oms·财务对账
取个名字真难呐1 小时前
21、Transformer Masked loss原理精讲及其PyTorch逐行实现
人工智能·pytorch·python·深度学习·矩阵·transformer
新加坡内哥谈技术1 小时前
CES 2025 NVIDIA Project DIGITS 与更多突破性发布全解析
人工智能·科技·深度学习·自动化·生活
泡芙萝莉酱1 小时前
省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据
大数据·人工智能·科技·深度学习·数据挖掘·毕业论文
gs801402 小时前
Megatron:深度学习中的高性能模型架构
人工智能·机器学习
远洋录2 小时前
Vue 开发者的 React 实战指南:性能优化篇
前端·人工智能·react
whaosoft-1432 小时前
51c自动驾驶~合集46
人工智能