当前位置: 首页 > article >正文

LLM 模型 Prompt 工程

目录

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.kler.cn/a/573086.html

相关文章:

  • [Computer Vision]图像分割技术
  • Android10.0关于发送广播Sending non-protected broadcast android.price.public.close
  • JVM(Java Virtual Machine,Java 虚拟机)的作用
  • 机器分类的基石:逻辑回归Logistic Regression
  • JavaWeb-HttpServlet源码分析
  • SpringBoot为什么要禁止循环依赖?
  • 网络安全公钥密码体制
  • 不懂ui->layout()->removeWidget(bar);
  • 2W8000字 LLM架构文章阅读指北
  • 题目梳理2025[长期更新]
  • 在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
  • 数字北极星与DeepSeek深度融合,引领流程智能的AI革命
  • 第十二届蓝桥杯大学A组java省赛答案整理
  • 【简单的C++围棋游戏开发示例】
  • react 编写一个待办事项,函数优化,组件传值
  • Go 语言中常用的爬虫框架和工具库
  • 【不是广告】华为昇腾的一小步,Pytorch的一大步
  • 权限管理Vue实现
  • kotlin高级用法总结
  • 3.RabbitMQ管理