提示词以及常见优化技巧

Search for a command to run...

No comments yet. Be the first to comment.
前言 今天在使用testify框架写单元测试的时候有这样一个需求: 对于一个方法来说,可能会有很长的上下文链路数据。 按照正常的单元测试流程,这个时候我们需要按照接口的逻辑来事先mock好原始未处理的数据,并且定义最终想要的数据结果。定义好不同的test case 尽可能的覆盖到每一个if else,才可以通过后续的ci 流程。 对于一些特殊的case,我们需要一些特殊的操作: 测试前置处理-> 运行测试代码 -> 测试后处理 需要在测试前后对数据进行预处理,如:事先存入一些数据,测试后再删除...

前言&问题复现 参与了一个内部效率提升项目(边角料项目)后要发到内部的测试机器上。内部的测试机器上并没有配置集群,没有一个专门的ingress或者说是网关来处理请求分发。 并且这个测试机器属于多个部门,导致机器环境很复杂,一台物理机安装有多个nginx,有直接host安装的,也有在容器上运行的。 由于这是一个内部项目,没有必要专门部署一个minio,but 项目需要上传文件,所以就直接保存在server的目录下,简单配置了一下nginx的配置,配置如下: location /static...

前言 这是Learn With Agent 的第一篇博客,这个系列(不知道有没有后续了)是想通过agent辅助进行快速的学习(过概念)掌握一些相关的知识。之后再通过agent辅助开发,应该也能做出来个7788。对于AI还有很多思考,另起一个博客再说吧就。 因为网络和经费原因,这里使用的是CC+GLM 4.6 & Gemini 系列。🈚️广,文字为百分百人类手敲&传统CV大法。 JSX JSX是React生态中占据很重要的部分,JSX是一种语法拓展,它可以允许用户在js中写类似html的标签结构...
![[Learn With Agent] JSX & React Components](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fstock%2Funsplash%2FUYsBCu9RP3Y%2Fupload%2F532d6d51855d3424a2ec49f01ddcf4c1.jpeg&w=3840&q=75)
网络连接基础 TCP/IP TCP/IP,是几乎所有互联网通信的基石。HTTP、WebSocket 和 常见的RPC框架尽管功能各异,但都运行在应用层,并从根本上依赖传输层的 TCP(传输控制协议)来实现可靠的、面向连接的数据传输 。 TCP 的核心职责是确保数据包从发送端到接收端可靠、按序且无损地传输 。这包括序列号、确认、流量控制和拥塞控制等机制。在网络层,IP(互联网协议)负责网络路由和寻址,使数据能够跨越不同网络到达其目的地 。现代操作系统普遍内置并管理 TCP/IP 协议栈,从而为应用...
system : 系统提示词用于统一设定当前会话下ai的行为,例如设定ai的行为、语气、风格或限制。用户不会显式观察到系统提示词,但是会影响到用户和ai的后续对话。
user : 这是用户实际向ai提出的问题,这是对话的起点。
assistant: 这是ai对于用户问题的回答,通常也会被添加到上下文中,供下一次对话进行参考,所以也属于prompt的范畴。
<Instruction>
<Question>?
依赖于模型在训练时学到的知识来给出回答。
例子: 什么是提示工程? 优点: 简单、直接。 局限: 对于复杂的任务,模型可能表现不佳。
先提供一些任务的示例,然后让模型完成下一个类似的任务。
例子:
This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //
前三个例子告诉模型,“awesome”和“rad”是正面情绪,“bad”是负面情绪。因此,模型可以推断出“horrible”也应被标记为负面情绪。 优点: 在许多情况下,能显著提高模型在特定任务上的表现。 局限: 需要花费更多精力来构建有效的示例,并且会占用更多的提示词(token)数量。
在 Few-shot 场景下,如果正负样本比例失衡(如 8:2),模型倾向于预测占多数的标签。
| 风险点 | 快速缓解 | 进阶手段 |
| 样本分布失衡 | 平衡正负样本数 | 数据增强、重采样 |
| 样本顺序偏见 | 随机排序 | 交叉验证、集成预测 |
| 事实错误/有害内容 | 提示中加入“请仔细核查事实” | 内容审核、RLHF |
指令 Instruction: 希望模型执行的具体任务或操作 上下文 Context: 这是额外的外部信息或背景知识,可以引导模型给出更准确的回复。 输入信息 Input Data: 这是模型需要处理的具体数据或信息。 输出指示器 Output Indicator: 模型需要生成的输出类型或格式。
一个prompt并不需要完整的以上的四个部分,这根据具体的任务和模型的能力。
从简单开始:提示设计是一个反复试验的过程。建议从简单的提示开始,随着目标变得更明确,再逐步增加复杂性和上下文。 拆解任务:对于复杂的任务,可以将其分解成多个简单的子任务,以避免一开始就陷入复杂的提示设计。
使用明确的指令: 采用明确的指令,或者说希望达到的目标来告诉模型需要它完成的事。 指令放置与格式: 建议将指令放在提示的开头,并使用清晰的分隔符(如###)将其与上下文或输入数据分开。
保持具体和详细:提供更多的描述,更多的详细细节. 提供例子:在提示中提供示例是获得所需格式输出的一种非常有效的方法。 关注上下文长度:在保持具体的同时,也要注意提示的长度限制,避免加入不必要的细节,确保所有细节都与手头的任务相关。
直接而精确:要直接、具体,避免含糊不清的描述。 关注TODO:不要告诉模型不要做什么(比如“不要问我的兴趣相关内容”),明确告诉它要做什么(比如“推荐全球热门电影”)。这能更有效地指导模型的行为,减少产生意外结果的可能性。
常用技巧
明确任务目标: 告诉模型需要完成的任务,如分类、生成文本、翻译等。
指定格式和输出要求: 如指定输出为JSON格式、限制输出长度等。
角色扮演: 如“你是一个专业的翻译”、“你是一个专业的客服”等。
逐步推理: 如“先理解用户的问题,然后根据理解生成回答”等。
限制范围: 如限制模型的回答范围,避免生成不相关的内容。
常用技巧
任务描述 + 示例结合: 先描述任务,然后提供一些示例,让模型根据示例完成任务。
示例涵盖边界情况: 提供一些边界情况的示例,帮助模型理解任务的复杂性和边界条件。
示例与目标风格一致: 确保示例与目标风格一致,避免生成与示例风格不同的内容,如我需要json形式的结果。
用分隔符清晰分隔示例与新任务: 用分隔符(如###)清晰地区分示例和新任务,避免混淆。
COT通过让大模型显式生成“中间推理步骤”来提升其在多步推理任务上的准确性 主要变体
添加COT提示: 在任务描述后添加“请一步一步思考”等提示,引导模型生成推理步骤。
要求示例中包含推理步骤: 提供的示例中包含推理步骤,帮助模型理解任务的复杂性。
问题聚类(Question Clustering):将数据集中的问题分成几个簇。
示例采样(Demonstration Sampling):从每个簇中选择一个代表性问题,并使用零样本思维链提示为它生成推理链。该过程会采用一些简单的启发式规则,比如问题长度或推理步骤的数量,以确保示例的简洁和准确。
示例: Question:
如果一个玻璃杯从10楼掉下去,会发生什么?逐步思考。
Answer:
Let's think step by step.
1. 玻璃是易碎材料。
2. 从10楼掉下会有很大速度和冲击力。
3. 玻璃承受不了这样的冲击。
4. 因此,它很可能会在落地时碎裂。
答案:它会碎掉。
常和 Chain-of-Thought(思维链提示)配合使用。 核心思想: 让模型多次独立推理同一个问题,然后选出现次数最多的答案作为最终结果。 技巧:
生成多条推理路径,并且引入temperature
收集多个候选答案
投票选出最高频率的答案
思维树(ToT)是一种用于解决复杂任务的提示工程框架,它通过模拟人类的树状思维过程,显著提升了大型语言模型(LLM)的推理和解决问题的能力。
不同于传统的“思维链(Chain-of-Thought, CoT)”那种线性的、一步步的思考方式,ToT 鼓励 AI 进行多路径、多步骤的探索。它将问题分解成多个中间步骤(即“思想”),并在每个步骤中生成多个可能的选项(“分支”),形成一个树状的思考结构。
prompt 结构:分解任务→ 生成和评估 → 结合搜索算法
示例
你是一位经验丰富的旅行规划师。
你的任务是为客户规划一个从北京到上海的五天四夜旅行。
请你严格按照以下步骤进行思考和规划,最终给出详细的行程安排:
**第一步:任务分解**
首先,将这个复杂的旅行规划任务分解成几个主要的子任务或“思想”步骤。例如:
1. **交通规划**:如何规划北京到上海的往返高铁,以及上海市内的交通方式?
2. **住宿选择**:如何根据预算和兴趣,选择合适的住宿区域和酒店?
3. **行程安排**:如何将客户的兴趣(历史文化、现代艺术、本地美食)合理地分配到五天行程中?
4. **餐饮推荐**:如何为每一天安排符合客户喜好的美食体验?
5. **预算考量**:如何在整个过程中平衡中等偏高的预算?
**第二步:多路径思考与探索**
针对每个子任务,请思考至少两种不同的方案或“思想路径”,并简要说明其优劣。
**示例(住宿规划):**
* **方案A(思想路径A)**:选择住在外滩附近。
* **优势**:交通便利,景点集中,夜景美观。
* **劣势**:酒店价格较高,游客较多,可能会有些嘈杂。
* **方案B(思想路径B)**:选择住在法租界区域(如徐汇区)。
* **优势**:环境安静优雅,靠近现代艺术区,美食选择多样。
* **劣势**:离外滩等核心景点稍远,部分地区交通便利性不如外滩。
请像这样,为每个子任务思考至少两种不同的方案。
**第三步:评估和选择**
在思考完所有方案后,请你对它们进行综合评估,并从这些“思想路径”中选择一个你认为最佳的组合方案。请解释你为什么选择这个方案。
**第四步:生成最终行程**
根据你选择的最佳方案,生成一个详细、结构化的五天四夜行程。行程应包括:
* 每天的行程主题。
* 具体的景点和活动安排。
* 推荐的餐饮和交通方式。
请按照这个逻辑,一步步地为我完成这个旅行规划。
是一种让大语言模型(LLM)先生成相关背景知识,再利用这些知识去回答问题的提示方法。
示例
Q: 请列出联合国安理会常任理事国的相关背景知识。
A:
1. 联合国安理会有5个常任理事国。
2. 他们拥有否决权。
3. 成员是根据二战胜利国确定的。
4. 成员包括:中国、法国、俄罗斯、英国、美国。
Q: 哪些国家是联合国安理会常任理事国?
A: 中国、法国、俄罗斯、英国、美国。
适用场景
开放域问答(历史、科学、地理等)
常识推理(需要多步背景知识)
学术类问题(先回忆理论再应用)
跨领域问题(整合多个知识片段)
[1]What is chain of thought (CoT) prompting? https://www.ibm.com/think/topics/chain-of-thoughts [2]Grok Prompts : https://github.com/xai-org/grok-prompts
[3]Tree of Thoughts Implement : https://github.com/princeton-nlp/tree-of-thought-llm