提示词Prompts(1)

摘要: 本文介绍了langchain.prompts中基础的提示词模板的用法,包括基础的文本模板、对话模板、小样本模板、以及主要两种样本选择器的用法。

文章目录

    • 1. prompts介绍?
    • 2. 提示词模板体系 Prompt Templates
      • 2.1 基础文本模板 PromptTemplate
      • 2.2 对话模板 ChatPromptTemplate
      • 2.3 小样本提示模板Few-shot
      • 2.4 示例选择器Example Selector
        • 2.4.1 按长度选择 LengthBasedExampleSelector
        • 2.4.2 按相似度选择 LengthBasedExampleSelector

1. prompts介绍?

  • 提示词:就是输入给LLM的内容。包括我们和LLM对话的内容,

  • LangChain的Prompts模块是构建对话系统的核心组件,它通过结构化模板实现精准的提示工程管理。该模块将自然语言指令转化为大模型可解析的标准化输入,显著提升AI交互质量。

2. 提示词模板体系 Prompt Templates

LangChain 提供了 PromptTemplates,可以让用户根据输入动态地修改提示;提示词模板是一种预定义的文本结构,其中包含变量和固定文本部分,用于引导语言模型生成特定类型的输出。这些模板可以帮助模型更准确地理解上下文,并生成符合预期的响应。
   提示词模板(Prompt Template)在自然语言处理和生成任务中,是设计和优化模型输入的一种方法。提示词模板可以帮助大型语言模型(LLM)更好地理解和生成目标内容。以下是提示词模板的介绍及其
在不同场景中的应用。

通常提示词模板包含两部分:

  • 静态部分:用于提供上下文,背景或引导语等用于控制LLM的大的方向。
  • 动态部分:根据具体输入替换,在模板中用占位符表示变量。

2.1 基础文本模板 PromptTemplate

from langchain_core.prompts import PromptTemplate# 定义含变量的模板
template = "请为{product}写广告语,突出{feature}特点"
prompt = PromptTemplate(input_variables=["product", "feature"],template=template
)# 填充变量生成最终提示
filled_prompt = prompt.format(product="智能手表", feature="健康监测")# 输出:请为智能手表写广告语,突出健康监测特点
print(filled_prompt)

输出:

请为智能手表写广告语,突出健康监测特点

使用partial_variables提前固定部分参数:

# 预设置部分变量
partial_prompt = prompt.partial(product="电动汽车")
print(partial_prompt.format(feature="续航能力"))
# 输出:请为电动汽车写广告语,突出续航能力特点

2.2 对话模板 ChatPromptTemplate

用于对结构化的聊天消息管理,支持区分角色区分。

from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([("system", "你是一位{role}"),("human", "请分析:{question}") 
])
filled_chat = chat_template.format_messages(role="金融顾问", question="当前股市走势"
)print(filled_chat)
[SystemMessage(content='你是一位金融顾问', additional_kwargs={}, response_metadata={}), HumanMessage(content='请分析:当前股市走势', additional_kwargs={}, response_metadata={})]

我们可以看到它返回一个BaseMessage类型,可以直接传给聊天模型

response = model.invoke(prompt)

2.3 小样本提示模板Few-shot

Few-shot examples 是一组可帮助语言模型生成更好响应的示例。要生成具有 few-shot examples 的 prompt,可以使用 FewShotPromptTemplate。该类接受一个 PromptTemplate 和一组 few-shot examples。然后,它使用这些 few-shot examples 格式化成 prompt 模板。

示例:输入一个情绪的词,要返回对应情绪的表现;我们根据提示词,告诉模型,什么是“情绪的表现”。

'''
创建大模型LLM
'''
from langchain.chat_models import ChatOpenAI
# 定义模型调用API URL
base_url = "https://api.deepseek.com/v1"
# 定义模型调用API KEY(实际应用会放到环境变量中,避免明文暴露)
api_key = "你自己的api key"
# 定义模型名称(对应DeepSeek-V3)
model='deepseek-chat' 
llm= ChatOpenAI(base_url=base_url,api_key=api_key,model=model)'''
创建小样本提示词模板
'''
from langchain import FewShotPromptTemplate# 示例样本
examples = [{"input": "高兴", "output": "笑容满面"}, {"input": "悲伤", "output": "泪流满面"}]# 创建提示词模板
example_template = "输入:{input}\n输出:{output}"example_prompt = PromptTemplate.from_template(example_template)# 小样本提示词模板
few_shot_prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,prefix="请给出每个输入的情感进行分析,给出对应的表现。",suffix="输入:{text}\n输出:",input_variables=["text"]
)# 格式化提示词
prompt_text = few_shot_prompt.format(text="愤怒")'''
调用模型
'''
response = llm.invoke(prompt_text)
print("LLM 输出:")
print(response.content)

输出:

LLM 输出:
怒目圆睁

2.4 示例选择器Example Selector

在大量示例情况下,因为大量的示例会浪费token,还可能超出token限制。Example Selector可以从大量的示例中,自动选择最合适的部分示例纳入到提示词中。

主要两种方式选择:

  • 按长度: 较长的输入,选择较少示例;反之,较短输入,选择更多示例。
  • 按相似度: 查找与输入具有最大余弦相似度的嵌入示例。
2.4.1 按长度选择 LengthBasedExampleSelector

他可以根据输入文本长度自动增减示例数量,短输入时提供更多上下文示例,长输入时减少示例以避免超出模型上下文窗口限制。通过预设的max_length参数确保提示总长度不超过模型处理上限。


from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import LengthBasedExampleSelector# 定义示例集
examples = [{"input": "happy", "output": "sad"},{"input": "tall", "output": "short"},{"input": "fast", "output": "slow"},{"input": "wind", "output": "calm"}
]# 创建示例模板
example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}"
)# 初始化选择器
selector = LengthBasedExampleSelector(examples=examples,example_prompt=example_prompt,max_length=10  # 假设模型上下文窗口为30字符
)# 构建动态提示
dynamic_prompt = FewShotPromptTemplate(example_selector=selector,example_prompt=example_prompt,prefix="生成反义词",suffix="Input: {adjective}\nOutput:",input_variables=["adjective"]
)# 测试不同长度输入
print(dynamic_prompt.format(adjective="big"))      # 显示全部3个示例
print(dynamic_prompt.format(adjective="extremely and huge and massive"))  # 可能只显示1个示例
2.4.2 按相似度选择 LengthBasedExampleSelector

以下是一个根据为输入,提供一个反义词的例子,当输入一个词时选择器会根据语义选择相近的例子;本例中,输入“red”,选择器选择了和颜色相关的示例作为输出。


from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS# 初始化嵌入模型embedings
model = "nomic-embed-text:latest"  # 模型名称
base_local_url = "http://localhost:11434" # 本地部署模型
embedings = OllamaEmbeddings(   # ①base_url=base_local_url,model=model
)# 定义示例集
examples = [{"input": "happy", "output": "sad"},{"input": "tall", "output": "short"},{"input": "fast", "output": "slow"},{"input": "wind", "output": "calm"},{"input": "black", "output": "white"},{"input": "Light", "output": "Dark"},{"input": "Bright", "output": "Dull"},{"input": "Rainy", "output": "Dry"},{"input": "Warm", "output": "Cool"},{"input": "Summer", "output": "Winter"}
]# 创建示例模板
example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}"
)# 初始化选择器
selector = SemanticSimilarityExampleSelector.from_examples(examples=examples,embeddings=embedings, vectorstore_cls=FAISS, # 使用Faiss作为矢量库k=3,# 选择三个相似的示例input_keys=["input"]
)# 构建动态提示
dynamic_prompt = FewShotPromptTemplate(example_selector=selector,example_prompt=example_prompt,prefix="生成反义词",suffix="Input: {input}\nOutput:",input_variables=["input"]
)# 测试不同长度输入
print(dynamic_prompt.format(input="red"))     

输出:

生成反义词Input: Bright
Output: DullInput: black
Output: whiteInput: Light
Output: DarkInput: red
Output:

注:① 本例中使用本地部署一个Ollama框架Embedding模型,Ollama后续文章介绍。

**Embedding Model:**嵌入模型是一种将离散的高维数据(如单词、句子、图片等)映射到连续的低维向量空间的技术;嵌入模型的主要目的是捕捉输入数据中的语义或特征信息,使得相似的输入在嵌入空间中距离更近。嵌入模型通常计算高效,适合用于大规模数据的相似性搜索和分类任务。
嵌入模型适用场景:

  1. 文本相似度计算:比较两个文本的嵌入向量,计算相似度。
  2. 信息检索:通过嵌入向量进行高效的相似性搜索。
  3. 分类和聚类:使用嵌入向量进行文本或图像的分类和聚类。

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

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

相关文章

如何在 Elementary OS 上安装最新版本的 VirtualBox

Elementary OS 是一个基于 Ubuntu Linux 的发行版,它易于使用,对初学者友好,并且在用户中非常受欢迎。如果你是 Elementary OS 的用户,并且想在上面虚拟运行和探索其他操作系统,那么 Oracle VirtualBox 是一个非常不错…

uni-app项目loading显示方案

前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE可视化的运行和打包也让开发体验也非常棒,公司项目就是主推uni-app,为了用户体验对于耗时操作,…

【Android笔记】记一次 CMake 构建 Filament Android 库的完整排错过程(安卓交叉编译、CMake、Ninja)

写在前面的话,为了保持Sceneform-EQR始终是采用最新的filament,每隔一段时间我都会编译filament,并根据新增内容完善Sceneform-EQR。 现由于更换电脑,环境需重新配置。简单记录下编译出错和解决方式。 Sceneform-EQR 是EQ对谷歌“…

ARM 单片机定义变量绝对地址方法

在ARM单片机中,定义变量到绝对地址通常有以下几种方法(以Keil MDK为例,其他工具链原理类似): 方法1:使用指针强制转换(通用) 直接通过指针访问指定地址: define REGIS…

为何AI推理正推动云计算从集中式向分布式转型

作者简介:Vineeth Varughese是Akamai亚太及日本地区的云产品市场负责人,在云计算、人工智能(AI)及市场进入策略(GTM)领域拥有丰富经验。 传统云平台在利用海量数据训练AI模型方面表现出色,但随着…

ar 导航导览技术如何实现的?室内外融合定位与ar渲染技术深度解析

本文面向:移动开发工程师、AR技术研究者、室内外导航系统产品经理,旨在提供核心问题的参考方案:如何实现室内外无缝切换的精准定位(GPS蓝牙Beacon)虚拟导航路径与实景画面的实时叠加原理。 如需获取ar导航导航技术解决…

电路问题处理:SGMII链路中的AC耦合电容摆放位置

SGMII链路中的AC耦合电容摆放位置 目前是有个板子,其上分别有fpga,fpga的gtx口出sgmii千兆以太网链路,通过高速连接器互联, 通常高速差分链路的AC耦合电容放在靠近接收端位置,如果在同一个板内的话没啥疑惑的直接靠近…

激光雷达 + 视觉相机:高精度位姿测量方案详解

激光雷达 视觉相机:高精度位姿测量方案详解 引言 在航天器交会对接、自动驾驶、机器人导航等领域,位姿(位置姿态)测量的精度和鲁棒性至关重要。单一的传感器(如激光雷达或视觉相机)往往难以满足复杂场景的…

【整数递增加法拆分】2022-4-11

缘由整数拆分问题,但是怎么输出这个数位最多。-编程语言-CSDN问答 void 整数递增加法拆分() {//缘由https://ask.csdn.net/questions/7687667?spm1005.2025.3001.5141int n 0, c 1, f c, t n;string sc "";cin >> n; t n;while (t){if (t &…

Hashcat使用教程:快速上手密码恢复工具

在信息安全领域,密码破解是不可或缺的一环。而 Hashcat,作为当前最强大的密码恢复工具之一,因其高效的性能与灵活的配置广受好评。本文将介绍 Hashcat 的基础用法,帮助新手快速上手,同时遵守合法使用的基本原则。 一、…

萌系盲盒陷维权风暴,Dreams委托David律所已立案,速避雷

美国律所David代理Dreams USA, Inc.发起全新维权案件,维权矛头指向旗下三大萌系盲盒品牌:Sonny Angel、SMISKI和HIPPERS,跨境卖家需提高警惕。 案件基本情况: 起诉时间:2025-6-9 案件号:2025-cv-06422 …

aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(三)

使用 afl-cc 这是 afl-fuzz 的辅助应用程序。它可以作为 gcc 和 clang 的直接替代品,让您使用所需的运行时工具重新编译第三方代码。 1. -help 显示可用选项 afl-cc -help 其他选项同上,这里不再展开叙述。 afl-clang 1. --help 显示可用选项 a…

安卓开发常用框架与库详解

安卓开发常用框架与库详解 安卓应用开发过程中,选择合适的开发框架和第三方库,可以极大提升开发效率、应用性能和代码的可维护性。本文对主流的安卓开发框架和库进行系统梳理,按功能模块分类,涵盖UI开发、网络请求、图片加载、数…

【项目实训#09】智能代码文件助手模式前后端设计与实现

【项目实训#09】智能代码文件助手模式前后端设计与实现 文章目录 【项目实训#09】智能代码文件助手模式前后端设计与实现一、背景简介二、技术方案与架构设计2.1 整体架构2.2 前端技术选型2.3 后端技术选型 三、前端代码替换服务实现3.1 代码替换服务设计3.2 处理生成的代码3.3…

JAVA-springboot 异常处理

SpringBoot从入门到精通-第10章 异常处理 一、异常简介 传统的Java程序都是由try-catch语句捕捉异常,而Spring Boot项目采用了全局异常类的概念------所有方法均将异常抛出,并且专门安排一个类统一拦截并处理这些异常。这样做的好处是可以把异常处理的…

VIC-3D应用指南系列之:DIC数字图像相关技术与热成像(VIC-3D IR System助力热载荷测试)

本篇文章详细讲述了利用VIC-3D 10将数字图像相关DIC数据与红外相机热成像的温度数据相结合的操作流程。核心步骤包括: 相机选型与系统搭建 测试环境配置 VIC-Snap参数设置 双系统标定(DIC与红外) 外部参数计算 测试图像采集 红外…

adoc(asciidoc)转为markdown的方法,把.adoc文件转换为markdown格式

要将.adoc文件转换为markdown格式,可以按照以下步骤操作: 安装必要工具: sudo apt install pandoc asciidoc转换流程: 先将asciidoc转换为docbook格式: asciidoc -b docbook foo.adoc然后将docbook转换为markdown&…

2022mpsPTE岗位笔试题

2022年9月完成了PTE岗位的笔试,并通过了。浅浅的还有一点印象,之前有朋友也想来,就放在这里,供需要的朋友看。 前两个题是关于C语言的。 语言不限,C也可。 一个是输出2到100偶数之和,主要就是调用for循环。…

使用Cursor + Devbox + Uniapp 一站式AI编程开发移动端(App、H5、小程序)

文章目录 前言📖一、工具介绍🛠️1. Cursor:AI驱动的智能代码编辑器2. Devbox:可复现的开发环境管理3. Uniapp:跨平台应用开发框架 二、环境配置与集成🔮1. 安装与配置Devbox2. 配置Cursor连接Devbox环境3.…

[智能客服project] AI提示词配置 | 主协调器 | 闲鱼协议工具

第五章:AI提示词配置 欢迎回来! 在第四章:意图路由器中,我们了解了机器人如何通过IntentRouter确定由哪个专家代理(如PriceAgent或TechAgent)处理用户消息。 但代理被选定后,如何知道该说什么…