个人主页秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 系列专栏https://blog.csdn.net/qinjh_/category_13137010.html​​​目录提示词模板Prompt Template概念用法字符串模板聊天消息模板消息占位符使用 LangChain Hub 的提示词模板前言 hello! 各位铁子们大家好哇。今日更新了LangChain相关内容 欢迎大家关注点赞收藏⭐️留言提示词模板Prompt Template概念提示词模板Prompt Template是 LangChain 的核心抽象之一它被广泛应用于构建大语言模型 LLM应用的各个环节。简单来说只要是需要动态、批量、或有结构地向大语言模型【发送请求】的地方几乎都会用到提 示词模板。一个简单的例子假设我们想根据一个城市名询问 LLM 其历史按照之前的做法我们可以定义 HumanMessage(请介绍上海的历史) 、 HumanMessage(请介绍西安的历史) 消息等等。可 以发现每次询问都会描写重复的消息内容 请介绍xxx的历史 。在 LangChain 中针对这种情况可以定义一个模板固定文本模板 “请介绍{city}的历史。”输入变量 [“city”]定义好后可以使用该模板当我们需要查询北京时就将 city 变量赋值为 “北京”。模板引擎会生成 “请介绍北京的历 史。”当我们需要查询上海时就将 city 变量赋值为 “上海”。模板引擎会生成 “请介绍上海的历 史。由此可得提示词模板就是一个可复用的提示词蓝图它允许我们动态地生成提示词而不是每次都 手动编写完整的提示词。它类似于编程中的字符串格式化功能。你创建一个带有“占位符”的模板然后在运行时用具体的值变量填充这些占位符从而生成一个最终发送给 LLM 的完整提示词。提示词模板解决了以下几个核心问题可复用性 只需定义一个模板就可以用于无数个类似的查询。关注点分离 将提示词的结构和逻辑工程与具体的内容和数据分离开。提示工程师可以专注于 优化模板而应用程序则负责提供变量值。一致性 确保发送给LLM的提示词结构统一这有助于获得更稳定、可预测的输出结果。可维护性 如果需要修改提示词的风格或结构只需修改一个模板文件而不用在代码的无数个地 方进行修改。用法字符串模板LangChain 提供了 PromptTemplate 类来轻松实现这一功能。 PromptTemplate 实现了标准的 Runnable 接口。示例如下from langchain_core.prompts import PromptTemplate # 1. 定义模板 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 聊天模型设计。可以方便地构建包含 SystemMessage 、 HumanMessage 、 AIMessage 的消息模板。如下代码所示打印结果[ SystemMessage(contentTranslate the following into Chinese., additional_kwargs{}, response_metadata{}), HumanMessage(contentwhat is your name?, additional_kwargs{}, response_metadata{}) ]现在我们可以将该结果发送给任何一个 LLM 来获取答案。如下所示打印结果你的名字是什么由于 ChatPromptTemplate 同样也实现了标准的 Runnable 接口因此我们还可以通过链来完成 调用。如下所示打印结果|Hello|,| my| name| is| Stephen|,| nice| to| meet| you|.||消息占位符在上面的 ChatPromptTemplate 中我们看到了如何格式化两条消息每条消息都是一个字符串。但 如果我们希望将消息插入特定位置怎么办使用 MessagesPlaceholder 。 MessagesPlaceholder 负责在特定位置添加消息列表。代码如下from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.messages import HumanMessage, AIMessage 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.messages 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 的提示词模板LangChain Hub 是一个用于上传、浏览、拉取和管理提示词(prompts)的地方。随着 LLM 的发展提示变得越来越重要。LangChain 正在打造一个与像 GitHub 这样的传统平台 GitHub长期以来一直是共享和协作代码的首选平台。于是推出了 LangChain Hub 平台。LangChain Hub 创建一个分享和发现 Prompt 的平台使得开发者可以更容易地发现新用例和精炼提 示。 这一举措使提示工程师更容易合作重复使用现有的提示并对其进行微调以实现特定的结果 从而加速对话代理和其他基于语言的应用程序的开发和部署。早期的时候 LangChain Hub 有 Prompt、Chain、Agent现在只有Prompt。LangChain Hub 官网地址https://smith.langchain.com/hub/。通过登录到 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 client Client() # prompt 就是一个提示词模板 Runnable 实例 prompt client.pull_prompt(hardkothari/prompt-maker, include_modelTrue) # 模型 model ChatOpenAI(modelgpt-4o-mini) # 链 chain prompt | model while True: task input(\n你的任务是什么 输入 quit 退出聊天\n) if task quit: break lazy_prompt input(\n你当前任务对应的提示词是什么 输入 quit 退出聊天\n) if lazy_prompt quit: break chain.invoke({task: task, lazy_prompt: lazy_prompt}).pretty_print()运行代码通过使用这个模板可以大 减少手动调整提示所需的工作量从而节省时间和资源。Prompt Maker 通过分析初始提示的结构和内容然后应用一组预定规则或算法来优化提示以提高响应质量、清晰 度和相关性。这在提示的质量对模型的输出有很大影响的场景中特别有用比如客户服务机器人、对 话代理或数据分析任务。