惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
I
InfoQ
V
V2EX
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Last Week in AI
Last Week in AI
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
腾讯CDC
罗磊的独立博客
有赞技术团队
有赞技术团队
Jina AI
Jina AI
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
H
Help Net Security
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Recorded Future
Recorded Future
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
I
Intezer
博客园 - Franky
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
P
Proofpoint News Feed
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
G
GRAHAM CLULEY

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 20 章:优先级排序 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 一文入门AI圈最近爆火的MCP协议 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 如何用GPT-4o解读视频 json命令行处理神器jq介绍 OpenAI的结构化浅析 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 如何使用大语言模型绘制专业图表 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 推荐一个好用的命令行工具ShellGPT 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
从大模型的原理到提示词优化
xindoo · 2024-10-26 · via XINDOO


  大语言模型(后文简称LLM)已经火热了近两年,相信大家或多或少都学习过一些Prompt技巧。但你有没有思考过:为什么使用这些Prompt能得到更好的输出结果?为什么有时你怎么试都得不到想要的结果?为什么有些任务LLM根本无法完成?接下来,我们通过一个简单示例来了解LLM的运行过程。理解这个过程后,你自然就能回答上述问题了。

什么是AI提示词(Prompt)

  谈到AI应用,大家首个浮现在脑海中的词汇往往是AI提示词(Prompt)。用一句话概括:AI提示词是我们向AI系统(如ChatGPT)输入的指令或问题,用于引导AI生成特定输出或完成特定任务。 这些提示词可以是简单的问题,也可以是复杂的指令集。

例如:

  • 简单问题:"谁发明了电话?"
  • 复杂指令:"请以营销专家的角度,为一款新上市的智能手表撰写一篇300字的产品介绍。"
  • 创意要求:"写一首关于人工智能的七言绝句。"

  这些例子展示了AI提示词的多样性和适应性。从简单的查询到复杂的创意任务,提示词能满足各种需求。掌握如何有效构建这些提示词对获得理想的AI输出至关重要。

接下来,我们将深入探讨提示词为何对AI结果影响如此之大,以及它们如何影响LLM的工作过程。

为什么提示词对AI结果的影响很大

  要回答这个问题,我们首先需要大致了解LLM的运作过程。用一句话概括:LLM始终在预测下一个最可能出现的词(Token)
让我们通过一个给小孩子启蒙用的句子补全练习,来了解LLM是如何工作的。

  • 请补全这句话:我午饭吃了(_____) 。
    可以填入的候选词有 披萨、垃圾桶、香蕉、盖饭、轮胎、砖头、面条、餐巾纸、包子、白云、油条、汉堡。

  从语法角度来看,所有候选项都可以填入,因为它们都是名词。但从语义上考虑,这里只能填写食物。因此,我们可以排除餐巾纸、垃圾桶、轮胎、砖头和白云,剩下盖饭、面条、披萨、汉堡、包子、油条和香蕉这些词都有可能。

  从上文的关键词"午饭"来看,在没有其他上下文的情况下,我只能根据个人饮食习惯对这些食物的可能性进行排序。结果依次是:盖饭、面条、披萨、汉堡、包子、油条、香蕉。但即便如此,我们仍然无法确定具体是哪一个。那么,如果我们提供更多的背景信息会怎样呢?

  • 我今天在西安出差,午饭吃了(_____) 。

  在这个上下文中,新增了"西安"这个关键词。众所周知,西安是中国的面食之都,所以来到西安怎能不品尝面食呢?在这种情况下,"面条"无疑是最合适的填入词。然而,如果我们再增加一些上下文信息,情况又会有所不同。比如:

  • 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了(_____) 。

  到这里,你肯定会斩钉截铁地说应该填写"汉堡"。虽然前面的文字中有"中午"和"西安"这两个关键词,但它们对候选项的影响权重远不及"汉堡王"高。

  这实际上就是LLM执行一次预测的过程。整个LLM回复问题的过程就是不断重复这些步骤,持续预测下一个词(token)应该是什么,直到模型认为回答完成或达到最大长度限制。

实际上一次LLM完整的回答过程示例如下:

步骤 当前状态 预测出下一个词(Token) 用户看到的结果
0
1 今天 我今天
2 我今天 我今天在
3 我今天在 西安 我今天在西安
4 我今天在西安 出差 我今天在西安出差
5 我今天在西安出差 我今天在西安出差,
6 我今天在西安出差, 我今天在西安出差,但
7 我今天在西安出差,但 时间 我今天在西安出差,但时间
8 我今天在西安出差,但时间 比较 我今天在西安出差,但时间比较
9 我今天在西安出差,但时间比较 我今天在西安出差,但时间比较紧
…… ………… …… …………
n-2 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭 吃了 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了
n-1 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了 汉堡 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡
n 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡 我今天在西安出差,但时间比较紧,中午就去了汉堡王,午饭吃了汉堡。

其中预测出下一个词列就是LLM在回答你问题时一个接一个生成的词。当整个过程执行完毕,你就得到了LLM的完整回复。LLM的大致执行过程确实很简单,但复杂之处在于每次计算下一个词(token)时,它需要调动前面所有Token所涉及的庞大参数,然后去计算词表中所有词的可能性,并从中选出概率最高的一个(Temperature为0时)。这个计算量非常大,因此LLM需要消耗大量算力,也导致它返回结果较慢。

在这里插入图片描述

  • 冷知识:正是因为LLM回复的过程是不断通过预测来补全文本,所以OpenAI的对话接口叫completion。

  经过大量文本训练后,LLM不仅学会了各种知识,还掌握了文本中蕴含的语义和逻辑关系。通过使用已有的词(Token),LLM能够计算出下一个最合适的词(Token),从而神奇地展现出媲美人类的语言能力(这一现象学术界至今没有统一的解释)。通过上述简单例子,我们可以直观地理解为什么不同的Prompt会对模型的输出产生巨大影响。

  理解了LLM的工作原理后,我们就能更好地编写提示词。提示词的本质是为LLM提供充足的背景和上下文信息,使其能生成更符合我们需求的文本内容,而好的提示器可以在有限的文本中提供更多有效的上下文,触发模型更多的参数,从而能得到更丰富多样更优质的结果。接下来,让我们探讨几个常见且有效的提示词技巧。

角色的重要性

  许多提示词模板都会设定角色,这是一个非常有效的策略。让我们用一个简单的例子来解释原因。假设你要向某个心智尚未完全成熟、理解能力有限、知识储备不丰富的人讲解某个主题。这里你用了一长串描述来界定你的受众,而我只需用三个字——"小学生"就能代替。一提到"小学生",你就能自动联想到一系列相关的背景信息,无需我再多加解释,对LLM来说也是类似的。我们可以将角色视为一个包含大量背景信息的压缩包。这就是为什么设定角色能如此有效地改善提示词的原因。

  • 心智未完全发展成熟、理解水平有限、而且知识储备不是很丰富的人 == 小学生

  类似地,特定领域的名词、术语和关键词也起着相同的作用。这些词汇就像是特定领域知识的压缩包,能够迅速激活相关的专业背景和上下文,从而达到与设定角色相似的效果。

One-shot/Few-shot

  这俩提示词技巧直白来说,其实就是给大模型一些参考样例,One-shot就是给定单个样本,Few-shot是给定多个样本。 从LLM工作原理的角度来看,提供样本(One-shot或Few-shot)能够提升输出质量,主要有以下几个原因:

  1. 增加上下文信息: 样本为LLM提供了更多的上下文信息,这些信息会影响模型在预测下一个词(token)时的概率分布,从而引导模型生成更符合预期的输出。
  2. 示范任务格式: 样本展示了任务的具体格式和结构,使LLM更容易理解和模仿所需的输出形式。这相当于为模型提供了一个"模板",增加了输出与预期一致的可能性。
  3. 激活相关知识: 提供样本能帮助LLM更准确地识别任务类型和所需知识领域。这样,LLM可以在其庞大的参数空间中激活与任务相关的"知识",从而提高输出的相关性和准确性。
  4. 降低歧义性: 某些情况下,任务描述可能存在歧义。提供样本可以明确任务的具体要求,减少LLM误解或偏离主题的可能性。

任务拆解

  任务拆解是另外一种高效的提示词技巧,它将复杂问题分解为更小、更易管理的部分。这种方法不仅帮助LLM更好地理解和处理问题,还能显著提高整体回答质量。通过将大任务拆分成一系列小步骤,我们能更精确地引导LLM的思考过程,从而获得更准确、更全面的回答。

从LLM的工作原理来看,任务拆解和多次问答能提升回答质量,主要原因如下:

  1. 上下文增强:每次问答都为LLM提供新的上下文信息,影响模型预测下一个词(token)的概率分布,使后续回答更精准。
  2. 缓解长期依赖:通过任务拆解,每个子任务的输入相对简短,减少了LLM在处理长文本时可能出现的"遗忘"早期信息问题。
  3. 交互式引导:多次问答过程中,用户可根据LLM的回答调整后续问题,逐步引导模型得出更准确的结果。
  4. 简化复杂任务:将复杂任务拆解为多个简单子任务,每个子任务更易被LLM准确理解和回答,从而提高整体质量。
  5. 及时纠错:多次问答提供了多个检查点,用户可在中间步骤发现并纠正潜在错误,避免错误累积。

  这个技巧不仅提高了LLM的回答质量,还增强了用户与AI之间的交互体验。通过任务拆解和多次问答,用户可以更精确地引导LLM的思考方向,同时更深入地理解AI的推理过程。这种方法不仅适用于简单查询,还特别有效地解决复杂问题和进行深度分析。接下来,让我们探讨另一个强大的技巧——思维链。它进一步推进了这种交互式问题解决的方法,为我们开启了更多可能性。

思维链(Chain of Thought)

  思维链技巧的核心是让大语言模型展示其推理过程。这种方法特别适用于需要逐步推理或复杂计算的问题。通过让LLM呈现其思考过程,我们不仅能获得更准确的答案,还能洞察模型如何得出结论。这种透明度在验证结果正确性和理解模型推理能力方面极为宝贵。具体使用方式很简单:在提示词中要求模型输出过程。一个"魔法"提示词是"Let's think step by step"(让我们一步步思考),在中文语境中也可以直接使用。

  从理论转向实践,让我们通过一个具体例子深入理解思维链技巧的应用。这个例子不仅展示了思维链的实际效果,还能帮助我们更好地理解LLM如何利用这种方法提高问题解决的准确性和透明度。我们将用一个小学数学应用题来说明思维链的有效性:

  • 甲乙丙丁4个人去买水果,甲买了3斤苹果、5斤梨、1斤香蕉,乙买了4斤苹果、3斤梨、5斤香蕉,丙买了1斤苹果、3斤梨、6斤香蕉,丁买了1斤苹果、10斤梨、1斤香蕉。已知苹果一斤2元、梨一斤3元、香蕉一斤4元,请按他们各自的总消费额度由高到低排序。

在这里插入图片描述

  如果你现在询问主流的几个模型,它们都能给出推理过程以及正确答案:乙 > 丁 > 丙 > 甲。然而,当我们限制LLM直接给出答案而不提供推理过程时,所有的大模型都会出错。如果你使用不同的模型多次尝试,你会发现在这个限制下,所有模型都是在瞎猜。

  思维链的有效性源于其与任务拆解相似的机制。通过思维链,LLM能够自主地将复杂问题分解为一系列小步骤,每一步都为下一步提供了额外的上下文信息。这个过程不仅增强了模型的推理能力,还能让用户更清晰地了解LLM的思考过程。与任务拆解由用户主导不同,思维链让LLM在生成答案的过程中自动创建和利用中间步骤,从而提高了回答的准确性和可解释性。

总结

  我们从LLM的运行机制来看,其实真正的Prompt技巧就只有一个,那就是提供更多高质量的上下文, 这些技巧都是为了实现这一目标。无论是设定角色、使用示例、任务拆解还是思维链,它们的核心都在于为LLM提供更丰富、更精确的上下文信息,从而引导模型生成更符合我们期望的输出。通过这些方法,我们可以更好地利用LLM的强大能力,实现更精准、更高效的人机交互。

  在理解LLM的运行机制后,我愈发觉得,与LLM沟通和与人沟通并无本质区别,两者都需要清晰的表达、适当的上下文和对方的反馈。与LLM交流时,我们需要提供足够的背景信息,使用恰当的提示技巧,并根据其回应进行调整。这种交互过程与人际沟通有着惊人的相似之处,都需要我们不断优化和调整我们的表达方式,才能达到最佳的沟通效果。

  最后,教大家一个判断自己Prompt质量的直观小技巧:把你的Prompt展示给周围的人,让他们尝试完成你的任务。如果他们直接开始思考如何实现,而不是问你一堆问题,那么你就写出了一个好的Prompt。