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

引用与资源

相关推荐
YucongCai2 分钟前
Opengovernment(智慧城市) v0.0.3 攻防一体的智能体主动网络安全平台:ActiveCybersecurity v0.2
人工智能·web安全·智慧城市
腾讯云大数据13 分钟前
从多模态数据处理到模型训练:腾讯云EMR-Ray打通Data+AI全流程
人工智能·云计算·腾讯云·mapreduce·腾讯云大数据
louyu66688813 分钟前
国产楼宇自控系统哪家靠谱?
大数据·人工智能
FriendshipT23 分钟前
Ubuntu 20.04 下使用 Ollama 本地部署 AI 大模型
linux·人工智能·python·深度学习·ubuntu
大模型丫丫27 分钟前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
乱世刀疤32 分钟前
AI Weekly 7.27-8.2
人工智能
天天爱吃肉821836 分钟前
# 商用车多体动力学实战笔记|第7篇:制动系统与制动热衰退、ABS滞环控制
大数据·人工智能·笔记·python·嵌入式硬件·汽车
牧艺37 分钟前
别让 Agent 猜需求:前端用「一页 Spec」把返工砍掉一半
人工智能·agent·vibecoding
时空节拍AI数字人41 分钟前
多模态交互数字人:语音+视觉+触控如何融合
人工智能·microsoft·ai·aigc·交互·语音识别
quanjui41 分钟前
【智能体从对话到决策】虚拟环境下大语言模型的部署与智能体交互研究
人工智能·语言模型·交互