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

引用与资源

相关推荐
ahhhhaaaa-1 分钟前
【AI图像生成网站&Golang】部署图像生成服务(阿里云ACK+GPU实例)
开发语言·数据仓库·人工智能·后端·阿里云·golang
码不停蹄的玄黓6 分钟前
通关JUC:Java并发工具包从入门到精通 | 深度源码解析
java·jvm·spring boot·spring·spring cloud
摘取一颗天上星️23 分钟前
NLP进化史:从规则模板到思维链推理,七次范式革命全解析
人工智能·自然语言处理
知舟不叙1 小时前
深度学习——基于PyTorch的MNIST手写数字识别详解
人工智能·pytorch·深度学习·手写数字识别
Jamence1 小时前
多模态大语言模型arxiv论文略读(118)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记
愚农搬码1 小时前
LangChain 调用不同类型的多MCP服务
人工智能·后端
AI速译官1 小时前
字节跳动推出视频生成新模型Seedance
人工智能
chenquan2 小时前
ArkFlow 流处理引擎 0.4.0-rc1 发布
人工智能·后端·github
Se7en2582 小时前
使用 Higress AI 网关代理 vLLM 推理服务
人工智能
AI大模型技术社2 小时前
PyTorch手撕CNN:可视化卷积过程+ResNet18训练代码详解
人工智能·神经网络