LLM 模型 Prompt 工程

news/2025/3/6 11:24:32/

目录

1、Prompt 基础概念

2、Prompt 主要构成

3、Prompt 相关技术

3.1、思维链

3.2、自洽性

3.3、思维树


1、Prompt 基础概念

        Prompt 工程是通过设计和优化自然语言提示(Prompt),引导LLM生成符合特定任务需求的输出的技术。其核心目标是以最小化标注数据和计算资源,最大化模型在复杂任务(如问答、推理、生成)中的性能。

        通过给 LLM 进行角色定义,并步骤会话上下文,可以让大模型的输出更精准。例如,若需模型生成产品摘要,Prompt需包含明确的角色(如“你是一位市场分析师”)、任务描述(“总结产品功能”)、输出格式(“50字以内,幽默风格”)。

核心优势:

(1)高效适应新任务:仅需少量示例即可调整模型,无需重新训练。

(2)降低开发成本:省去传统NLP流程中的数据集构建和微调步骤。

主要特点:

(1)性能提升机制:

        降低信息熵:通过明确的上下文和示例减少模型生成的不确定性,提高输出相关性。

        涌现能力激发:复杂Prompt(如思维链)可激活模型在预训练中未显式学习的推理能力。

(2)局限性:

        依赖预训练知识:若任务涉及领域专有知识(如医学诊断),需结合检索增强生成(RAG)补充外部信息。

        无法替代训练:模型的核心能力(如zero-shot学习)仍需通过预训练获得,Prompt工程仅优化表层交互。

2、Prompt 主要构成

主要构成:

  • 角色:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」
  • 指示:对任务进行描述
  • 上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
  • 例子:必要时给出举例,学术中称为 one-shot learning, few-shot learning 或 in-context learning;实践证明其对输出正确性有帮助
  • 输入:任务的输入信息;在提示词中明确的标识出输入
  • 输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如(JSON、XML)

注意事项:

(0)对角色的定义要求清晰、具体,可通过不断调试进行优化;

(1)大模型对 prompt 开头和结尾的内容更敏感。先定义角色,其实就是在开头把问题域收窄,减少二义性;

(2)对话模型是静态的,不会记录历史对话,所以我们每次对话的时候需要将历史对话一起传递给聊天模型;

(3)「给例子」很常用,效果特别好;

(4)一切问题先尝试用 prompt 解决,往往有四两拨千斤的效果;

(5)可以添加 NO COMMENTS. NO ACKNOWLEDGEMENTS. 避免废话;

(6)添加「请一步一步分析以下对话」、「Let's think step by step」开启思维链;

示例代码如下:

# 加载环境变量
import os
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv# 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
_ = load_dotenv(find_dotenv())  client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL")
)# 基于 prompt 生成文本
def get_completion(prompt, model="gpt-3.5-turbo"):messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,temperature=0,  # 模型输出的随机性,0 表示随机性最小)return response.choices[0].message.content# Prompt 构成instruction = """
你的任务是识别用户对手机流量套餐产品的选择条件。
每种流量套餐产品包含三个属性:名称(name),月费价格(price),月流量(data)。
根据用户输入,识别用户在上述三种属性上的倾向。
"""# 输出描述
output_format = """
以JSON格式输出。
1. name字段的取值为string类型,取值必须为以下之一:经济套餐、畅游套餐、无限套餐、校园套餐 或 null;2. price字段的取值为一个结构体 或 null,包含两个字段:
(1) operator, string类型,取值范围:'<='(小于等于), '>=' (大于等于), '=='(等于)
(2) value, int类型3. data字段的取值为取值为一个结构体 或 null,包含两个字段:
(1) operator, string类型,取值范围:'<='(小于等于), '>=' (大于等于), '=='(等于)
(2) value, int类型或string类型,string类型只能是'无上限'4. 用户的意图可以包含按price或data排序,以sort字段标识,取值为一个结构体:
(1) 结构体中以"ordering"="descend"表示按降序排序,以"value"字段存储待排序的字段
(2) 结构体中以"ordering"="ascend"表示按升序排序,以"value"字段存储待排序的字段只输出中只包含用户提及的字段,不要猜测任何用户未直接提及的字段,不输出值为null的字段。
"""examples = """
便宜的套餐:{"sort":{"ordering"="ascend","value"="price"}}
有没有不限流量的:{"data":{"operator":"==","value":"无上限"}}
流量大的:{"sort":{"ordering"="descend","value"="data"}}
100G以上流量的套餐最便宜的是哪个:{"sort":{"ordering"="ascend","value"="price"},"data":{"operator":">=","value":100}}
月费不超过200的:{"price":{"operator":"<=","value":200}}
就要月费180那个套餐:{"price":{"operator":"==","value":180}}
经济套餐:{"name":"经济套餐"}
"""context = f"""
客服:有什么可以帮您
用户:有什么100G以上的套餐推荐
客服:我们有畅游套餐和无限套餐,您有什么价格倾向吗
用户:{input_text}
"""# 传给 AGI 的 prompt 格式,基本介绍、输出格式、举例、用户输入
prompt = f"""
{instruction}{output_format}例如:
{examples}# 启动思维链
#请一步一步分析以下对话用户输入:
{context}
"""response = get_completion(prompt)
print(response)

3、Prompt 相关技术

3.1、思维链

        思维链( Chain of Thoughts, CoT ),是大模型涌现出来的一种独特能力。它是偶然被「发现」(对 OpenAI 的人在训练时没想过会这样)的。有人在提问时以「Let's think step by step」开头,结果发现 AI 会自动把问题分解成多个步骤,然后逐步解决,使得输出的结果更加准确。

思维链的原理:

(1) 让 AI 生成更多相关的内容,构成更丰富的「上文」,从而提升「下文」正确的概率;

(2)对涉及计算和逻辑推理等复杂问题,尤为有效;

(3)输入 Tokens 越多,输出越准确;

        注意,对于推理性模型,例如 DeepSeek R1 内置了思维链,在提问时会根据任务类型自动选择不同的推理策略(如数学问题使用分布规则分解,逻辑任务进行自我验证)。这类模型的输出不仅包含答案,还会展示中间推理步骤(即思维链),用户无需手动触发即可获得完整的逻辑链条。

3.2、自洽性

        自洽性是对思维链的扩展,通过生成多条并行推理链(如5-10条),并基于多数投票或评分机制选择最优解,以提升结果的鲁棒性和一致性。例如,在解决数学题时,模型生成多个不同解题路径,最终选择出现频率最高的答案。

        一种对抗「幻觉」的手段。就像我们做数学题,要多次验算一样。

        (1)同样 prompt 跑多次

        (2)通过投票选出最终结果

3.3、思维树

        思维树由 Google DeepMind 与普林斯顿大学提出,将问题解决过程建模为树状结构,允许模型在每一步生成多个候选思路,并通过搜索算法(如广度优先、深度优先)回溯和评估路径,最终选择最优解。其核心思想是模仿人类“试错-回溯”的认知过程。思维树更适合高复杂性任务,系统性探索更多可能性。但需要多次调用 LLM 模型评估路径,需要更多 Tokens。

技术实现:

(1)树形结构分解:根节点为初始问题,每个节点代表一个中间状态(Partial Solution),分支为可能的推理方向。

(2)搜索与评估:通过启发式评分(Heuristic Evaluation)筛选路径,并结合搜索算法扩展树结构。例如,在论文写作任务中,模型可能生成引言、方法、结果等不同章节的多个草稿版本,选择逻辑最连贯的组合。

(3)动态调整:支持对死胡同路径的回溯,重新探索其他分支。


http://www.ppmy.cn/news/1577055.html

相关文章

基于Android平台的SOME/IP测试模块 EPT-ETS

在汽车产业智能化、网联化的时代浪潮中&#xff0c;汽车电子系统正经历着前所未有的变革。SOME/IP&#xff08;Scalable service-Oriented MiddlewarE over IP&#xff09;协议作为汽车电子通信领域的关键技术&#xff0c;其稳定性、可靠性与高效性对于整车性能的提升起着至关重…

Qt常用控件之滑动条QSlider

滑动条QSlider QSlider 是一个滑动条控件&#xff0c;可以用鼠标拖动。QSlider 有水平滑动条&#xff08;horizontalSlider&#xff09;和垂直滑动条&#xff08;verticalSlider&#xff09;两种。 1. QSlider属性 属性说明value当前数值。minimum最小值。maximum最大值。si…

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台&#xff0c;专为实时日志收集、分析和可视化设计。它支持强大的搜索功能&#xff0c;并且与 Elastics…

服务器CPU微架构

1、微架构图 前端&#xff1a;预解码、解码、分支预测、L1指令缓存、指令TLB缓存 后端&#xff1a;顺序重排缓存器ROB处理依赖&#xff0c;调度器送到执行引擎 执行引擎&#xff1a;8路超标量&#xff0c;每一路可以进行独立的微操作处理 Port0、1、5、6支持整数、浮点数的加…

RabbitMQ 高级配置与优化:从入门到精通

RabbitMQ 高级配置与优化:从入门到精通 引言 在分布式架构中,消息队列(MQ)是必不可少的一环,而 RabbitMQ 作为业界广泛使用的消息中间件,凭借其高吞吐、可扩展、可靠性等特性备受青睐。然而,很多开发者和运维人员在使用 RabbitMQ 时,仅仅停留在"能用"的层面…

Spring AI:开启Java开发的智能新时代

目录 一、引言二、什么是 Spring AI2.1 Spring AI 的背景2.2 Spring AI 的目标 三、Spring AI 的核心组件3.1 数据处理3.2 模型训练3.3 模型部署3.4 模型监控 四、Spring AI 的核心功能4.1 支持的模型提供商与类型4.2 便携 API 与同步、流式 API 选项4.3 将 AI 模型输出映射到 …

leetcode106-从中序与后序遍历序列构造二叉树

leetcode 106 思路 中序遍历&#xff1a;左中右 后序遍历&#xff1a;左右中 那么可以知道后序遍历的最后一个值一定是根节点&#xff0c;因为最后遍历中间节点&#xff0c;中间节点就是根节点&#xff0c;知道中间点&#xff0c;就能将中序数组进行切割&#xff0c;以中间节…

永磁直驱式风力发电虚拟同步机仿真模型Matlab/Simulink模型

很久没有分享虚拟同步机控制相关的方向了&#xff0c;毕业后在电科院的项目又有所接触。这个课题方向其实作为硕士毕业课题还是够用的&#xff0c;相对来说也是比较容易毕业的&#xff0c;因为涉及的分支比较多。 后续对虚拟同步机的控制&#xff0c;我就延续我前面博客提到的方…