从原理出发 - 提示词如何影响大模型的输出

在探索人工智能的深海中,提示词(Prompt)是引导大模型输出的灯塔。本文希望通过对自身所学所思进行总结,解析提示词如何塑造AI的响应,揭示其背后的机制。

什么是Prompt?

Prompt(提示词)是大模型的输入,也是调用大模型能力的接口,用以激发或引导大模型生成特定类型的回答。

这个定义很标准,并不需要多余的解释,我们继续追问。

为什么需要Prompt?

直接回答这个问题可能会有些抽象,此处引入ICIO框架,ICIO的核心思想,是通过明确定义任务的各个方面,来提高AI响应时的效率和准确性。它是业内广泛认为最为简单且易于遵循的提示框架,因其简单性而受到青睐。

在ICIO的框架的设计中,Prompt可能包含四要素:

  • Instruction(指令):这是最重要的部分,它直接告诉模型需要执行的具体任务。

  • Context(上下文/背景):上下文提供了任务执行所需的背景信息,帮助模型理解任务的情景和环境。

  • Input Data(输入数据):输入数据是模型需要处理的具体信息。

  • Output Indicator(输出指示器):输出指示器告诉模型用户期望的输出类型或格式。

其中除了指令以外,其他要素都是可选的,说明指令对于大模型来说是最重要的,其他要素都是对指令的补充。这意味着:

提示词最基本的作用是沟通和引导,其核心是要清晰地传达用户的意图,而上下文和输入输出等内容,是对意图的补充,帮助大模型更快、更准确地理解意图。

什么是优质Prompt?

优质的Prompt,可以清晰地传达用户的意图。

那么如何做到清晰呢?

当A的提问话术为“我配XXXX吗?”,B应当如何思考。

A的预期

理想情况下,B会在脑海中构建一个关于这个问题的上下文框架,根据A的人物性格特性,理解到A的这种表达方式是想要B为自己做一些事情,更多是期待获得某种情感上的回应,进而基于这个框架来形成回答:“没问题,你想要的我都会帮你实现”。

B的回答

如果B的回复,是告诉A你想要的也可以自己来实现。这个回答可能会让A不高兴,因为B没有真正理解A的意图,A实际上是希望B能帮忙做XXXX。

可以看出,在这个语境中,我们的GPT B的关注点,落在了“事件”上,而非“配”上,导致B误以为A是简单的想要XXXX,进而导致了其不符合预期的输出。

这种预期上的差异,一方面来源于GPT B的性能不足,另一方面是A的Prompt不够好,导致B对上下文中信息的捕捉不够充分,进而没能充分理解A的意图。所以,要想做到清晰,指令很重要,而指令背后的上下文,也很重要。

好,提到上下文和理解,我们继续问下一个问题。

GPT如何理解Prompt?

GPT的结构

GPT的模型结构

上图是GPT模型的基本结构,GPT模型源自于Transformer模型。由于Transformer模型最初的设计是进行类似文本翻译的序列到序列的任务,而GPT模型的目标是进行预测性的生成式任务,比如预测下一个单词的概率分布,并不需要Encoder来处理输入序列,因此进行了简化。

GPT模型使用了Transformer的解码器部分,且舍弃了解码器中的交叉注意力层,但是保留了最核心的两层

  • 掩码多头自注意力层(Masked Multi Self Attention Layers,对应Transformer的Masked Multi-Head Attention,简称MHA)

  • 前置反馈网络层(Feed Forward Networks Layers,简称FFN)

其中,自注意力层的功能是理解输入内容,它使模型能够在处理序列时捕捉到输入数据之间的依赖关系和上下文信息,GPT亮亮对麦琳情绪的捕捉就在此发生。FFN层会对自注意力层的输出进行进一步的非线性变换,以提取更高级别的特征,类似于我们的大脑在思考如何回应,进而基于已有的信息和知识,产生新的内容。

本篇并不打算深入讨论FFN,因为在FNN层,Prompt对大模型输出的影响是通过自注意力层的输出间接产生的,且FNN层的非线性变换很难用语言表述清楚。

而在自注意力层,Prompt的影响相对可以解释,其重点在于:Prompt会影响自注意力层对上下文信息的捕捉。

自注意力机制

老规矩,从问题出发,掩码多头自注意力层是如何捕捉上下文信息的?

在一次大模型的执行过程中,Prompt首先会通过Tokenization(分词)形成一个token(词元)序列,首先通过Embedding(词嵌入)转变成高维空间中的向量。在向量空间中,每一个点代表一个实体,可以是单词、短语、句子等任何需要被AI处理的数据,这些点在向量空间中的位置和分布反映了实体之间的相似性和关系,其所在空间的每一个方向都代表了数据的某种属性或特征。

Embedding产生的原始的向量的语义,就是词本身的语义,但是在不同的上下文语境中,相同的词也会有不同的含义。比如“苹果”这个词,在“苹果公司的财报”、“苹果的口感”这两句话中,分别代表着苹果公司和水果。因此大模型需要对原始向量“苹果”,基于上下文中“公司”、“财报”、“口感”等信息,来进行向量的调整,丰富其语义。

Prompt对上下文信息的理解,就体现在如何基于原始向量产生新向量的过程中。

为了实现这种能力,GPT引入了自注意力机制,它是GPT的自注意力层的核心,它的核心思想是模仿人类的注意力,即在处理大量信息时,能够聚焦于当前任务最相关的部分,而忽略其他不太重要的信息。

通过自注意力机制的计算,序列中的每一个token都会评估其他token对于丰富自身信息的重要性,来得到其与其他token的注意力权重。

举个例子,输入“有一天,一位勇敢的探险家”来要求GPT进行文章续写,对于其中token“探险家”而言,它会去评估“有一天”、“一位”、“勇敢的”对于自身的重要性,发现从语义、语法等角度分析,“勇敢的”对于自身的内容理解相对重要,就会给其赋予更高的权重,此时我们可以说,“探险家”注意到了“勇敢的”。

回归到Prompt对模型输出的影响上,我们可以认为:Prompt的不同部分对输出结果影响的大小,主要体现在注意力权重的分配上。

缩放点积点积注意力(左)和多头注意力(右),引自《Attention Is All You Need》

单头注意力(缩放点积注意力)

上图来自于论文《Attention Is All You Need》中对于注意力的描述,其中Multi-Head Attention(简称MHA)就是我们平时说的注意力层。多头注意力是由多个并行运行的缩放点积注意力组成,其中缩放点积注意力的目的,是帮助模型在大量数据中快速找到并专注于那些对当前任务最有价值的信息。换句话说,就是计算注意力大小的权重。

缩放点积注意力的过程,可以概括为:

1.首先通过给予输入数据形成的嵌入矩阵与Wq、Wk、Wv的权重矩阵分别相乘,获得Q、K、V三个矩阵。

2.通过Q与K的点积运算结果来评估不同词元之间的相似度。

3.进行掩码操作,避免当前词元之后的词元的上下文信息对当前词元产生影响(GPT属于因果解码器,这种掩码方式体现了因果解码器的基本特性)。

4.进行归一化操作,将点积形式的权重转化为总和为1的注意力分布。

5.最后将注意力分布与K所对应的V相乘,加权求和,得到一个矩阵向量,该向量就是我们所希望求解的上下文向量。

有些抽象?别急,让我们来一步一步慢慢分析。

在论文中,对于缩放点积注意力的计算过程,选择了使用一个非常简洁的公式来表达,如下图:

缩放点积注意力机制公式

如何理解这个公式?首先,我们输入的token序列,在经过词嵌入后会形成嵌入矩阵X,并与模型通过预训练获得的Wq、Wk、Wv这三个权重矩阵分别相乘,分别获得三个核心的矩阵向量Q、K、V。

QKV计算公式,引自《A Survey of Large Language Models》

他们分别代表着什么?我们继续以“有一天,一位勇敢的探险家”这句话举例。

用图书馆中查找书籍来举例,也许会更通俗一点。有一天,你刚看完《流浪地球》,心潮澎湃,希望去找一些与科幻有关的书,此时:

  • Q:代表了你的需求,比如“我希望找一些和科幻有关的书”;

  • K:代表了书籍的特征,比如我最喜欢的《三体》这本书,就包含了“科幻”、“社会批判”、“宇宙社会学”等标签;

  • V:代表了书籍的内容,你通过特征找到了《三体》,知道了它的作者是刘慈欣,内容摘要、以及它几十万字的精彩内容;

那么这三个向量是如何得到注意力的权重的?让我们来到“探险家”的计算过程中。“探险家”所提供的Q,会分别与序列中的其他token的K计算点积,获得与其他token的语义相似度,进而得到注意力的分数,公式如下(T是矩阵转置,目的是匹配矩阵的维度,dk是K的维度,除以其平方根是为了缩放点积,确保数值稳定)

注意力分数公式

有可能,“探险家”由于其也具有“冒险”、“勇气”等关键特征,其与“勇敢的”的点积相对更大,那么其在归一化后的占比也会更高,在GPT的理解中,“勇敢的”对于“探险家”而言,就更重要。

另外说明一下,各位也许会看到“注意力函数”的描述。注意力函数有两种,“点积注意力”和“加性注意力”。Transformer团队在论文中明确提及,选择点积注意力,因为它在计算上高效且能稳定梯度,同时能够捕捉序列中元素间的长距离依赖关系。

之后进行掩码(Mask),由于在因果解码器中,当前词元是无法看到自身之后的词元的,所以需要将当前词元之后的所有点积置为负无穷,以便使其在归一化后的占比为零。

这个分布,就叫做注意力分布,对应着下面表格中“探险家”所对应的那一列。它代表着从“探险家”的视角出发,每一个token对于自身内容理解的重要程度。

一个可能的softmax后的概率分布(GPT生成,数值通过模拟产生)

softmax后获得的权重,会分别与每一个K对应的V相乘,通过注意力权重加权求和,就可以得到一个向量,称为上下文向量。

上下文向量的计算

上下文向量,就是Attention(Q, K, V)求解出来的值,其中包含了序列中与当前元素最相关的信息,可以认为是GPT在结合了上下文的信息后,对Prompt的理解的一种表示。

多头注意力(MHA)

注意力机制并没有结束,上面只是对于单头注意力的分析。在论文中提到

Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this

这段表述的意思是,多头注意力允许模型同时关注不同表示子空间中的信息,使用单个注意力头时,平均会抑制这一点。

因此Transformer引入了多头注意力,这里的多头,指的是注意力函数实例。可以理解为,不同的头,他们的Wq、Wk、Wv都不同,也就是词元会从不同角度去发问,同时表达出不同角度的特征。这对于充分捕获上下文信息,是有帮助的。

大语言模型架构配置表,其中N代表头数,引自《A Survey of Large Language Models》

目前的大模型,上图是从《大语言模型概述》中摘录的配置表,可以看到都是多头注意力机制(实际上大家使用的是在MHA的基础上进行性能优化的版本,比如分组多头注意力GQA,多查询注意力MQA)。N代表头数,可以看到GPT-3中有96个头。

多头注意力公式

每个头都按照缩放点积注意力的方式进行运算后,会将他们的上下文向量,基于输出投影矩阵Wo进行变换。论文中提到,由于每个头的维度降低,总的计算成本与具有完整维度的单头注意力相似。所以性能上相对于单头注意力并没有太大影响。

再之后,就是基于理解进行作答,这部分并不是本文关注的重点,简单概括下:就是将上下文向量传入前置反馈层(FNN),经过两次线性变化加一次激活函数来提取更深层次的特征,再通过残差连接和归一化来加速收敛。最后在输出层通过对线性变换后计算生成的logits进行归一化,来得到下一个词的概率分布,通过解码策略来选择具体的token,然后将输出的token作为Prompt的一部分再来一轮,由此往复,直至完成作答。

其中输出层涉及到了大模型的解码策略,其中GPT提供了常见的temperature、top-p等参数,这些参数的设定同样会影响模型输出的结果。

此外,AI就是最好的老师,非常推荐大家使用AI来获取相关知识并辅助理解,会有事半功倍的效果。

部署Nginx并通过Ingress暴露和监控服务

在阿里云容器服务(后简称ACK)集群中通过YAML文件快速部署一个Nginx应用并通过Nginx Ingress暴露和监控服务,结合使用ACK、日志服务、专有网络搭建业务部署运维方案。

零基础如何学习AI大模型

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型典型应用场景

AI+教育:智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据,提供量身定制的学习方案,提高学习效果。
AI+医疗:智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生进行早期诊断,同时根据患者数据制定个性化治疗方案。
AI+金融:智能投顾和风险管理系统帮助投资者做出更明智的决策,并实时监控金融市场,识别潜在风险。
AI+制造:智能制造和自动化工厂提高了生产效率和质量。通过AI技术,工厂可以实现设备预测性维护,减少停机时间。

这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述
请添加图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四、LLM面试题

在这里插入图片描述
在这里插入图片描述

五、AI产品经理面试题

在这里插入图片描述

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]👈

<think>嗯,用户现在问的是“大模型 function call”,也就是大模型如何调用函数。首先我需要理解“大模型”在这里指的是像GPT-4、PaLM这类大型语言模型。Function call可能指的是让这些模型在生成文本的过程中调用外部函数或工具,以完成更复杂的任务,比如获取实时数据、进行计算或者访问数据库等。 接下来,我要回顾之前的对话历史。用户之前询问过DeepSeek Prompt,是关于如何优化提示工程来提升模型输出的。现在这个问题可能是在探索如何让大模型不仅仅是生成文本,还能与外部系统交互,执行具体功能。这可能涉及到模型的功能扩展和应用场景的拓展。 需要确定用户的具体需求。他们可能想知道大模型如何调用函数,比如在开发聊天机器人时,让模型在回答用户问题时调用天气API获取实时数据。或者,他们可能对实现这种调用的技术细节感兴趣,比如API设计、模型训练方法等。 接下来,我应该分几个部分来介绍:首先定义什么是大模型的function call,然后说明其工作原理,应用场景,常用方法,挑战与解决方案,最后结合实际例子,比如OpenAI的Function Calling功能,或者DeepSeek的可能实现方式。 需要注意的是,用户可能对技术细节有一定了解,但需要更系统的解释。因此,解释时需要平衡技术术语和通俗语言,确保不同背景的读者都能理解。同时,要避免过于冗长,但又要覆盖关键点,比如模型如何决定何时调用函数、如何传递参数、如何处理返回结果等。 另外,用户可能关心实际应用中的问题,比如安全性、效率、错误处理等,这些也应该在回答中提到。例如,模型调用外部API时的权限管理,错误回退机制,以及如何保证调用的准确性和可靠性。 最后,检查是否有遗漏的重要点,比如现有的框架或工具支持,如LangChain等库如何处理function call,或者企业级解决方案中的最佳实践。确保回答全面且结构清晰,帮助用户全面理解大模型function call的概念和应用。</think>以下是关于**大模型 Function Call(函数调用)**的详细介绍: --- ### **1. 核心概念** **大模型 Function Call** 指大型语言模型(如GPT-4、PaLM等)通过调用外部函数或工具,完成文本生成之外的复杂任务(如计算、数据查询、API交互等)。其本质是让模型具备**“决策+调用”**能力,即: - **理解用户需求** → **决定是否需要调用函数** → **生成调用参数** → **整合外部结果生成最终回复**。 --- ### **2. 工作原理** 1. **任务识别**:模型分析用户输入,判断是否需要调用函数(例如“北京天气如何?”需调用天气API)。 2. **参数生成**:模型根据需求生成函数调用所需的参数(如时间、地点、格式等)。 3. **执行函数**:系统调用外部工具或API,获取结果(如实时天气数据)。 4. **结果整合**:模型将外部结果与自身生成内容结合,输出最终回答。 --- ### **3. 典型应用场景** - **实时数据查询**:调用天气、股票、新闻等API。 - **复杂计算**:使用计算器、数据库或专业工具(如数学求解器)。 - **多模态扩展**:生成图像时调用文生图模型(如DALL·E),或处理语音时调用ASR(语音识别)。 - **自动化流程**:通过调用函数实现邮件发送、日程管理等功能。 --- ### **4. 实现方法** #### **a. 基于提示工程(Prompting)** - **显式指令**:要求模型返回函数调用格式(如JSON)。 ``` 用户:计算3的平方根。 系统:请以 { "function": "math_sqrt", "input": 3 } 格式返回调用需求。 ``` - **示例引导**:通过Few-Shot示例教会模型如何调用函数。 #### **b. 微调(Fine-tuning)** - 在训练数据中加入函数调用示例,让模型学习何时调用、如何传参。 - 例如:OpenAI的Function Calling功能通过微调模型识别调用需求。 #### **c. 框架支持** - **LangChain**:通过`Tools`模块将大模型与外部函数连接。 - **OpenAI Function Calling**:直接通过API定义函数,模型自动生成调用请求。 ```python # OpenAI示例:定义函数并调用 functions = [{ "name": "get_current_weather", "parameters": {"location": {"type": "string"}} }] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "北京天气如何?"}], functions=functions ) ``` --- ### **5. 技术挑战与解决方案** | **挑战** | **解决方案** | |-------------------------|-----------------------------------------------------------------------------| | 模型误判调用需求 | 设置置信度阈值,或提供备用回复逻辑(如“是否需要查询实时数据?”)。 | | 参数格式错误 | 后置校验逻辑(如JSON语法检查),或要求模型重新生成参数。 | | 外部工具响应延迟或失败 | 超时重试机制,或返回降级结果(如“暂时无法获取数据,以下是历史信息”)。 | | 安全风险(如敏感API调用)| 权限分级控制,仅允许白名单函数被调用。 | --- ### **6. 实例说明** **用户提问**: “帮我预订明天从北京到上海的高铁,下午出发。” **模型Function Call流程**: 1. **识别意图** → 调用“订票系统API”。 2. **生成参数** → `{出发地: "北京", 目的地: "上海", 日期: "2023-10-25", 时段: "下午"}`。 3. **API返回结果** → 获取车次列表(如G123、G456)。 4. **整合回复** → “找到以下车次:G123(14:00)、G456(15:30),是否需要预订?” --- ### **7. 与提示工程的关系** - **互补性**:Function Call依赖提示工程引导模型生成调用请求,同时扩展了模型能力边界。 - **差异**: - **提示工程**:优化模型自身的文本生成逻辑。 - **Function Call**:连接模型与外部工具,突破纯文本生成的局限。 --- ### **8. 企业级应用(如DeepSeek)** 若涉及特定厂商(如深度求索的DeepSeek-R1模型),其Function Call可能支持: - **私有化工具集成**:对接企业内部数据库或工具链。 - **领域定制化**:针对金融、医疗等场景预置专用函数库。 - **低代码配置**:通过可视化界面定义函数与调用规则。 --- 通过Function Call,大模型从“文本生成器”升级为“智能代理”,成为连接用户需求与现实世界的桥梁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值