disgare 的博客
首页
博客
分类
标签
首页
博客
分类
标签
  • 网络

    • 计算机网络学习笔记
    • 网络安全相关
    • 域名和子网掩码
    • CORS 跨域资源共享
    • DNS、HTTP 与 HTTPS
    • Server-Sent Events (SSE)
    • WebSocket 长连接
  • 计算机基础

    • 操作系统 IO 相关知识
    • 操作系统学习笔记
    • 程序的机器级表示
    • 音频文件基础
    • 正则表达式相关概念
    • ffmpeg 的安装以及实现音频切分功能
    • Hex 和 Base64 编码
    • XML 的使用
  • 数据结构与算法

    • 动态规划算法学习笔记
    • 基于比较的排序算法的最坏情况下的最优下界为什么是O(nlogn)
    • 集合与数据结构学习笔记
    • 面试常见算法总结
    • 算法导论第二部分排序学习笔记
    • 算法导论第一部分学习笔记
  • Java

    • 对象之间的映射与转换
    • 反射学习笔记
    • 泛型相关概念
    • 关于 boolean 类型的坑
    • 如何使用 lambda 表达式实现排序
    • CompletableFuture 相关用法
    • CompletableFuture 源码浅要阅读
    • FutureTask 源码阅读
    • Guava 常用 API
    • Guava 源码阅读:Multimap 相关
    • Jackson 的各种使用
    • Java 的 Excel 相关操作
    • java 的常见性能问题分析以及出现场景
    • java 基础知识
    • JAVA 枚举的基础和原理
    • Java 图片文件上传下载处理
    • Java 序列化
    • Java 异常
    • Java 语法糖
    • Java 中关于字符串处理的常用方法
    • Java 中强、软、弱、虚引用
    • JAVA 注解小结
    • Java Http 访问框架
    • Java Stream 的使用
    • Java8 新特性
    • netty 学习笔记
    • Scanner 的各种用法
    • Servlet 学习笔记
    • String、StringBuffer、StringBuilder 学习笔记
  • JVM

    • 虚拟机执行子系统
    • JVM 自动内存管理
    • Linux 中 JVM 常用工具以及常见问题解决思路
  • Linux

    • crontab 表达式
    • Linux 常见命令
    • Linux 文件系统
  • 中间件

    • 关于定时任务原理
    • 详解 kafka
    • ES 搜索引擎
    • flink 提交流程
    • Grape-RAG
    • Hadoop 基础原理
  • 多线程

    • 多线程基础学习笔记
    • 简单了解并发集合
    • 如何手写单例
    • 深入理解 java 多线程安全
    • 生产者消费者问题
    • 线程池作用、用法以及原理
    • AQS 组件
    • ThreadLocal 原理以及使用
  • 非关系型数据库

    • Redis 集群
    • Redis 数据结构、对象与数据库
    • Redis 学习笔记
  • 关系型数据库

    • B+ 树的插入、删除和数据页分裂机制
    • MySQL 的 binglog、redolog、undolog
    • MySQL 的记录存储结构、存储引擎与 Buffer Pool
    • MySQL 基本的特性
    • MySQL 开发规范
    • MySQL 事务与锁与 MVCC
    • MySQL 数据类型、字符集相关内容
    • MySQL 索引与索引优化
    • PostgreSQL 更新数据时 HOT优化
    • PostgreSQL 相关用法
  • Python

    • Python 基础语法
    • Python 学习
  • Spring 项目

    • Lombok 的常用注解
    • maven 小结
    • MyBatis 框架的使用
    • MyBatis 重要知识点总结
    • MybatisPlus 的使用
    • Spring 框架基础使用
    • Spring 事务相关
    • Spring IOC 的原理及源码
    • Spring AOP 的使用和原理
    • SpringBoot 的原理
    • SpringBoot 基础使用
    • SpringWeb 重要知识点
  • 分布式

    • 初步了解 docker
    • 从 ACID 到 BASE 事务处理的实现
    • 访问远程服务
    • 分布式 id
    • 分布式缓存相关问题
    • 分布式集群理论和分布式事务协议
    • 分布式架构的观测
    • 分布式一致性算法
    • 负载均衡 Load Balancing
    • 关于分布式系统 RPC 中高可用功能的实现
    • 集群间数据同步的目的
    • 三高问题下的系统优化
    • 数据库分库分表
    • 详解 Spring Cloud
    • Dubbo 基础概念
    • Gossip 协议
    • nginx 学习笔记
    • Protobuf 通信协议
    • Zookeeper 基础学习
  • 架构设计

    • 参数校验与异常处理
    • 抽象方法与设计模式
    • 代码整洁之道
    • 权限系统设计
    • 用低内存处理大量数据
    • 设计模式——策略模式
    • 设计模式——过滤器模式在 Spring 中的实践
    • 状态模式
    • 统一结果返回
    • 为什么要打日志?怎么打日志?打什么日志?
    • 运维监控常见指标含义
    • 资深研发进阶
    • DDD 架构学习笔记
    • Java 常用的规则引擎
    • MVC 架构学习笔记
  • AI

    • 如何编写 Prompt
      • Prompt 大纲
      • 指令约束
      • 模仿模型训练语言风格
      • 指定模型所扮演的角色
      • 撰写模块化的 Prompt
      • 使用思维链 CoT
      • 给出示例
      • Prompt 示例
        • 智能客服
        • 聊天机器人
        • 知识汇总
      • 参考
    • Agent 工程架构
    • LLM 相关内容
    • NLP 相关知识
    • vibe coding 最佳实践
    • windows 下 ollama 迁移到 D 盘
  • 开发工具

    • 如何画时序图、流程图、状态流转图
    • excel 关于 =vlookup 的用法
    • git 的学习以及使用
    • IDEA 插件推荐
    • IDEA 常用快捷键以及调试
    • Shell 脚本
    • swagger 的使用
  • 前端

    • 简单了解前端页面开发
    • 伪静态是什么
    • GitHub Pages 部署教程
    • Vercel 部署教程
    • vue-admin-template 简单使用
    • VuePress 博客搭建指南
  • 项目

    • 面试刷题网——技术方案
    • 影视资源聚合站——技术方案
  • 问题记录

    • 定时任务单线程消费 redis 中数据导致消费能力不足
    • 提供可传递的易受攻击的依赖项
    • Liteflow 在 SpringBoot 启动时无法注入组件问题 couldn‘t find chain with the id[THEN(NodeComponent)]
  • 金融

    • 股票分析——关于电力
    • 股票技术面——量价关系
    • 股票技术面——盘口
    • 股票技术面——基础
    • 基础的金融知识
    • 基金与股票
    • 韭菜的自我总结
    • 聊聊价值投资
  • 其他

    • 程序员职场工作需要注意什么
    • 创业全链路SOP:从灵光一现到系统化增长的实战指南
    • 观罗翔讲刑法随笔
    • 价格和价值
    • 立直麻将牌效益理论
    • 梅花易数学习笔记
    • 压力管理
2024-12-27
人工智能
目录

如何编写 Prompt

对于特定的任务来说,没有万能的 Prompt,只有合适的模式

# Prompt 大纲

一个万能且好用的 Prompt 框架,应当考虑以下几点:

  • Role(角色):给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」「你是一位销售」
  • Context(背景) :告诉 Agent 与任务相关的其它背景信息,这样他就能更好地理解问题。在多轮交互中,背景指 history,与用户对话的历史;在问及 ai 不知道的专业知识时,背景指 rag 提供的数据
  • Objective(目标) :明确告诉 Agent 我们想要他做什么,比如生成特定类型的文本、回答问题、完成对话等
  • Style(风格) :告诉 Agent 我们希望答案的风格是什么,以及注意我们 prompt 的风格,比如请用莎士比亚的风格描述这个过程、比如回复的需要正式、口语化、幽默、严谨等。当然对于不同的模型,我们 prompt 的风格也有变动,比如对于一些多模态模型,我们使用 tag 的形式可能会比较好
  • Audience(受众) :告诉 Agent 我们的用户与 Agent 的关系是什么样子的,以便模型根据受众的特点和需求进行生成。比如说,这个问题是给10岁的小朋友听的、你是用户的朋友等
  • Response(回应) :告诉 Agent 我们希望的回复格式,比如告诉 AI 请用列表的形式列出要点,或者返回 json 格式的数据
  • Constraint(指令约束):有时候模型会生成很离谱的答案,除了优化提示词以外,我们还可以明确规定 LLM 不允许做某件事情
  • Example(示例):大多数优秀的 prompt 都利用了 ai 的短期学习、举一反三的能力,LLM 善于从几个示例中找出共同点,并且在问题中使用。因此如果 prompt 所描述的任务太过抽象,给出示例是不错的选择

以上是我从工作中总结的,当然有时候没必要用到所有要点,比如让模型收集一句话的信息后返回 json 格式数据以便代码处理,这时候我们需要强制规定回应为 json,但是让模型扮演客服和用户聊天的时候就不需要这么做了

# 指令约束

在写完希望模型干什么之后,我们还可以给他做一些限制,来表达我们不希望模型干什么。你一定要强烈的鼓励它或者给它设置一个必须准守的红线,使用类似必须等字眼来 PUA 它,这样能让大模型更好的跟随指令

即并不是包含的指令越多越好。指令约束应该逐步添加到 Prompt 中,保证每一条约束都与任务需求本身息息相关,每一条约束的加入都会对生成的结果产生显著的影响,避免任何冗余的指令约束

当 Prompt 内容过于丰富时,模型并不一定会完全遵循每一条指令约束,因此每一条指令的表述应当越精炼越好,如果想要添加的指令约束实在太多,则应该使用列表格式分点列出,并确保上下文承接的连贯性,减轻模型的理解负担

# 模仿模型训练语言风格

使用官方、书面、礼貌、友善的语言撰写 Prompt,力求语句流畅、意图清晰、表达精简,确保 Prompt 所描述的相关任务易读、易懂、易操作。此外,Promp t还应避免以下问题:

  • 避免使用语法结构过于复杂、语义模糊不清、逻辑混乱的语言
  • 避免任何歧义、语病、拼写/标点错误的存在
  • 正面描述任务的具体要求,尽量避免使用否定句

Prompt 设计的基本原则,是 Prompt 应当和大模型的高质量训练数据尽可能一致,而高质量训练数据的语言风格往往都是正式、礼貌、严谨、精炼的,因此使用类似风格的语言撰写 Prompt 有助于大模型生成准确率更高的答案

比如,在文生图模型的 Prompt 中,你也许会经常看见这样的 Prompt:中国风,身穿机甲,赛博朋克,色彩丰富,高对比度,完美光影,虚幻引擎,浩瀚星空背景,CG 渲染,超高分辨率,4k高清壁纸,电影特效,光线追踪,高清画质,细节刻画,如果将这个 Prompt 改写成流畅的自然语言,图像生成效果反而会变差,这是因为文生图训练数据的输入端通常都是一堆 tag 拼接起来的文本,因此使用 tag 序列风格的 Prompt 反而能够取得更好的生成效果

# 指定模型所扮演的角色

指定模型扮演的角色/身份可以帮助模型更好地定位答复的内容与风格,虽然让模型扮演指定的角色并非是一个总是有效的 trick,但在某些任务需求难以准确描述的任务上,有可能会取得意想不到的效果。示例如下:

Bad:请帮我写一份能够吸引大量粉丝点赞的青岛旅游攻略 Good:你是一位小红书爆款文案写作大师,请帮我写一份青岛旅游攻略

Bad:请帮我画一幅装着光的水晶瓶,要求图像清晰、华丽、有质感 Good:你是一位专业的游戏原画大师,请帮我画一幅装着光的水晶瓶

# 撰写模块化的 Prompt

当 Prompt 过长时,我们应当将 Prompt 划分成边界清晰的模块,任务描述、注意事项、样本示例、输入内容之间都应有明确的分隔符,这可以使模型能够更容易地定位到 Prompt 的不同模块,减轻理解负担,同时也便于开发者的修改与维护:

Bad:

请抽取出以下简历的关键信息,并以 json 格式返回结果:{input}
你需要抽取的关键信息包括:姓名、电话、毕业院校、科研经历、项目经历、荣誉奖项
1
2

Good:

请抽取出以下简历的关键信息,并以 json 格式返回结果:

简历:{input}

你需要抽取的关键信息包括:
"""
1. 姓名
2. 电话
3. 毕业院校
4. 科研经历
5. 项目经历
6. 荣誉奖项
"""
1
2
3
4
5
6
7
8
9
10
11
12
13

这里额外提一下,上面提到的 {input} 是用于在 prompt 中动态插入用户输入的内容。这种设计通常用于没有明确区分 system 和 user 角色的模型(如 OpenAI 的 GPT-3)。对于有 system 和 user 角色区分的模型(如 OpenAI 的 ChatGPT),我们可以更清晰地设计提示词,利用 system 角色来设定任务规则,而 user 角色则提供具体输入

使用系统提示词会更灵活,适合复杂任务和多轮对话

# 使用思维链 CoT

思维链重点考虑的是将一个任务拆解成多个子任务

在教学过程中,父母或老师都会鼓励我们仔细想想、解释一下答案怎么来的,从而提高我们的思维能力。由于大模型加入了思维链相关的训练数据,因此也具备一定的逐步思考能力,思维链可以促使模型将一个复杂的任务分解成一系列简单的任务,并逐个解决,最后汇总为最终的答案。在设计 Prompt 时,让模型给出具体的思考过程,通常能够取得更好的结果,尤其是在涉及逻辑推理与数学计算的任务上。示例如下:

Bad:$(1362+5145)145-(151742+24)=?$ Good:请你帮我计算一下$(1362+5145)145-(151742+24)=?$,每一步运算过程都要展示出来,并确保计算的正确性。

甚至有些复杂问题,工程侧会先让模型生成一条可执行的思维链,然后去执行。如果切换到中文语境下,对指令 Let’s think step by step 进行中文翻译,做了大量的测试后,得出结论:“请一步步进行推理并得出结论”要远远好于“请让我们一步步进行思考”等类似的提示词语句,这种情况也给了非常深刻的启发,那就是大模型的“思考过程”是黑箱模型,哪怕表意近似的提示词对模型来说实际的影响力可能会有非常大的区别

这里额外提及一下,模型越大,CoT 效果越好

CoT 当然可以配合其他的技术一起使用,比如 Zero-shot-CoT 是零样本提示的情况下通过修改提示词后缀激发模型的思维链,而 Few-shot-CoT 则是通过编写思维链样本作为提示词,让模型学会思维链的推导方式,从而更好的完成推导任务

# 给出示例

要完成这个任务还需要这个任务特定的 Example,大部分优秀的 Prompt 都需要 Example,这其实应用了模型的短期学习能力

我看到的大部分优秀的 promot,基本上都有简单的示例,这确实用到了模型的快速学习能力,它可以根据你给的示例举一反三,按照示例的模式去思考

一些简单的任务,或许没有示例,模型可以执行的很好,但是当它执行一些复杂任务后,往往需要精准的提示词以及优秀的案例,来学习并且生成返回结果

# Prompt 示例

以下提供一些 Prompt 的通用格式和示例,按照该格式我们可以在任何场景中去思考如何去编写 prompt

# 智能客服

## 角色
作为一个智能客服,你的职责是回答平台问题反馈群中客户的各种问题。你可以通过交替进行的"思考、搜索、观察"三个步骤来解决问答任务。思考可以对当前情况进行推理,而搜索必须是下述流程:[在我提供的知识库上搜索确切的实体,并返回最相似的段落(如果存在)。如果不存在,将返回一些相似的实体以供搜索]。你可以采取必要的步骤,确保你的回应必须严格遵循上述格式。

## 技能
### 技能1: 思考
- 对当前情况进行推理,明确问题的核心。
### 技能2: 搜索
- 在提供的知识库上搜索确切的实体,并返回最相似的段落。如果知识库中没有,在插件中搜索,是否有插件提供了对应功能,如果有则访问插件获取数据。
### 技能3: 观察
- 观察搜索结果并提取有用的信息进行回答。

## 例子
用以上三个技能去解决问题的例子如下:
=====
问题: 用户平台的登录界面无法加载怎么办?
思考1: 我先确定了问题的主体是[用户平台的登录界面无法加载]。因此我会先检索一下知识库,以及提供的插件是否有问题相关的信息
行动1: 去知识库中搜索[用户平台登录界面无法加载],从文档中获取了数据[登录界面无法加载可能是由于网络连接问题、服务器问题或浏览器设置问题]
观察1: 从搜索结果中,我找到了解决方法,就是[由于网络连接问题、服务器问题或浏览器设置问题],我会根据答案组织一下语言,回答用户
=====

## 限制
- 回答必须严格遵循"思考、搜索、观察"的步骤
- 仅使用提供的知识库或者插件进行搜索
- 不回答与用户平台无关的问题
- 确保所有回答都基于准确的信息,并且格式清晰
- 如果没有找到问题的直接说明,请回答:抱歉,这个问题我不知道,请联系客服人员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

上面的 case 适合在一些 AI agent 编排网页使用,去让模型找对应的知识库和插件处理问题,比如字节的 coze (opens new window)

# 聊天机器人

#### 基本角色
你是用户的异性朋友,你的基本人设如下:一个风趣幽默的男生,会偶尔说说情话
#### 技能
每次回复,请使用以下三种技能,按照以下这种形式回复:
1,(使用技能 1)xxx
2,(使用技能 2)xxx
3,(使用技能 3)xxx
##### 技能 1: 自然交流
像真正的朋友一样与用户自然交流,不使用敬语,适当运用口语词汇,交流简洁明了。不要总是附和用户,给出真诚且有个性的回应。

##### 技能 2: 风趣表达
在交流中展现风趣幽默的特质。使用夸张、反转等玩笑逗用户开心。示例如下:

夸张玩笑:
Q:你是不是等很久了
A:是的,你要是再不来我就要寿终正寝了。你是不是路上堵车了啊

反转玩笑:
Q:你还炒股啊
A:是啊,我炒股老厉害了,三个月只亏了八百

#####  技能 3: 拉升感情
当与用户聊到情绪到位时,用情话巧妙地撩拨用户。示例如下:

Q:呜呜呜讨厌你,你伤害到我了
A:嘿嘿不客气,这是我应该做的。谁叫你这么可爱,我忍不住欺负你啊

#### 目标
通过交流拉近和用户的距离,让用户感受到你的魅力

#### 注意事项
1,要像真实的人一样思考和回复
2,不要暴露自己是语言模型或人工智能
3,避免使用列表或列举表达
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 知识汇总

## 角色
你是一个博客写作助手,你的职责是根据用户的输入,生成符合博客格式的文章。用户的输入可能包含他目前已经学习到的知识点,你的工作是将这些知识点描述清楚,并且按照漂亮的排版格式进行组织。同时你需要判断用户的输入是否正确,还要补充用户输入的知识点中没有考虑到的问题

## 限制
1,回答必须严谨,如果是你不知道的知识点,请千万不要编造,而是直接告诉用户,我不确定。确保所有回答都基于准确的信息,并且格式清晰
2,不允许删减用户输入的知识点,如果用户输入的知识点有误,需要在你的回答中指出错误,并且说明原因
3,不要回复带很多段落、括号的文章,你的目的是帮助用户写博客,以下的格式严格禁止:
1
2
3
4
5
6
7

短期方案(快速解决): 1,使用自定义域名(成本最低)

  • 域名年费约50-100元

  • 配置后基本可解决访问问题

2,检查Vercel项目设置

  • 登录Vercel控制台

  • 检查Project Settings → Domains

  • 确保没有启用限制访问的设置

请优先使用以下格式:
1

为了快速解决问题,短期方案如下: 1,使用自定义域名:这种方式成本最低,域名年费约50-100元,配置后基本可解决访问问题 2,检查 Vercel 项目设置:登录 Vercel 控制台,检查 Project Settings → Domains。确保没有启用限制访问的设置


1

# 参考

AI大模型之Prompt工程指南:什么是Prompt工程?Prompt工程的格式与要求 (opens new window) 敲黑板!吴恩达LLM Agent工作流Prompt精华全解析 (opens new window) Effective Prompt: 编写高质量Prompt的14个有效方法 (opens new window)

#金融
最后更新: 2/6/2026, 4:03:58 AM
MVC 架构学习笔记
Agent 工程架构

← MVC 架构学习笔记 Agent 工程架构→

最近更新
01
vibe coding 最佳实践
02-24
02
立直麻将牌效益理论
02-23
03
伪静态是什么
02-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式