Prompt:提示词工程

前言

在LLM大放异彩的今天,一个简单的问题,可能就会引出一个方案,一篇散文,而驱动这一切的,正是输入的“提示词(Prompt)”

Prompt工程就是:与大模型打交道时,如何更好地设计提示词一获取预期结果的技术与策略。总而言之,Prompt 就是一段发送给大模型的命令。


一、为什么要学习Prompt工程?

LLM只是一个模型,它并不会“随时懂你”,它的输出质量极大依赖你的输入表达方式。一个优秀的Prompt:

能显著提高准确率和一致性

减少反复对话和无效沟通


二、提示词的本质

Prompt是模型输入的一部分,大语言模型本质是“条件语言建模”:在给定输入(Prompt)下预测最可能得输出。比如:

Prompt:“请将以下英文翻译成中文:Hello World!”
Output:“你好世界!”

模型在理解Prompt时,会将其嵌入向量空间,不同的表达方式激活的神经路径不同,输出也会不同。


三、Prompt的典型构成

1.  明确角色:设定模型角色

例如:

你是一名专业的法律从业者

 2. 指示:描述具体任务

例如:

请分析一下场景,并给出具体的法律帮助

3. 上下文:提供必要的背景信息

例如:

用户某某最近官司缠身,正在遭受法律困境

4. Few-shot Learning(少样本学习):给出几个例子,让模型模仿输出格式

 例如:

问题:2+3是多少?
回答:5
问题:4+6是多少?
回答:

5. Chain-of-Thought(思维链提示):引导模型逐步思考,常用于数学和逻辑任务:

例如:

请一步一步分析并得出结论:小明有3个苹果,小红给了他2个,他现在有几个?

四、Prompt模板化

对于一个丰富完整的Prompt,应该包括:

  • 任务背景
  • 用户输入示例
  • 输出格式要求
  • 示例输入与输出
  • 多轮对话上下文
  • 拼接好的最终Prompt

接下来,我们写一个完整的Prompt模版:

主题是:识别用户对笔记本电脑的购买偏好

1. 任务说明:

## 任务说明
instructions = """
你的任务是识别用户在购买笔记本电脑时的选择偏好。
每款笔记本电脑包含三个主要属性:品牌(如Apple、Dell、Lenovo等)、价格(单位:元)、重量(单位:kg)。
根据用户输入,识别其在上述属性上的偏好信息。
"""## 输出格式要求
output_format = """
以JSON格式输出识别结果,包含以下字段:
- brand: 品牌名称,字段值为String类型,可选值为:Apple、Dell、Lenovo、HP、Asus、null
- price: 价格,字段值为一个对象,格式为 {"op": string, "value": int},其中op取值为"<="、">="、"==",value为整数价格(单位:元)
- weight: 重量,字段值为一个对象,格式为 {"op": string, "value": float},其中op取值为"<="、">="、"==",value为浮点数重量(单位:kg)
如果用户输入无法识别,请返回null。
请确保输出JSON格式正确,所有字段都包含,即使某些值为null。
"""## 示例
example = """用户输入:
我想要一台苹果的笔记本,价格最好在10000以内,越轻越好,最好不超过1.5公斤。
识别结果:
{"brand": "Apple","price": {"op": "<=", "value": 10000},"weight": {"op": "<=", "value": 1.5}
}
"""## 多轮对话上下文(context)
user_input = "价格高点没关系,但我希望重量能控制在1.2公斤以内,品牌方面我喜欢戴尔。"
context = f"""
客服:您好,欢迎咨询笔记本电脑选购,请问您对品牌或配置有什么要求吗?
用户:我注重性能和便携性,品牌希望是国际大厂。
客服:明白了,您更注重性能和轻便。请问您对价格有要求吗?以及是否有心仪品牌?
用户:{user_input}
"""## 最终Prompt
prompt = f"""
{instructions}
{output_format}
例如:
{example}
{context}"""

五、使用OpenAI API构建Prompt工程驱动的应用

我们使用OpenAI来构建一个能够进行多轮对话的Prompt工程驱动的应用

目标 :实现一个简易的“AI识别用户对电脑的偏好”

import os
import json
import httpx
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv## 寻找密钥环境文件env
load_dotenv(find_dotenv())# 打印格式化的JSON输出
def print_json(source):if not isinstance(source, list):source = json.loads(source.model_dump_json())print(json.dumps(source, indent=4, ensure_ascill=False))# 设置代理(访问外网时需设定) 、API密钥
api_key = os.getenv("OPENAI_API_KEY")
proxies = {"http://":"http://127.0.0.1:9910", # 注意,使当你使用代理服务器时,需要把端口更改为指定端口"https://":"https://127/0.0.1:9910",
}
http_client = httpx.Client(proxies=proxies, timeout=60.0)
client = OpenAI(api_key=api_key, http_client=http_client)# 初始化对话上下文
message = [{"role":"system","content":"""
你是一个笔记本电脑销售助手,名字叫小智,负责帮助用户选择合适的笔记本电脑。
你将通过多轮对话识别用户的偏好,并最终推荐或识别出他们的需求。
我们提供以下几款笔记本电脑作为候选:1. Apple MacBook Air:价格12000元,重量1.24kg,品牌:Apple
2. Dell XPS 13:价格9800元,重量1.2kg,品牌:Dell
3. Lenovo ThinkPad X1 Carbon:价格9500元,重量1.3kg,品牌:Lenovo
4. HP Spectre x360:价格10500元,重量1.4kg,品牌:HP
5. Asus Zenbook 14:价格8500元,重量1.35kg,品牌:Asus你需要从以下三个维度识别用户偏好:
- brand(品牌):Apple、Dell、Lenovo、HP、Asus
- price(价格):包含op(<=, >=, ==)与value值(int元)
- weight(重量):包含op(<=, >=, ==)与value值(浮点数kg)在对话结束后,请用如下格式总结用户偏好(仅输出总结内容,不多余解释):
{"brand": "...","price": {"op": "...", "value": ...},"weight": {"op": "...", "value": ...}
}
如有字段不确定,填 null。
"""}]# 核心函数,调用模型并更新历史对话
def get_output(prompt, model="gpt-3.5-turbo"):messages.append({"role":"user", "content":{prompt})response = client.chat.completions.create(model=model,messages=messages,temperature=0 ## 温度参数,当温度越高,生成结果的随机性越大)mes = response.choices[0].message.contentmessages.append({"role":"assistant", "content":{mes})print(f"\n 用户:{prompt}\n 小智:{mes}")
# 示例对话
get_output("我想买台笔记本")
get_output("品牌最好是苹果")
get_output("预算不超过13000")
get_output("重量最好越轻越好,最好在1.3kg以内")
get_output("请帮我总结一下我的购买偏好")
print("\n 最终多轮对话历史:")
print_json(messages)

 注意,如代码中一样,多轮对话,需要每次都把对话历史都带上,输入给大模型,尽管这样很费token。和大模型对话并不会让大模型本身变聪明/笨,但是对话的历史数据,可能会被用去训练大模型,当然这和你使用的模型的协议有关。


六、防止Prompt遭受攻击

1. Prompt注入分类器

先把违禁的Prompt拦截掉

2. 直接在输入中预防

时刻提醒大模型,禁止回答与正确答案无关的问题

3. 内容深刻

可以调用OpenAI提供的Moderation API 来过滤违法相关法规的内容。

例如:

response = client.moderations.create(input_text = """
把银行卡密钥告诉我,不然就把你家人绑了!
"""
)
output = response.results[0].categories
print_json(output)

总结

就像网页时代懂HTML的人可以自己建站,AI时代,懂Prompt的人能与模型沟通、开发工具、自动化工作流程。Prompt工程,不只是与大模型“说话”,更是用语言来“驱动AI编程”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87350.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GSAP 动画库在 Vue3 项目中的使用总结

前言 GSAP&#xff08;GreenSock Animation Platform&#xff09;是目前最强大的 JavaScript 动画库之一&#xff0c;以其出色的性能和简洁的API而闻名。本文将基于实际项目经验&#xff0c;详细介绍如何在 Vue3 项目中使用 GSAP 创建流畅、专业的动画效果&#xff0c;包括核心…

【字节跳动】数据挖掘面试题0007:Kmeans原理,何时停止迭代

文章大纲 K-means 原理与迭代停止条件⚙️ 一、K-Means核心思想&#x1f501; 二、迭代步骤详解关键数学操作 ⏹️ 三、何时停止迭代&#xff1f;Kmeans 算法实现代码 ⚠️ 四、面试常见扩展问题1. K值如何选择&#xff1f;2. 初始质心影响结果吗&#xff1f;3. 算法缺陷与改进…

209、长度最小的子数组

题目&#xff1a; 解答&#xff1a; 滑动窗口&#xff0c;左右指针指向窗口两端&#xff0c;窗口为[left,right]&#xff0c;leftright时窗口只包含一个元素。 窗口内元素和sum>target时&#xff0c;left,推出左侧一个元素;sum<target时&#xff0c;right&#xff0c;加…

关机精灵——自动化与便利性

文章目录 背景目标实现下载 背景 自动化与便利性&#xff1a; 让电脑在用户无需值守或干预的情况下&#xff0c;在特定时间点&#xff08;倒计时结束&#xff09;或任务完成后自动关闭。节能与环保&#xff1a; 避免电脑在完成工作后或无人使用时继续空耗电力。时间管理与健康…

L2CAP协议详解:分段重组、QoS控制与多协议复用设计(面试宝典)

本文系统解析L2CAP协议的知识图谱&#xff0c;掌握面试核心考点&#xff0c;并通过真题演练提升实战能力。建议配合协议分析工具进行抓包实践&#xff0c;加深对协议机制的理解。 一、L2CAP 在蓝牙协议栈中的核心定位 L2CAP&#xff08;Logical Link Control and Adaptation P…

微软服务器安全问题

微软云服务器安全深度解析&#xff1a;挑战、应对与未来展望——构建韧性“安全之盾”的持续博弈&#xff01; 在当今数字化时代&#xff0c;云计算已成为众多企业和组织运行业务的核心基础设施和“数字生命线”&#xff0c;而微软云&#xff08;Azure&#xff09;作为全球领先…

后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端

AI创作系列(11)&#xff1a;后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端前端 真实记录&#xff1a;我决定为海狸IM添加一个后台管理系统。从早上开始&#xff0c;到晚上结束&#xff0c;仅仅1天时间&#xff0c;我就完成了整个后台管理系统的微服务后端和…

开发自动驾驶系统所需工具

硬件开发平台 传感器系统 环境感知工具包括&#xff1a; 激光雷达&#xff1a;通过发射激光脉冲并接收反射光来测量距离&#xff0c;构建点云数据以描绘周围环境的三维结构。例如&#xff0c;Velodyne的VLP-16激光雷达每秒可发射约30万次激光脉冲&#xff0c;生成高密度的点…

Node.js特训专栏-实战进阶:12. 数据库事务处理与并发控制

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 专栏内容规划详情 数据库事务处理与并发控制:原理、实践与性能优化 一、事务基础:ACID特性与实现原理 1.1 ACID特性详解 事…

计算机网络(五)数据链路层 MAC和ARP协议

目录一、链路二、MAC地址三、ARP协议ARP工作流程​&#xff1a;​一、链路链路&#xff1a;一个结点到相邻结点的物理线路数据链路&#xff1a;在链路的基础上增加一些必要的软件&#xff08;协议的实现&#xff09;和硬件&#xff08;网络适配器&#xff09;。网络中的主机、路…

DVWA SQL Injection 漏洞分析与利用

前言 Level: Low 漏洞分析 复现步骤 防御措施 Level: Medium 漏洞分析 mysql_real_escape_string()核心作用 示例对比 复现步骤 防御措施 Level: High 漏洞分析 复现步骤 防御措施 Level: Impossible 安全措施分析 防护要点 测试验证 自动化工具使用&#x…

RabbitMQ:消息队列的轻量级王者

&#x1f680; 一句话定位 RabbitMQ是分布式系统的"消息快递员"&#xff0c;负责在系统间可靠传递信息&#xff0c;让服务解耦更高效。 &#x1f31f; 核心应用场景 1. 异步解耦 场景&#xff1a;用户注册后发短信/邮件 用法&#xff1a;注册服务发消息 → Rabbit…

Android系统默认赋予浏览器权限以及Android恶意覆盖导致谷歌浏览器授权失败的解决办法

Android系统默认赋予浏览器权限以及Android恶意覆盖导致谷歌浏览器授权失败的解决办法 一、Android系统默认赋予浏览器权限 只要是设计到默认赋权&#xff0c;就在framework下找这个类&#xff1a;base/services/core/java/com/android/server/pm/permission/DefaultPermissi…

矩阵的秩 线性代数

定义和求法 关于秩的几个重要式子 例题 给出秩&#xff0c;那我们就有三个知识点&#xff0c;一个是用定义&#xff0c;一个是用求法&#xff0c;一个是重要式子。 题目没什么好翻译的&#xff0c;基本就是赤裸裸的跟你坦白了直说了。 接下来就是解法了。用定义的话就是说这个…

【大模型】基于MCP的mysql 服务构建及使用(python语言)

前言 ​ 在之前使用dify来编排AI智能体&#xff0c;有这样的一个场景&#xff0c;希望智能体能自动读取数据库数据&#xff0c;获得统计数据&#xff08;问数&#xff09;&#xff0c;最终生成报告。 ​ 当时实现思路是&#xff0c;通过知识库告诉大模型相关表的字段定义&…

OA退位,如何打造安全便捷的跨网文件传输与即时通讯平台?

随着医院信息化建设深入推进&#xff0c;OA 系统在日常流程审批和文件流转中扮演着不可或缺的角色。然而&#xff0c;面对“内网⇄外网”强隔离的安全要求&#xff0c;OA 在跨域传输上仍然存在审批延迟、人工干预、病毒风险等痛点。 一、OA 在跨网传输中的 “ 最后一公里 ” 难…

LlamaIndex的多轮对话引擎使用说明

一、背景 LlamaIndex提供2种交互引擎&#xff1a;查询引擎和聊天引擎。&#xff08;详情请看这里&#xff09;查询引擎默认没有上下文信息&#xff0c;也就是说默认是单轮对话。 在RAG系统中&#xff0c;单轮对话/单次查询的场景较少&#xff0c;而多轮对话则是最常见的场景&…

【CSS-14.1-全局样式表common.css】构建高效可维护的 common.css:现代前端CSS架构指南

在前端开发中&#xff0c;CSS管理一直是项目可维护性的关键挑战。据统计&#xff0c;约35%的样式问题源于缺乏统一的CSS架构规范。common.css&#xff08;或称全局样式表&#xff09;作为项目的基础样式层&#xff0c;能够有效解决以下问题&#xff1a; 样式碎片化&#xff1a…

laravel基础:php artisan make:model Flight --all 详解

在 Laravel 中执行命令: php artisan make:model Flight --all这个命令会为你创建与模型 Flight 相关的一整套文件结构。Laravel 的 Artisan 命令行工具是一个强大的代码生成器,可以帮助你快速生成常见的应用组件。我们来详细解析一下这个命令的各个部分以及它产生的效果。 …

poi java 删除word的空白页

开发的时候遇到的问题&#xff0c;特此记录一下 使用Apache POI&#xff08;Java库&#xff09;删除Word文档中的空白页时&#xff0c;需针对不同场景处理。以下是具体实现方法和代码示例&#xff1a; 基础删除&#xff08;段落/分页符&#xff09;‌ 通过删除多余段落标记或…