做大模型产品,如何设计prompt?

做GenAI产品,除了要设计好的AI任务流程,合理的拆分业务以外,最重要的就是写好prompt,管理好prompt,持续迭代prompt。

prompt一般有两种形式:结构化prompt对话式prompt

结构化prompt的优点是通过规范的结构把任务介绍得很清楚,缺点就是往往很长,比较复杂。而对话式prompt更加简单,更符合日常的说话习惯,缺点是难以一句话描述清楚任务,最后得不到满意的结果,需要进行多轮对话才能获得最终结果。

两种prompt都有自己的适合场景,结构化的prompt更合适用来内置到产品工作流中,由开发者编写、维护,非对话类AI产品基本采用的就是这种复杂的prompt形式。对话式prompt就合适用在chatbot场景,直接由用户发出。

关于对话式prompt,关键是引导用户持续对话下去,很多时候,用户其实是不知道怎么提问的,我们可以通过搜索query推荐策略来给用户推荐话题相关的prompt,当然也可以把上下文丢给大模型并让模型针对上面的对话提出x个最相关的问题。

如果大家对推荐query感兴趣(评论留言),后面我将单独写一篇文章,本文主要关注非对话类(即“任务型”)AI产品的设计,因此下面着重介绍下结构化prompt的设计思路。

1、结构化prompt

结构化prompt一般可以包括以下几个部分:

  • 定义角色
  • 介绍背景和输入的数据格式
  • 提出任务(可能会有多个任务)
  • 执行所有任务的步骤
  • 定义输出格式
  • 给定输出例子

这是一个结构化prompt的大概框架,这个框架可以采用markdown来描述。结构化prompt有两个很关键的地方需要注意,第一个是多任务,第二个就是输出格式的控制。

  • 关于多任务:首先,一定要明白在一个prompt里面内置多个任务,绝对不是一个好的选择,除非你有强烈的这样做的理由。但是选择做多任务可以「降低成本」,我相信对大多数独立开发者来说,都是重要的事情。
  • 如果在一个prompt同时执行「总结章节」,「抽取highlight」,「抽取关键字」等任务,就是为了让这些事情只需要输入一遍transcript就可以同时获取这些结果。如果单独执行每一个任务,那就需要把相同的transcript数据输入LLM多次,这将会多消耗数倍的成本。
  • 但一定要明白,多任务无疑增加了LLM执行的复杂度,这并不符合「尽量给LLM简单、明确、较小的任务的原则」。经过测试,多任务执行的结果质量赶单任务是有差距的,这就需要不断的打磨和权衡吧。
  • 关于输出格式控制:由于LLM总结结果是需要在任务型产品页面上进行结构化展示,并不是chatbot那样直接输出给用户,所以这类产品对LLM的输出格式就需要严格定义,并且希望LLM能够稳定且正确的输出。对于程序员来说,一般会选择json作为输出。但考虑到LLM的输出可能不稳定,且偶尔输出的json可能是非法的,这种情况下只能重试LLM,导致浪费token,增加成本。因而,建议选择LLM的输出格式为markdown,并通过以下几点来控制输出,减少重试LLM。
  1. prompt中提供输出示例
  2. 输出格式使用简单的markdown语法,自己解析markdown
  3. 借助编程做好容错处理

2、prompt管理

我们采用模板技术来定义prompt,然后通过模板变量去控制prompt,比如多语言等。使用模板来管理prompt后,就不需要为不同的情况都写一份prompt,只需要抽象好prompt模板+模板变量即可。

3、prompt测试

可以在大模型第一梯队或者专门的prompt playground上测试:

  • Open AI playground
  • Google AI studio
  • Knit - The best beta AI playground for prompt developers

在调试prompt的时候,温度(temperature)应该是最常用的一个选项。也就是设置不同的温度,可能会得到不同的效果。像总结文章这种需求,需要基于原文的事实,那最好是温度设置低一些,倾向0都可以。温度设置得很高,大于1,LLM就会更大概率做自由发挥了。还是看自己的业务场景,以及更多的测试。

4、prompt迭代

在开发AI产品的时候,不要纠结一步到位写好prompt,还是需要将重心放到完成整个业务流程和功能上。prompt的编写也和代码一样,需要持续的迭代、优化。所以,需要好的prompt管理方式,方便持续的迭代、测试改进。

虽然对prompt不断地打磨,调试,并不是一件roi很高的事情,但有时候你又不得不做。

5、实战示例

比如我想做一个文章阅读助手的任务型产品,你可以参考上述结构化prompt的要素来设计prompt模版:

你是一个文章阅读助手,我会给你一个文章链接,请根据以下步骤输出markdown格式的内容:

一、我们一步一步思考,阅读我提供的内容,并做出以下操作:
1、提取文章的元数据
- 标题:
- 作者:
- 标签:(阅读文章内容后给文章打上标签,标签通常是领域、学科或专有名词)
2、一句话总结这篇文章;
3、总结文章内容并写成摘要;
二、精读文章内容,并作出以下操作:
1、请详细地列举文章的大纲,并叙述大纲中每一部分的内容,
2、总结文章的结论;
3、列举读这篇文章,我可以学到哪些知识?
三、好的,接着
1、提取文章中的金句;
2、这篇文章里,作者有哪些独到的见解?

为你提供的文章链接为:{url}

由于国内月之暗面的kimi模型在阅读长文本上表现很好,我在kimi chat上测试了一下,能够比较好满足我们结构化的要求(当然如果输出的格式不满足我们的要求,在prompt设计时可以把预期的示例加上)。

最后,必须强调下,做任务型AI产品最好选择那些在chat bot中很难满足的场景或工作流,否则一旦用户掌握了在chat中使用prompt的方法,任务型AI产品的价值很快就被对话产品覆盖掉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vim的IDE进阶之路

一 ctags 1 安装 安装ctags比较简单,我用的是vim-plug,网络上随便一搜应该就有很多教程,而且没有什么坑 2 使用 vim之函数跳转功能_nvim函数跳转-CSDN博客https://blog.csdn.net/ballack_linux/article/details/71036072不过针对cuda程序…

【Android】 四大组件详解之广播接收器、内容提供器

目录 前言广播机制简介系统广播动态注册实现监听网络变化静态注册实现开机自启动 自定义广播发送标准广播发送有序广播 本地广播 内容提供器简介运行时权限访问其他程序中的数据ContentResolver的基本用法读取系统联系人 创建自己的内容提供器创建内容提供器的步骤 跨程序数据共…

数据仓库是什么

写在前面 刚接触大数据的新手小白可能会对数据仓库这个词比较陌生,本文将介绍数据仓库的主要特征及OLTP&OLAP的区别,帮助读者更好理解数据仓库。 一、什么是数据仓库 数据仓库,简称数仓,是一个对数据进行加工,集…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端,最近开始学习go,后端除node外基本0基础,所以学习曲线有点绕,目标是个基础的服务端demo,搞个api服务后台,包含基础的用户登录、文章发布和写文章、权限控制,差不多就是个完整博客系统。…

CentOS 9 (stream) 安装 nginx

1.我们直接使用安装命令 dnf install nginx 2.安装完成后启动nginx服务 # 启动 systemctl start nginx # 设置开机自启动 systemctl enable nginx# 重启 systemctl restart nginx# 查看状态 systemctl status nginx# 停止服务 systemctl stop nginx 3.查看版本确认安装成功…

Apollo 7周年大会自动驾驶生态利剑出鞘

前言 4月22日,百度Apollo在北京车展前夕举办了以“破晓•拥抱智变时刻”为主题的智能汽车产品发布会,围绕汽车智能化,发布了智驾、智舱、智图等全新升级的“驾舱图”系列产品。 1、7周年大会 自2013年百度开始布局自动驾驶,201…

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

【Leetcode每日一题】 分治 - 面试题 17.14. 最小K个数(难度⭐⭐)(66)

1. 题目解析 题目链接&#xff1a;面试题 17.14. 最小K个数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 在快速排序算法中&#xff0c;我们通常会通过选择一个基准元素&#xff0c;然后将数组划分为三个部分&…

基于Spring Boot的火车订票管理系统设计与实现

基于Spring Boot的火车订票管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;在系统首页可以查看…

数据结构——插入排序

基本思想&#xff1a; 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 实际中我们玩扑克牌时&…

排序算法(1)

一、基础概念 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持 不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序…

TCP/IP协议族中的TCP(一):解析其关键特性与机制

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…

一键PDF水印添加工具

一键PDF水印添加工具 引言优点1. 精准定位与灵活布局2. 自由旋转与透明度调控3. 精细化页码选择4. 全方位自定义水印内容5. 无缝整合工作流程 功能详解结语工具示意图【工具链接】 引言 PDF作为最常用的文档格式之一&#xff0c;其安全性和版权保护显得尤为重要。今天&#xff…

MyBatis面试题总结,详细(2024最新)

面试必须要看看 1、MyBatis 中的一级缓存和二级缓存是什么&#xff1f;它们的区别是什么&#xff1f; MyBatis 中的一级缓存是指 SqlSession 对象内部的缓存&#xff0c;它是默认开启的。一级缓存的生命周期是与 SqlSession 对象绑定的&#xff0c;当 SqlSession 关闭时&#…

vue3 ——笔记 (条件渲染,列表渲染,事件处理)

条件渲染 v-if v-if 指令用于条件性地渲染一块内容&#xff0c;只有v-if的表达式返回值为真才会渲染 v-else v-else 为 v-if 添加一个 else 区块 v-else 必须在v-if或v-else-if后 v-else-if v-else-if 是v-if 的区块 可以连续多次重复使用 v-show 按条件显示元素 v-sh…

8 Dubbo 应用案例(动手实操一波)

概述 案例相关配置可参考 GitHub:https://github.com/apache/dubbo-spring-boot-project/tree/master/dubbo-spring-boot-samples 创建服务接口项目 创建一个名为 hello-dubbo-service-user-api 的项目,该项目只负责定义接口 POM <?xml version="1.0" enco…

28.Gateway-网关过滤器

GatewayFilter是网关中提供的一种过滤器&#xff0c;可以多进入网关的请求和微服务返回的响应做处理。 GatewayFilter(当前路由过滤器&#xff0c;DefaultFilter) spring中提供了31种不同的路由过滤器工厂。 filters针对部分路由的过滤器。 default-filters针对所有路由的默认…

OpenCV如何实现背投

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV直方图比较 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是背投以及它为什么有用如何使用 Ope…

GraspNet-1Billion 论文阅读

文章目录 GraspNet-1Billion总体数据集评价指标网络pointnet&#xff1a;Approach Network:Operation Network&#xff1a;Tolerance Network 摘要相关工作基于深度学习的抓取预测算法抓取数据集点云深度学习 GraspNet-1Billion CVPR2020 上海交大 论文和数据集地址&#xff1…
最新文章