提示工程(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 交互的工具,更是一门技术与艺术相结合的学问。希望通过本文的详细讲解与丰富代码示例,能帮助读者深入理解并掌握提示工程,为自己的开发流程带来实质性的效率提升。

引用与资源

相关推荐
云卓SKYDROID5 分钟前
无人机航线辅助模块技术解析
人工智能·无人机·高科技·云卓科技
程序员敲代码吗40 分钟前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
琅琊榜首202042 分钟前
AI生成脑洞付费短篇小说:从灵感触发到内容落地
大数据·人工智能
imbackneverdie1 小时前
近年来,我一直在用的科研工具
人工智能·自然语言处理·aigc·论文·ai写作·学术·ai工具
roman_日积跬步-终至千里1 小时前
【计算机视觉-作业1】从图像到向量:kNN数据预处理完整流程
人工智能·计算机视觉
春日见2 小时前
自动驾驶规划控制决策知识点扫盲
linux·运维·服务器·人工智能·机器学习·自动驾驶
人工智能AI技术2 小时前
【Agent从入门到实践】43 接口封装:将Agent封装为API服务,供其他系统调用
人工智能·python
hjs_deeplearning2 小时前
文献阅读篇#14:自动驾驶中的基础模型:场景生成与场景分析综述(5)
人工智能·机器学习·自动驾驶
nju_spy2 小时前
离线强化学习(一)BCQ 批量限制 Q-learning
人工智能·强化学习·cvae·离线强化学习·双 q 学习·bcq·外推泛化误差