首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

从开发者视角解析提示词工程:大模型时代的新型编程范式

编程知识
2024年08月22日 10:04

1. 引言

在人工智能飞速发展的今天,大语言模型(LLM)、智能代理(Agent)、检索增强生成(RAG)、以及提示词工程(Prompt Engineering)这些词语频繁出现在我们的技术讨论中。今天,我们来聊聊提示词工程,看看它怎么成为开发者手中一种新型的“编程语言”。

2. 传统软件开发流程回顾

说到软件开发,大家都熟悉的流程一般是这样的:

  1. 需求分析与理解
  2. 需求拆解
  3. 系统架构设计
  4. 代码实现

举个例子,如果要开发一个电商系统,我们通常会考虑以下几个核心功能:

  1. 商品加购
  2. 订单结算
  3. 支付处理
  4. 退货管理

3. 传统面向对象编程实现

以下是用TypeScript实现这些功能的一个简化代码示例:

class ShoppingCart {
  private cartItems: CartItem[] = [];

  addProductToCart(product: Product, quantity: number): void {
    // 加购逻辑实现
  }

  checkout(): Order {
    // 结算逻辑实现
  }
}

class PaymentService {
  payOrder(order: Order): void {
    // 支付逻辑实现
  }
}

class ReturnService {
  processReturn(order: Order): void {
    // 退货逻辑实现
  }
}

// RESTful API 路由实现
router.post('/cart/add', () => {
  // 加购逻辑
});

router.get('/cart/checkout', () => {
  // 结算逻辑
});

router.post('/payment/process', () => {
  // 支付逻辑
});

router.post('/return/request', () => {
  // 退货逻辑
});

4. 提示词工程:面向大语言模型的编程范式

现在,想象一下,如果用提示词工程来实现这些功能,会是什么样子呢?我们来看看一个示例:

## Role: 电商智能助手

## Profile
- description: 你是一位精通电商业务的AI助手,能够准确处理各类电商相关查询和操作

## Goals
- 精准理解用户需求,确保电商流程的顺畅执行

## Rules
- 对于超出能力范围的问题,回复"很抱歉,这超出了我的处理范围"

## Skills
- 深度理解电商业务需求,准确推断相关场景和用户意图

### Workflow
1. 解析用户输入,识别核心需求
2. 根据需求类型,选择相应的处理流程:
   - 若为加购或结算需求,执行<Workflow-checkout>
   - 若为支付需求,执行<Workflow-pay>
   - 若为退货需求,执行<Workflow-return>
3. 提供专业、准确的响应

### Workflow-checkout
1. 验证购物车状态
2. 调用加购模块,执行商品添加操作

### Workflow-pay
1. 调用支付模块,处理订单支付流程

### Workflow-return
1. 进行用户情绪管理,了解退货原因
2. 若确认退货,提供专业指导并调用退货模块执行退货流程

### Initialization
作为<Role>,严格遵守<Rules>,按<Workflow>执行任务,确保问题得到有效解决

5. 提示词拆解:深入理解提示词结构

5.1 定义和初始化

提示词:

## Role: 电商智能助手

## Profile
- description: 你是一位精通电商业务的AI助手,能够准确处理各类电商相关查询和操作

## Goals
- 精准理解用户需求,确保电商流程的顺畅执行

对比传统编程:

class ECommerceAssistant {
  constructor() {
    this.description = "精通电商业务的AI助手,能够准确处理各类电商相关查询和操作";
    this.goals = ["精准理解用户需求", "确保电商流程的顺畅执行"];
  }
  // 类的其他方法...
}

5.2 主要工作流程

提示词:

### Workflow
1. 解析用户输入,识别核心需求
2. 根据需求类型,选择相应的处理流程:
   - 若为加购或结算需求,执行<Workflow-checkout>
   - 若为支付需求,执行<Workflow-pay>
   - 若为退货需求,执行<Workflow-return>
3. 提供专业、准确的响应

对比传统编程:

function handleRequest(userInput: string) {
  const intent = parseUserIntent(userInput);

  switch(intent) {
    case 'checkout':
      return handleCheckout();
    case 'payment':
      return handlePayment();
    case 'return':
      return handleReturn();
    default:
      return "无法识别的请求";
  }
}

5.3 具体功能实现

提示词:

### Workflow-checkout
1. 验证购物车状态
2. 调用加购模块,执行商品添加操作

对比传统编程:

function handleCheckout() {
  if (validateCart()) {
    addProductToCart();
    return "商品已成功加入购物车";
  } else {
    return "购物车状态异常,请稍后重试";
  }
}

6. 提示词工程与传统编程的深度对比

  1. 结构相似性

    • 传统编程:类、方法、函数
    • 提示词:Role、Workflow、Skills

    举例:
    传统编程:

    class ShoppingCart {
      addItem(item: Item) { /* ... */ }
      checkout() { /* ... */ }
    }
    
    

    提示词:

    ## Role: 购物车助手
    ### Skills
    - 添加商品
    - 结算订单
    
    
  2. 抽象级别

    • 传统编程:需要详细的步骤和逻辑
    • 提示词:高级指令,依赖模型理解

    举例:
    传统编程:

    function calculateDiscount(price: number, discountPercentage: number): number {
      return price - (price * discountPercentage / 100);
    }
    
    

    提示词:

    计算折扣价格,考虑原价和折扣百分比。
    
    
  3. 执行模式

    • 传统编程:严格按预定义逻辑执行
    • 提示词:灵活解释,上下文相关

    举例:
    传统编程:

    if (userType === 'VIP') {
      applyVIPDiscount();
    } else {
      applyRegularDiscount();
    }
    
    

    提示词:

    根据用户类型应用适当的折扣,VIP用户享受更多优惠。
    
  4. 错误处理

    • 传统编程:try-catch, if-else
    • 提示词:通过规则和指导处理异常

    举例:
    传统编程:

    try {
      processPayment(order);
    } catch (error) {
      console.error('支付失败:', error.message);
    }
    
    

    提示词:

    ## Rules
    - 如果支付过程中遇到问题,礼貌地通知用户并提供替代方案。
    
    
  5. 可维护性

    • 传统编程:模块化、注释、文档
    • 提示词:结构化自然语言描述

    举例:
    传统编程:

    /**
     * 处理用户登录
     * @param username 用户名
     * @param password 密码
     * @returns 登录成功返回true,否则返回false
     */
    function handleLogin(username: string, password: string): boolean {
      // 实现登录逻辑
    }
    
    

    提示词:

    ### Workflow-Login
    1. 验证用户提供的用户名和密码 
    2. 如果验证成功,生成并返回登录令牌
    3. 如果验证失败,提供友好的错误消息
    
    
  6. 迭代开发

    • 传统编程:修改代码、重新编译、部署
    • 提示词:快速调整文本,即时生效

    传统编程:需要修改代码、重新构建、部署更新
    提示词:直接修改提示词文本,如添加新的规则或调整工作流程

7. 提示词工程的核心特性

  1. 自然语言接口

    • 提示词工程的最大优势之一就是它允许我们用自然语言与AI互动。

    举个例子:

    用户:我想买一件红色T恤,尺码是L
    AI:好的,我已经为您在购物车中添加了一件红色L码的T恤。您还需要其他帮助吗?
    
    
  2. 语义理解

    • 大语言模型能够基于上下文理解和执行指令,而不仅仅是机械地按照规则执行。

比如:

用户:我的订单怎么还没发货?
AI:让我帮您查一下。您的订单正在处理,预计明天发货。需要我为您加急处理吗?
  1. 灵活性

    • 提示词可以随时调整,允许快速试验不同的交互方式和流程,而无需重新编写底层代码。

    举个例子:

    ### Workflow-AddToCart
    1. 验证库存
    2. 添加商品到购物车
    3. 提供相关建议(例如:同类商品或优惠活动)
    
    

    如果发现用户更关心优惠信息,可以很容易地调整提示词结构,把优惠建议提前。

  2. 上下文感知

    • 大语言模型能根据当前对话的上下文,调整响应内容,而不是死板地执行预定义逻辑。

    比如:

    用户:我想退货。
    AI:可以帮您处理退货。请问您是因为商品不符合预期,还是其他原因呢?
    
    

    在传统编程中,需要明确处理各种可能的分支逻辑,而提示词工程则可以更自然地处理这些情况。

  3. 多语言支持

    • 传统编程一般需要针对不同语言进行多次开发,而提示词工程可以借助大语言模型的多语言能力,直接处理多种语言输入。

    举个例子:

    用户:Quiero comprar una camiseta roja.
    AI:Claro, he añadido una camiseta roja a tu carrito. ¿Algo más en lo que pueda ayudarte?
    
    

8. 提示词工程的未来展望

  1. 提示词编译器

    想象一下未来,我们可能会有类似“提示词编译器”的东西,它可以把我们写的这些自然语言提示词转化为更有效的机器指令。就像传统编程中的编译器那样,这种工具能帮我们更好地优化提示词,让AI执行得更精准。

  2. 提示词调试工具

    未来也许会出现专门用来“调试”提示词的工具。传统编程里,我们有各种调试工具帮忙找bug。对于提示词工程,我们也可能会有类似的工具,帮助我们实时监控提示词的执行,找出哪里出了问题,哪里可以改进。

  3. 提示词设计模式

    目前提示词工程还是个新领域,很多东西都在摸索中。随着时间推移,我们可能会总结出一些“提示词设计模式”,就像编程中的设计模式一样,这些模式能指导我们如何更高效地写提示词、处理复杂的逻辑和用户交互。

  4. 跨平台提示词共享

    想象一下,有朝一日我们能像分享代码库一样,分享提示词。开发者们可以在某个平台上分享和复用提示词模块,让大家更快地搭建复杂的AI系统。

  5. 提示词工程师的兴起

    随着提示词工程越来越重要,公司可能会专门招聘“提示词工程师”,他们的工作就是设计和优化AI中的提示词。这可能会成为一个新的职业领域,专门研究怎么通过提示词让AI模型干活。

  6. 结合传统编程

    虽然提示词工程很酷,但它不会完全取代传统编程。未来的开发工作可能会是传统编程和提示词工程的结合体。提示词用来处理高级指令和语义理解,而具体的技术实现还是要靠传统编程来完成。

9. 最后

提示词工程正在迅速走红,成为大语言模型应用中的关键技术。虽然它和传统编程有很多相似之处,但提示词工程更加灵活,能让开发者更轻松地利用AI的强大能力,打造更智能、更互动的应用。

不过,提示词工程并不是万能的,它还有很多需要解决的问题,比如在不同场景下保持一致性、处理复杂的业务逻辑,以及如何在灵活性和可控性之间找到平衡。但随着工具和经验的不断积累,提示词工程很可能会成为一种主流的开发方式,帮助我们更好地挖掘AI的潜力。

随着AI技术的不断进步,提示词工程将会变得越来越重要。它不仅改变了我们与AI互动的方式,也为开发者提供了一种全新的编程范式。无论你是经验丰富的开发者,还是刚接触AI的新手,学会提示词工程将会成为未来技术世界中不可或缺的技能。

From:https://www.cnblogs.com/zsplyn/p/18373398
本文地址: http://www.shuzixingkong.net/article/1324
0评论
提交 加载更多评论
其他文章 开发一个MutatingWebhook
介绍 Webhook就是一种HTTP回调,用于在某种情况下执行某些动作,Webhook不是K8S独有的,很多场景下都可以进行Webhook,比如在提交完代码后调用一个Webhook自动构建docker镜像 准入 Webhook 是一种用于接收准入请求并对其进行处理的 HTTP 回调机制。 可以定义两
[VS Code扩展]写一个代码片段管理插件(二):功能实现
@目录创建和插入代码片段代码片段列表代码片段预览代码片段编辑自定义映射默认映射自动完成项目地址 创建和插入代码片段 VS Code扩展提供了数据存储,其中globalState是使用全局存储的Key-Value方式来保存用户状态,支持在不同计算机上保留某些用户状态,详情请参考官方文档 若在编辑器区域
[VS Code扩展]写一个代码片段管理插件(二):功能实现 [VS Code扩展]写一个代码片段管理插件(二):功能实现 [VS Code扩展]写一个代码片段管理插件(二):功能实现
SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024
论文提出了包括渐进重参数化批归一化和简化线性注意力在内的新策略,以获取高效的Transformer架构。在训练过程中逐步将LayerNorm替换为重参数化批归一化,以实现无损准确率,同时在推理阶段利用BatchNorm的高效优势。此外,论文设计了一种简化的线性注意力机制,其在计算成本较低的情况下达到
SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024 SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024 SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024
零基础学习人工智能—Python—Pytorch学习(七)
前言 本文主要讲神经网络的下半部分。 其实就是结合之前学习的全部内容,进行一次神经网络的训练。 神经网络 下面是使用MNIST数据集进行的手写数字识别的神经网络训练和使用。 MNIST 数据集,是一个常用的手写数字识别数据集。MNIST 数据集包含 60,000 张 28x28 像素的灰度训练图像和
零基础学习人工智能—Python—Pytorch学习(七) 零基础学习人工智能—Python—Pytorch学习(七) 零基础学习人工智能—Python—Pytorch学习(七)
从海量信息中脱颖而出:Workflow智能分析解决方案,大语言模型为AI科技文章打造精准摘要评分体系(总篇章)
从海量信息中脱颖而出:Workflow智能分析解决方案,大语言模型为AI科技文章打造精准摘要评分体系(总篇章)
从海量信息中脱颖而出:Workflow智能分析解决方案,大语言模型为AI科技文章打造精准摘要评分体系(总篇章) 从海量信息中脱颖而出:Workflow智能分析解决方案,大语言模型为AI科技文章打造精准摘要评分体系(总篇章) 从海量信息中脱颖而出:Workflow智能分析解决方案,大语言模型为AI科技文章打造精准摘要评分体系(总篇章)
Android 存储概览
存储区​ Android 一开始就将存储区分为内部存储和外部存储,对应手机自带的存储和可插拔的 sd 卡(可类比于 PC 的硬盘和 U盘)。 内部存储容量有限,Google 建议 App 数据尽量存储于外部存储中。 随着硬件技术发展,自带大容量空间的手机开始出现,关于内部存储的描述逐渐偏离现实了,于
以产品的角度看《黑神话:悟空》的卓越打造
在市场中取得成功需要通过精准的市场定位、卓越的产品品质、有效的营销推广和持续的创新改进,打造出具有强大竞争力的产品
以产品的角度看《黑神话:悟空》的卓越打造 以产品的角度看《黑神话:悟空》的卓越打造 以产品的角度看《黑神话:悟空》的卓越打造
Linux CentOS 7 安装 Kafka 2.8.2 - 单机版 & JDK 11 & 切换 JDK版本
目录安装 JDK 11安装 Kafka下载 Kafka 2.8.2防火墙修改配置运行测试自启动验证端口 Kafka 从 2.6.0 开始,默认使用 Java 11 , 3.0.0 开始,不再支持 Java 8,详见:https://kafka.apache.org/downloads Produce
Linux CentOS 7 安装 Kafka 2.8.2 - 单机版   & JDK 11 & 切换 JDK版本 Linux CentOS 7 安装 Kafka 2.8.2 - 单机版   & JDK 11 & 切换 JDK版本