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

LangChain 核心组件 [ 2 ]

提示词模板Prompt Template概念提示词模板Prompt Template是 LangChain 的核心抽象之一它被广泛应用于构建大语言模型LLM应用的各个环节。简单来说只要是需要动态、批量、或有结构地向大语言模型发送请求的地方几乎都会用到提示词模板。一个简单的例子假设我们想根据一个城市名询问 LLM 其历史按照之前的做法我们可以定义HumanMessage(请介绍上海的历史)、HumanMessage(请介绍西安的历史)消息等。可以发现每次询问都会编写重复的消息内容请介绍xxx的历史。在 LangChain 中针对这种情况可以定义一个模板固定文本模板请介绍{city}的历史。输入变量[city]定义好后可以使用该模板当我们需要查询北京时就将city变量赋值为北京模板引擎会生成请介绍北京的历史。当我们需要查询上海时就将city变量赋值为上海模板引擎会生成请介绍上海的历史。由此可见提示词模板就是一个可复用的提示词蓝图它允许我们动态地生成提示而不是每次都手动编写完整的提示词。它类似于编程中的字符串格式化功能。你创建一个带有 “占位符” 的模板然后在运行时用具体的值变量填充这些占位符从而生成一个最终发送给 LLM 的完整提示词。提示词模板解决了以下几个核心问题可复用性只需定义一个模板就可以用于无数个类似的查询。# 定义一次 template PromptTemplate.from_template(你好{name}欢迎学习 LangChain) # 无限用 template.invoke({name: 小明}) template.invoke({name: 小红}) template.invoke({name: 老板})关注点分离将提示词的结构和逻辑工程与具体的内容和数据分离开。提示工程师可以专注于优化模板而应用程序则负责提供变量值。# 提示工程师只负责写模板 template PromptTemplate.from_template( 你是一个助手请回答用户问题 用户问题{question} 请用中文回答。 ) # 业务开发只负责传变量 result template.invoke({ question: 什么是提示词模板 })一致性确保发送给 LLM 的提示词结构统一这有助于获得更稳定、可预测的输出结果。# 永远统一格式 template PromptTemplate.from_template( 系统你是一个数学老师 用户{question} 请一步步解答。 ) template.invoke({question: 11等于几}) template.invoke({question: 2×3等于几}) template.invoke({question: 什么是素数})可维护性如果需要修改提示词的风格或结构只需修改一个模板文件而不用在代码的无数个地方进行修改。# 原来 template PromptTemplate.from_template(你好{name}) # 想变温柔一点只改这里 template PromptTemplate.from_template(哈喽{name}呀欢迎你)用法字符串模板LangChain 提供了PromptTemplate类来轻松实现这一功能。PromptTemplate实现了标准的Runnable接口。示例如下# 1. 定义模板 from langchain_core.prompts import PromptTemplate prompt_template PromptTemplate.from_template(Translate the following into {language}) # 2. 实例化模板 print(prompt_template.invoke({language: Chinese}))textTranslate the following into Chinese说明class langchain_core.prompts.prompt.PromptTemplate类其参数如下template提示模板input_variables需要其值作为提示输入的变量的名称列表。内置方法from_template()从模板定义提示。方法返回了一个PromptTemplate实例。因此除了上面示例中PromptTemplate.from_template定义提示模板的方式外下面这种方法也可以直接初始化模板prompt_template PromptTemplate( input_variables[language], templateTranslate the following into {language}, )聊天消息模板ChatPromptTemplate模板专为 LangChain 聊天模型设计。可以方便地构建包含SystemPromptMessage、HumanMessage、AIMessage类型的消息模板。如下代码示例所示from langchain_core.prompts import ChatPromptTemplate # 1. 设置模板 prompt_template ChatPromptTemplate( [ (system, Translate the following into {language}.), (user, {text}) ] ) # 说明 # 在 0.2.24 版本后可以直接使用 ChatPromptTemplate() 来初始化模板 # 在 0.2.24 版本前需要使用 ChatPromptTemplate.from_messages() 来初始化模板 # 2. 实例化模板获取消息实例 messagesValue prompt_template.invoke( { language: Chinese, text: what is your name? } ) messages messagesValue.to_messages() print(messages)打印结果[ SystemMessage(contentTranslate the following into Chinese., additional_kwargs{}, response_metadata{}), HumanMessage(contentwhat is your name?, additional_kwargs{}, response_metadata{}) ]现在我们可以将该结果发送给任何一个 LLM 来获取答案。如下所示from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 定义大模型 model ChatOpenAI(modelgpt-4o-mini) # 1. 设置模板 prompt_template ChatPromptTemplate( [ (system, Translate the following into {language}.), (user, {text}) ] ) # 2. 实例化模板获取消息实例 messagesValue prompt_template.invoke( { language: Chinese, text: what is your name? } ) messages messagesValue.to_messages() print(messages) # 3. 输出解析 parser StrOutputParser() chain model | parser print(chain.invoke(messages))打印结果你的名字是什么由于ChatPromptTemplate同样也实现了标准的Runnable接口因此我们还可以通过链来完成调用。代码如下所示from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 定义大模型 model ChatOpenAI(modelgpt-4o-mini) # 1. 设置模板 prompt_template ChatPromptTemplate( [ (system, Translate the following into {language}.), (user, {text}) ] ) # 2. 定义输出解析器 parser StrOutputParser() # 3. 定义链 chain prompt_template | model | parser for token in chain.stream( { language: English, text: 你好我叫斯蒂芬很高兴认识你 } ): print(token, end|)打印结果|Hello, | my| name| is| Stephen|, | nice| to| meet| you|.|消息占位符在上面的ChatPromptTemplate中我们看到了如何格式化两条消息每条消息都是一个字符串。但如果我们希望将消息列表直接传入需要使用MessagesPlaceholder。代码如下from langchain_core.prompts import ChatPromptTemplate from langchain_core.prompts import HumanMessage, AIMessage, MessagesPlaceholder prompt_template ChatPromptTemplate( [ (system, 你是一个聊天助手), MessagesPlaceholder(msgs) # 消息占位符 ] ) messages_to_pass [ HumanMessage(content中国首都是哪里), AIMessage(content中国首都是北京。), HumanMessage(content那法国呢) ] formatted_prompt prompt_template.invoke({msgs: messages_to_pass}) print(formatted_prompt)打印结果messages[ SystemMessage(content你是一个聊天助手, additional_kwargs{}, response_metadata{}), HumanMessage(content中国首都是哪里, additional_kwargs{}, response_metadata{}), AIMessage(content中国首都是北京。, additional_kwargs{}, response_metadata{}), HumanMessage(content那法国呢, additional_kwargs{}, response_metadata{}) ]在不显式使用MessagesPlaceholder类也可以完成该能力from langchain_core.prompts import ChatPromptTemplate from langchain_core.prompts import HumanMessage, AIMessage prompt_template ChatPromptTemplate( [ (system, You are a helpful assistant), (placeholder, {msgs}) ] ) messages_to_pass [ HumanMessage(content中国首都是哪里), AIMessage(content中国首都是北京。), HumanMessage(content那法国呢) ] formatted_prompt prompt_template.invoke({msgs: messages_to_pass}) print(formatted_prompt)使用 LangChain Hub 的提示词模板目前收藏最高的提示词模板是hardkothari/prompt-maker。我们就以它为示例演示一下如何使用 LangChain Hub 上的提示。Prompt Maker模板是一个【提示生成器】它可以自动化优化提示的过程从而提高语言模型在各种应用中的质量和效果。要想使用该能力需要先申请并配置LangSmith环境变量LANGSMITH_API_KEY你的LangSmith API Key。接着需要从 hub 拉取相应的提示并使用代码如下from langchain_openai import ChatOpenAI from langsmith import Client # 1. 从 LangChain Hub 拉取提示词模板自动优化提示词 client Client() prompt client.pull_prompt(hardkothari/prompt-maker, include_modelTrue) # 2. 定义大模型 model ChatOpenAI(modelgpt-4o-mini) # 3. 构建调用链模板 → 模型 chain prompt | model # 4. 循环交互 while True: # 输入任务需求 task input(\n你的任务是什么? (输入 quit 退出聊天)\n) if task quit: break # 输入原始简陋提示词 lazy_prompt input(\n你当前的提示是什么? (输入 quit 退出聊天)\n) if lazy_prompt quit: break # 执行并输出优化后的提示词 print(\n 模型返回的【优化后提示词】) response chain.invoke({lazy_prompt: lazy_prompt, task: task}) response.pretty_print()你的任务是什么? (输入 quit 退出聊天) 写一个快排代码 你当前的提示是什么? (输入 quit 退出聊天) 开发专家需中文回复 模型返回的【优化后提示词】 Ai Message As a coding expert specialized in algorithms and data structures, please write a detailed implementation of the Quick Sort algorithm in Python. 【翻译】作为一名专攻算法与数据结构的开发专家请用 Python 实现详细的快速排序代码。 ### Instructions: 【翻译】实现要求 Your code should be well-structured, with clear comments explaining each step of the algorithm. Additionally, include an example of how to use the function to sort a list of integers and print the sorted result. 【翻译】代码结构要清晰每一步都要有详细注释同时提供使用示例对整数列表进行排序并打印结果。 ### Context: 【翻译】额外要求 The implementation should focus on efficiency and clarity, ideally spanning no more than 20 lines of code. Ensure that the prompt is in Chinese, and structure your response to be easily understandable for readers with a basic knowledge of programming. 【翻译】实现要兼顾效率与可读性代码尽量不超过20行必须用中文输出内容要让有编程基础的人能轻松看懂。 Example: 【翻译】示例格式 python def quick_sort(arr): # 快速排序函数实现 ... return sorted_arr # 使用示例 unsorted_list [34, 7, 23, 32, 5, 62] print(quick_sort(unsorted_list)) Please provide the complete code and any additional notes that could aid in understanding the Quick Sort algorithm. Thank you! 【翻译】请提供完整代码并补充帮助理解快速排序的说明谢谢通过使用这个模板可以大幅减少构建提示词所需的工作量从而节省时间和资源。Prompt Maker通过分析用户提供的结构和内容然后应用一系列的算法来优化提示以提高响应质量。清晰适用于代码、数据分析任务、质量检查等有很大的场景中均有应用比如客户服务机器人、对话代理或数据分析任务。

相关文章:

LangChain 核心组件 [ 2 ]

提示词模板(Prompt Template) 概念 提示词模板(Prompt Template)是 LangChain 的核心抽象之一,它被广泛应用于构建大语言模型(LLM)应用的各个环节。 简单来说,只要是需要动态、批…...

使用 Taotoken 为 OpenClaw Agent 工作流配置统一模型接入点

使用 Taotoken 为 OpenClaw Agent 工作流配置统一模型接入点 1. 准备工作 在开始配置之前,请确保您已经完成以下准备工作。首先,登录 Taotoken 控制台并创建一个 API Key,该 Key 将用于 OpenClaw 与 Taotoken 平台的认证。其次,…...

不止于采集:将STM32光敏传感器数据上传到串口助手和OLED屏(双显示实战)

STM32双显系统实战:光敏数据同步输出至串口与OLED屏 引言 当我们需要实时监控环境光照变化时,单纯依赖串口打印数据往往难以满足实际需求。想象一下,在智能农业大棚中,工程师需要同时查看设备本地显示和远程数据记录——这正是双显…...

长安链开源训练营结营仪式报名!颁发证书 | 技术分享 | 现场抽奖

执梦前行,终抵繁星经过为期两个月的集中授课与二十天深耕实践的代码实训,长安链开源训练营圆满落下帷幕,所有课程作业及大作业提交通道已经关闭。训练营期间,学员们通过系统学习与深入实践,充分展现了对长安链技术的深…...

RPA工具选型技术指南:架构差异与实测数据

声明:本文基于2026年4月实测,无商业合作。测试环境:Windows 11 23H2,i5-12400,16GB内存,两款工具均为最新社区版/专业版。目录一、为什么写这篇技术对比二、架构对比:云端依赖 vs 纯本地执行三、…...

高项论文子问题急救包:近5年真题规律+4类答题套路

信息系统项目管理师距离5月份考试还有24天,论文是很多同学的噩梦。特别是看到题目后面那几个子问题,不知道从哪下手。整理近5年论文子问题的规律扒清楚,再送你4类答题套路。上考场之前把这些搞明白,心里不慌。一、近5年论文真题汇…...

避开RTSP的坑:实测对比海康威视iVMS-4200、VLC和FFplay播放同一路流的延迟差异

避开RTSP的坑:实测对比海康威视iVMS-4200、VLC和FFplay播放同一路流的延迟差异 在视频监控和智能分析系统的开发中,RTSP流媒体的延迟问题一直是困扰开发者的痛点。不同的播放工具在处理同一路RTSP流时,表现出的延迟差异可能高达数百毫秒&…...

安科士ANDXE 100G QSFP28 ZR4光模块:工业级可靠性的技术突破与核心优势

在工业数字化转型的浪潮中,高速光通信技术作为数据传输的核心载体,直接决定了工业系统的稳定性、高效性与扩展性。安科士ANDXE深耕工业光通信领域,推出的100G QSFP28 ZR4工业级光模块,依托硬核技术研发,打破商用光模块…...

从‘拍电影’到‘做游戏’:手把手教你用UE5关卡蓝图实现摄像机平滑切换与镜头混合

从‘拍电影’到‘做游戏’:手把手教你用UE5关卡蓝图实现摄像机平滑切换与镜头混合 在影视制作中,镜头语言是叙事的重要工具。当导演喊出"Cut!"时,剪辑师会将不同机位的镜头精心拼接,创造出流畅的视觉体验。而在实时渲染…...

基于STM32L4XX 、HAL库的L6234PD013TR三相无刷直流电机(BLDC)驱动应用C语言程序设计

一、简介: L6234是一款用于驱动无刷直流电机的三重半桥驱动器。 该器件采用BCDmultipower技术实现,该技术将隔离式 DMOS 功率晶体管与CMOS及双极电路集成于同一芯片。通过混合技术的应用,成功优化了逻辑电路与功率级设计,从而实现了最佳性能。 由于 DMOS 结构不受二次击穿效…...

别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA工程添加正确的SDC时序约束

破解Quartus默认1GHz时钟陷阱:FPGA时序约束实战指南 当你在Quartus中完成第一个点灯工程的编译后,TimeQuest突然报出红色警告,显示你的设计无法满足1GHz时钟要求——这个数字可能让你瞬间怀疑人生。别担心,这并非你的设计有问题&a…...

如何利用 taotoken 实现开发测试与生产环境模型 api 的隔离

如何利用 Taotoken 实现开发测试与生产环境模型 API 的隔离 1. 环境隔离的核心需求 在企业开发流程中,开发测试环境与生产环境的隔离是保障系统稳定性的基本要求。对于大模型 API 的调用而言,这种隔离尤为重要。开发测试阶段可能涉及频繁的调试请求或非…...

MyBatis动态SQL避坑指南:处理‘>=‘、‘<=‘等符号,用转义还是CDATA?看完这篇不再纠结

MyBatis动态SQL中特殊符号处理的深度实践指南 1. 问题背景与核心痛点 在电商后台系统的商品筛选模块开发中,我们经常需要构建包含价格区间、库存数量等多重条件的动态SQL查询。上周团队新来的工程师小王就遇到了一个典型问题——他在MyBatis的XML映射文件中编写的范…...

Windows 11 系统清理终极指南:如何用开源工具轻松移除臃肿软件

Windows 11 系统清理终极指南:如何用开源工具轻松移除臃肿软件 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutte…...

FRED应用:混色导光管的仿真

发光二极管,或者LED,早已超越了白炽灯光源,应用也越来越广泛。LED具有尺寸小、发光效率高、使用寿命长[1]等优点。LED也有光学工程师必须处理的不良特性,比如混色和准直的需要。在这个例子中,我们看一个混合准直透镜的…...

如何在 C++ 项目中接入 Taotoken 的多模型 API 服务

如何在 C 项目中接入 Taotoken 的多模型 API 服务 1. 准备工作 在开始对接 Taotoken 的 API 之前,需要确保开发环境满足基本要求。首先,确认 C 项目已集成 HTTP 请求库,常见选择包括 libcurl、cpp-httplib 或 Boost.Beast。本文示例将使用 …...

用于像差校正的混合透镜设计

混合透镜结合了传统折射元件和衍射结构的优点,因此在不同的光学应用中成为一种有前途的方法。特别地,折射和衍射表面色散的相反符号使得能够校正色差。为了准确地建模和设计这种混合元件,有必要对系统的衍射效应进行深入分析。VirtualLab Fus…...

绿色转型正当时,ISO14001环境认证为遵义红花岗企业注入长效动力

绿色转型正当时,ISO14001环境认证为遵义红花岗企业注入长效动力在全球碳中和进程加速推进、国内环保监管持续升级的背景下,遵义红花岗企业的绿色发展能力已成为衡量综合实力的核心标尺。ISO14001环境管理体系认证,作为国际通行的环境管理标准…...

互助保险自动理赔程序,颠覆保险公司拒赔套路,条件满足自动赔付,无人工审核刁难。

⚠️ 说明:本示例为教学原型级别,用于展示“条件触发 → 自动执行”的逻辑,不等同于真实金融级系统,也不构成投资建议或产品推广。一、实际应用场景描述在一个去中心化互助保险社区中:- 成员通过缴纳会费形成资金池- 事…...

PackmindHub:构建企业级软件依赖治理与知识库平台

1. 项目概述:一个为开发者而生的“软件包知识库”如果你是一名开发者,无论是前端、后端还是移动端,日常工作中一定离不开各种软件包(Package)。从npm的react到PyPI的requests,再到Docker Hub上的基础镜像&a…...

AEUX:打破设计到动画的次元壁,让动效创作回归创意本身

AEUX:打破设计到动画的次元壁,让动效创作回归创意本身 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否经历过这样的创作瓶颈?在Figma或Sketch中…...

基于Vite+React+TypeScript的现代Web应用开发实践与架构演进

1. 项目概述与背景最近在整理自己的开源项目时,我决定把几年前做的一个老项目“如何月HUB”正式归档,并写篇文章记录一下它的始末。这个项目本质上是一个基于React和TypeScript的东方Project二次创作同人网站,主要展示“如何月”这个角色的相…...

电源PCB虚焊反复?抓准核心诱因,批量良率稳提至98%

做工业电源、车载电源的工程师和采购,没人没被虚焊折磨过:批量生产时,电源模块通电后时通时断、负载发热严重,拆解一看,功率管、电解电容引脚焊点灰暗、一碰就掉。某新能源电源厂商反馈:首批 5000 片 12V/5…...

Cloudflare Workers + ChatGPT插件开发实战:从零构建AI应用后端

1. 项目概述:当Cloudflare遇上ChatGPT插件 最近在折腾AI应用部署的朋友,估计都绕不开两个名字:Cloudflare和ChatGPT。前者是边缘计算的巨头,后者是AI对话的标杆。当这两个名字出现在同一个GitHub仓库里—— cloudflare/chatgpt-…...

告别Selenium弹窗烦恼:用Playwright Python实现无头浏览器文件自动下载(附pytest实战代码)

告别Selenium弹窗烦恼:用Playwright Python实现无头浏览器文件自动下载(附pytest实战代码) 在自动化测试和爬虫开发领域,文件下载一直是个令人头疼的问题。传统工具如Selenium虽然功能强大,但遇到浏览器弹窗时往往束手…...

SIEMENS 6SE7012-0TP50-Z变频器

SIEMENS 6SE7012-0TP50-Z 是西门子 SIMOVERT MASTERDRIVES MC 系列中的一款紧凑型变频器,属于运动控制领域的工程型传动产品。以下是该模块的15条主要产品特点:中间15条特点:属于 SIMOVERT MASTERDRIVES MC 运动控制系列,为 Compa…...

从VSCode转战华为云CodeArts IDE:我的Python开发环境迁移与配置实战

从VSCode转战华为云CodeArts IDE:我的Python开发环境迁移与配置实战 作为一名长期使用VSCode进行Python开发的工程师,最近我决定尝试华为云推出的CodeArts IDE。这个决定源于对国产开发工具的好奇,也希望能探索更多高效的开发可能性。迁移过程…...

题解:AcWing 6031 计算

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

告别Python命令行!用SheetJS社区版在前端搞定Excel转JSON(附完整代码)

告别Python命令行!用SheetJS社区版在前端搞定Excel转JSON(附完整代码) 在数据处理领域,Excel文件与JSON格式的相互转换一直是高频需求。传统解决方案往往依赖Python等后端语言,通过openpyxl等库处理后再用pyinstaller打…...

计算机科学教材编写框架与数据存储技术详解

1. 计算机科学教材编写的基本框架计算机科学教材的编写是一项系统工程,需要兼顾学术严谨性和教学实用性。一本优秀的计算机科学教材应当像一座精心设计的建筑,既有坚实的理论基础作为地基,又有清晰的知识结构作为框架,还要有丰富的…...