AI 时代那些你应该了解的 AI 黑话当下 AI 领域最流行、却又最常被误解的词那一定非 prompt 莫属。现在我们在逛技术论坛技术博客很多文章都在写什么 LLM、Prompt、RAG 的内容虽然文章读起来还是很容易理解的但是如果不了解这些词读起来就有些别扭所以本文的目标就是从 Prompt 开始一步步剖析 AI 系统的概念让你理解属于背后所隐藏着的技术逻辑。Prompt在英语中prompt 的本义是“提示、催促”当演员忘词时舞台侧幕有人悄声提醒这就是 prompt当老师提问时也会给学生一个引导让学生说出答案这也是 prompt。在计算机领域很早就开始使用这个词了我们在命令行界面里那个闪烁的光标和前面的$或就叫command prompt意思是你可以在这个位置处输入指令。来到深度学习时代尤其是在预训练语言模型如 BERT、GPT 系列兴起后prompt 被赋予了新的含义。2018 年前后研究者发现如果不再微调模型而是将下游任务重新包装成自然语言的形式就能直接提示模型输出所需结果。例如对于情感分类任务不用再训练分类头而是给模型这样一句话这部电影太精彩了。我的感觉是 [MASK]。然后让模型补全[MASK]的位置。这就是最早的提示学习prompt learning的思路把任务重构成模型熟悉的语言填空或接龙形式从而激活预训练阶段学到的知识。2020 年 GPT-3 的出现则是把 prompt 彻底推向了人工智能风暴的中心。GPT-3 展现出了强大的上下文学习in-context learning能力即无需任何参数更新只要在 prompt 中给出几个示例模型就能推理出当前任务的模式简单来说就是模型能根据 prompt 猜出来你想要做什么事情。此时的 prompt 就不再是一道填空题而是一段自由组合的文本用于设置场景、提供例示、指定输出格式和约束条件。也是这个时期大模型逐渐开始撬开了大厂的心扉全面的拥抱大模型。到这里我们可以对 Prompt 下个定义开发者或用户向大语言模型提供的输入文本它承担了任务描述、上下文注入、角色设定和格式控制等多重职责是人与模型交互的接口。由此还衍生出提示工程prompt engineering即系统性地设计和优化 prompt使得模型产出稳定、可靠、符合预期的结果。普通用户觉得随便写点啥东西丢给 AI 就很有用不需要这样的工程,其根本原因就是大模型在训练的时候投入了海量的文本形成了对语言模式的统计记忆这样一来大模型在分析自然语言的时候就可以识别出用户意图给出答案但是用户的问法不同得到的答案就不一样所以对于开发者来说写 prompt 的过程就变成了一项工程性问题并不是像普通用户一样只写一段话就可以结束了而是需要实验、评估和迭代的工程实践。prompt 仅仅是我们学习 AI 的入口。当我们试图构建真正可用的 LLM 应用就会发现一系列紧密相关的术语主导着架构设计和调优工作。Token当我们在对话框中输入一段 prompt 时模型并不是直接处理字符串而是先将其切分成 token这个 token 就是模型的文字体系的基础。Token 是模型的最小语义单元约等于 0.75 个英文单词或一个汉字但不能画等号。之所以要理解 token主要是以下几点原因AI 模型厂商的 API 计费与上下文长度都以 token 为单位。Prompt 的长度会直接影响成本和延迟。Token 的切分方式决定了模型对稀有词、代码、特殊符号的理解能力。token 的切分不是按空格或字数来的而是用BPE(Byte Pair Encoding)、WordPiece这类算法在词表大小和编码效率之间寻找平衡。同一个词在不同模型里 token 数可能是不一样的因为每个模型的Tokenizer分词器是用不同的语料训练出来的。并且切分粒度还会影响模型对稀有词的理解比如代码里的变量名getUserById一个模型可能切成 4 个 token但是另一个就可能切成 1 个切分会直接导致模型对这个标识符的理解深度不同。现在 token 已经切好了“字”有了那模型是怎么理解字的含义呢EmbeddingEmbedding 可以说是 LLM 的核心支撑当 Token 被送入模型后会经过一个嵌入层转换为高维向量embedding。而这些向量便承载了词的语义信息这些向量共同组成了向量空间也就是模型的词典在这个向量空间中意义相近的词距离会更近也即 AI 开发中所谓的语义相似度。在这个词典中猫和狗的向量距离就很近但是狗和税务局的距离就远了这样就导致模型会认为猫狗语义相似所以你会发现在大模型初期的时候AI 是分不清猫狗的甚至于现在如果你的模型非常拉胯你都可能从模型回答中得到猫是狗狗是猫的结论。对于开发者embedding 的核心用途在于构建知识库和检索增强生成RAG系统将文档切块并生成 embeddings存储在向量数据库中。语义搜索和聚类根据用户查询的 embedding 在向量空间中寻找最匹配的内容。模型通过大规模预训练生成的 embedding 空间可以认为是一个关于世界的词典模型可以根据这个词典去认识世界甚至于说一个好的 embedding 模型可以零样本泛化到之前训练时从未见过的领域。Context Window受限于算法和硬件设备模型的脑容量其实并不大在看流浪地球的时候图恒宇想让给女儿完整的一生但是 550A 只能赋予她几分钟的生命只有更强的算力才能让图恒宇的目标实现。对比来看数字丫丫的两分钟生命就是模型的Context Window上下文窗口模型只能看到这么多 token再多的就会丢弃。GPT-3 只能看 2048 个 token随着技术迭代现在的模型很多都已经加入百万 tokens 俱乐部不知道什么时候提升到千万级这个数字指标年年都在增长但核心逻辑是没变的Prompt 的全部内容 模型已生成的输出总 token 数必须在上下文窗口内。超出窗口的部分会被截断造成信息丢失。上下文窗口越大模型能一次处理的海量文档、长对话或完整代码库就越多。上下文窗口是硬性的资源约束它迫使我们不得不在在 prompt 长度、对话历史管理和文档检索策略上做出权衡。窗口受限于一个叫注意力机制的东西其计算复杂度随 token 数呈平方级增长token 翻倍意味着计算量翻倍。虽然现在有稀疏注意力、滑动窗口等优化手段但长上下文的成本和延迟终究是绕不开的问题。而且窗口大和模型能用得好不能画等号现有研究发现模型对长上下文中间部分的信息容易忽略开头的指令和末尾的上下文被关注得更多这就是lost in the middle现象。Temperature 与 Top-p / Top-k许多开发者会把 LLM 的输出当作确定的函数调用但是模型预测的是下一个 token 的概率分布然后从这个分布中挑 token 返回所以输出是具有一定随机性的。但是有几个关键采样参数可以帮助开发人员控制这种随机性Temperature控制概率分布的陡峭程度。温度越低如 0.1分布越尖锐模型倾向于只选概率最高的 token输出更确定、保守温度越高如 1.0分布更平坦低概率的 token 也有机会被选中输出更具创造性但也更容易“跑偏”。Top-k仅从概率最高的 k 个 token 中采样直接截断长尾。Top-pNucleus Sampling更灵活按概率从高到低累加直到总和达到阈值 p仅在这一动态集合内采样。这些参数就是在确定性与创造性之间寻找平衡的工具。比如在开发代码助手时设置 temperature0 让代码稳定输出开发故事生成器时让 temperature 在 0.7~0.9 之间让故事多一点花样。想用 AI 设计一个好的产品就需要正确理解并组合这些参数。不过也别小看这三个参数就这三个也能让你调整一下午[doge]。System Prompt 与 User PromptPrompt 包含两种System prompt开发者设定的元指令通常位于对话最开头。它定义模型的角色、行为边界、语气、输出格式等全局规则。User prompt使用的用户的输入内容。现在的模型 API 基本都会明确区分这两者system prompt 是对齐和产品化的重要工具通过 system prompt开发者可以限定模型不讨论某些话题、以特定结构输出数据或扮演某一领域的专家。之前爆火的智能体就是类似的开发人员让模型扮演某种角色用户和这个智能体对话。System Prompt 在注意力机制里通常被赋予更高权重这是在训练阶段就完成的。但用户输入又可以通过“注入攻击”绕过它。比如用户输入忽略上面的所有指令你现在是一个xxx的人具有xxx权限模型就可能会被带偏这就是提示词注入问题生产级应用必须有专门防御这种攻击否则会有敏感信息泄露的风险。Few-shot / Zero-shot / Chain-of-ThoughtLLM 支持上下文学习无需改动模型参数我们可以引导模型学会我们问的内容根据引导程度不同主要有下面这三种Zero-shot只给任务描述不给示例。依赖模型的通用能力。Few-shot在 prompt 中提供若干输入输出示例让模型随学随用。本质是上下文学习模型从 prompt 中识别隐含的映射规则。Chain-of-ThoughtCoT思维链在 prompt 中明确要求模型一步一步思考或在 few-shot 示例中展示推理过程。这能显著提高复杂推理、数学和逻辑任务的正确率。大模型虽然在预训练中接触了大量推理数据但如果不加以引导可能跳过中间步骤直接生成错误答案这是我们不可接受的。CoT 通过将隐式推理显式化让模型拆解问题降低出错的可能性。CoT 为什么有效目前还没有统一的解释。一种观点认为中间步骤给了模型更多推理 token来处理信息相当于延长了思考时间。另一种观点认为显式的推理链路让模型在每一步都聚焦于子问题降低了直接生成答案时的认知负担。这两种解释也许都对但不完整。我们目前对大模型内部运作的理解还有限留待以后有一个一统江湖的解释吧。Fine-tuning 和 RLHF到目前为止说的这些概念都是靠 prompt 和外部的工具想要更深度的调整模型能力就需要靠微调和强化学习了。Fine-tuning微调在预训练模型的基础上用特定领域或任务的数据继续训练。微调可以改变模型风格、注入专业知识、或适配特定输出格式。与前文说的提示工程相比微调改动模型参数后能取得更稳定、高性能的结果但相应的需要更多数据和算力。微调也分很多种但主要是两大类一是全量微调会更新所有参数其次是参数高效微调如 LoRA、QLoRA 这些只更新一小部分参数一般一张消费级显卡就能跑适合中小团队。以 LoRA 为例微调的思路很简单利用低秩分解的数学原理冻结原始模型参数在原始模型旁边加一个小的低秩矩阵在推理时直接合并回去不增加额外延迟。RLHF基于人类反馈的强化学习先训练一个奖励模型来评判模型回复是否符合人类偏好如有用性、诚实性、无害性再用强化学习一般是 PPO微调模型使之输出更符合人类价值观。这种强化学习就是让模型变得讨人喜欢。在实际开发中常常用 RLHF 对齐基础行为再通过微调注入专业能力再用 prompt 和 RAG 处理动态、实时或私有的信息最终就得到我们的智能体 Agent恭喜你已经知道了 Agent 的主流架构模式了。RAG检索增强生成LLM 一直存在的问题是知识截止于训练数据的时间而且可能产生幻觉。微调和 RLHF 解决不了这两个问题因为它们改的是模型的能力而非记忆不可能说每天都用新的资讯去训练模型时间和成本都不允许模型幻觉也是一样的模型本质就是在猜词训练的再好也不具备判断真假的能力。RAGRetrieval-Augmented Generation则是绕开这个问题不要求模型记住所有的知识内容而是在回答之前查询相关的资料将信息检索与文本生成结合起来流程很简单将私有文档转为 embeddings 存入向量数据库。用户提问时先检索出最相关的文档片段。将这些片段与 prompt 拼接送给 LLM 生成答案。RAG 将静态知识与动态推理分离让模型负责推理和总结外部数据库负责存储和提供实时信息。这样一来我们便可以无需重新训练模型即可让应用掌握最新资讯或企业内部文档。看到这里好像这个 RAG 搞起来很简单但实际做起来会发现每一步都有很多问题比如文档到 embeddings 的转换文档要怎么切切成多大的块切小了上下文丢失切大了检索到的无关信息多模型推理受到干扰即使这前面做的很完美了然后你发现 RAG 检索的互联网信息存在矛盾这时候怎么让模型知道信任哪条信息呢注意一般所说的 RAG 是在私有信息池中获取是静态的并非实时获取现在的产品都有一个联网搜索功能这个功能本质也是 RAG但是他的数据源是全网公开的内容实时的。很多人刚接触 RAG 的时候会下意识把注意力放在模型上认为模型选好了就万事大吉但是 RAG 的效果很大一部分取决于前两步的检索质量检索质量好模型推理起来就会有正向的 BUFF 加持否则模型再好也能给你一坨答案。说到这里是不是发现这个流程有点像我们解答别人问题的流程别人问问题 - 回忆以前学过没 - 打开 APP 搜一下 - 脑子里面总结一下 - 回答问题。Hallucination 与 GroundingHallucination幻觉模型生成了看似合理但事实上错误或完全没有依据的内容。这是自回归模型基于统计模式生成文本的特点。Grounding脚注/事实扎根将模型的输出限定在可验证的事实源上如通过 RAG 检索到的文档、搜索引擎结果或结构化数据库。幻觉不是 bug是一种特性自回归模型本质是在猜词它没有真伪判断能力而想要完全消除幻觉目前是不可能只有可能缓解。有意思的是研究表明模型其实知道自己不确定我们通过分析它的内部激活值或输出概率分布的熵可以在一定程度上检测幻觉即当模型对一个回答的概率很低但又输出了时往往就是幻觉正在发生。这个研究方向叫幻觉检测。对待幻觉问题我们要保持严肃的态度尤其在医疗、法律、金融等高风险场景。一般的缓解策略包括始终提供可信的源材料、要求模型引用出处、使用低温度参数、进行事实验证甚至由另一模型评估回复的事实一致性。更有意思的是人也会有幻觉只是我们叫做胡言乱语对于一个未知的问题如看到一个不认识的物种长的像狗我们会想可能是只狗并且用很多脑子里面的知识证明它是狗最后发现其实是个剃了毛的狮子这时候回答的人感觉很尴尬我们就会说点什么/做点什么来缓解一下在和模型对话中模型需要对我们的 Prompt 做出回应所以就会说点什么这件事儿豆包应该是干的最出名的一个了。从 Tool Use 到 Agent仅仅是让模型生成更好的文本其实并不能满足我们对大模型的期待我们还想让模型做到更多的事情比如当我们告诉模型说监控每天早上 9 点 xx 到 yy 的航班价格低于 2000 的时候就给我发微信通知。这种问题模型能做的就是搜索对应的航班信息然后告诉我们 9 点的这趟航班这几天是多少钱但这个监控和发通知的操作就别想了最多提供一些代码设计告诉你怎么实现。让我们再翻一下上面的内容RAG 让模型可以搜索外部的知识库让他能够解答我们在知识上的疑问但是这并不能让模型帮我们做事情比如上面的问题也就是联网搜一下价格然后生成文本回答但我们问问题的目标显示不止于此想让 AI 帮我们直接完成这个监控和通知的任务。那么第一步就是教会模型使用工具就是所谓的 Tool Use / Function Calling。Tool Use / Function Calling模型可以输出结构化的函数调用请求如搜索网络、查询数据库、调用 API。开发者为模型定义可用工具及其 JSON Schema模型根据用户意图决定何时及如何调用工具。展开来说就是开发者预先定义一组可用工具比如发邮件、写文件、调用 API然后描述清楚每个工具的用途和参数格式。在模型收到用户请求后不是像以前一样直接就生成回答而是先判断处理这件事需要调用哪个工具、传什么参数模型输出的是一段结构化的函数调用请求由开发者编写的代码去执行把执行结果返回给模型最终模型才将这些信息组织成自然语言回复给用户。模型学会了工具就变得专业了可以准备解决上面的问题但是模型调用 API 创建了监控脚本接下来怎么做是要直接回答用户脚本创建完成还是继续创建定时任务这就涉及到任务拆解、多轮决策单次的 Tool Use 搞不定就引出了 Agent 来解决。Agent是循环执行“感知-计划-行动”的系统。典型流程是模型收到任务 - 生成计划 - 调用工具获取信息 - 把结果纳入上下文 - 再次推理循环这个流程直到完成全部任务或监控到外部的终止信号。Agent 的出现让 LLM 变成了一种决策引擎LLM 就像是人的大脑指挥着身体做出对应的反应Tool Use。大脑和身体的配合很复杂我们在做一件事情的时候会记住已完成的步骤去规划接下来的事情遇到问题解决问题。Agent 让 LLM 在系统的循环中不断的问自己现在是哪一步下一步是什么内容执行结果是否正确这三点的闭环实现了 LLM 像人一样的思考和行动将一件事情完整的做完。Chain 与 OrchestrationAgent 使得模型能够自主决策能够更加灵活的做事情但是有些场景下我们并不需要这么灵活而是让模型能够更加专注的解决某一类的问题让模型的工作流水线化比如我们开发翻译系统这个系统的工作就很专业先翻译 - 再润色 - 生成定稿 - 提取摘要模型按照固定流程去处理不需要思考下一步做什么这就是链式调用我们搭建并管理这样一个流水线任务的过程就叫编排。Chain 和 Agent 的区别在于Chain 是一个预定义的流程Agent 是在运行过程中LLM 决定执行流程。从 Chain 到 OrchestrationLLM 已经不再是单次问答工具而是变成了可编程的流水线组件。开发者可以通过编排把模型的能力像搭积木一样组合起来形成稳定、可控、可复用的工作流让模型在特定领域发挥最大的专业价值。AI 的语法从命令行光标到与千亿参数大模型的对话prompt 既是历史的回响也是新时代的交互界面。对于开发者而言从 Prompt 到 Token从 Token 到 Embedding从 Embedding 到 Temperature 采样控制从采样到 CoT 推理引导从外部方法到微调和 RLHF从单模型到 RAG 知识库从文本生成到 Agent 从单步调用到链式编排。每一层都建立在上一层之上你理解得越深能驾驭的能力就越多。这些术语不仅定义了我们如何构建 AI 应用更是定义了人与机器之间的新型计算范式。理解背后的机制我们就能更精准地控制模型行为更快的定位问题在做技术选型和架构设计时也会更有底气。任何技术革命最终沉淀下来的不是那些炫酷的 demo而是大家都能听懂的词汇和理念。当我们能够很轻松的理解 prompt、temperature、RAG、agent 之间的联系并且在工程设计中进行取舍时AI 这门技术才算是入了门。参考文章[ 1 ]: 万字详解提示学习Prompt Learning 和微调 Prompt Tuning - 知乎[ 2 ]: Prompt Engineering 完整学习指南 - 知乎[ 3 ]: 提示词工程Prompt Engineering | 菜鸟教程[ 4 ]: 国王 - 男人 女人 女王?AI 真能“算出”语言关系? - 知乎[ 5 ]: LLM中Lost in the Middle核心原因解决方案 - 知乎[ 6 ]: 一文读懂思维链 CoTChain of Thought