AI Agent从无到有35: LangChain 提示词模板体系总结与实践 纲要提示词模板核心知识回顾PromptTemplate与ChatPromptTemplate面向文本生成与对话交互的两种基础模板FewShotPromptTemplate与FewShotChatMessagePromptTemplate基于示例驱动的提示结构静态示例与动态示例的差异及适用场景示例选择器三大类型LengthBasedExampleSelector、SemanticSimilarityExampleSelector、MaxMarginalRelevanceExampleSelectorPartial部分格式化支持静态值预设与动态函数生成LangSmith Hub提示词的版本化管理与团队协作平台动手实践任务注册 LangSmith 并获取 API Key从 Hub 拉取社区模板修改提示词并推送至个人 Hub 仓库版本管理与协作测试完整可运行示例脚本涵盖拉取、调用、推送与版本迭代的端到端流程引言在前序系列文章中我们系统性地探讨了 LangChain 提示词模板的各个核心维度从基础的字符串模板与对话模板到 Few Shot 示例的动态选择机制再到部分格式化与基于 LangSmith Hub 的工程化管理。本文旨在对该知识体系进行系统性总结同时提供一份可操作的实践指南帮助开发者将理论认知转化为可复用的工程能力。提示词模板知识体系整个提示词模板体系围绕“如何高效构建、管理和演进提示词”这一核心目标展开可按照以下层次进行梳理。基础模板PromptTemplate最基础的字符串模板通过format()方法替换占位符变量适用于传统文本生成型 LLM。ChatPromptTemplate结构化消息列表模板通过format_messages()生成SystemMessage、HumanMessage、AIMessage等角色消息序列专为 Chat Model 设计。Few Shot 示例机制FewShotPromptTemplate/FewShotChatMessagePromptTemplate将一组输入-输出示例注入提示词上下文引导模型进行模仿学习In-Context Learning。静态示例示例集合在模板定义时固定无法根据输入动态调整。动态示例选择器根据当前输入内容从示例池中自动筛选最相关或最合适的示例。示例选择器对比选择器类型选择依据优势局限性LengthBasedExampleSelector控制最终提示词总长度从头部开始依次选取计算高效无需额外依赖选取策略机械缺乏语义匹配能力SemanticSimilarityExampleSelector基于余弦相似度选取与输入语义最接近的示例语义匹配精准需要向量数据库与嵌入模型支持MaxMarginalRelevanceExampleSelector采用 MMR 算法兼顾相关性Relevance与多样性Diversity避免示例同质化提升泛化能力计算开销相对较高部分格式化PromptTemplate.partial()允许分步填充模板变量支持静态值预设与动态函数绑定。动态函数在format()调用时实时执行特别适用于注入当前时间戳、用户 ID 等运行时上下文信息。LangSmith Hub云端提示词仓库提供hub.pull()接口拉取公共模板Client.push_prompt()与Client.pull_prompt()实现团队内部的提示词共享与分发。版本管理每次推送自动记录版本历史支持通过标签Tag或版本号引用特定历史版本。可观测性与评估Hub 深度集成于 LangSmith 平台支持提示词的在线监控、调试与性能评估。动手实践从 Hub 到本地再回到 Hub以下实践练习将引导你完整体验提示词从拉取、修改、推送到版本迭代的完整生命周期。环境准备第一步注册 LangSmith 并获取 API Key访问 LangSmith 官网 注册账号进入 Settings 页面创建 API Key并将其配置为环境变量exportLANGCHAIN_API_KEYyour_langsmith_api_keyexportOPENAI_API_KEYyour_openai_api_key# 如需调用模型第二步安装依赖pipinstalllangchain langchain-core langsmith langchain-openai核心操作流程第三步拉取社区提示词模板fromlangchainimporthub prompthub.pull(langchain-ai/text-to-sql)print(prompt.format(question查询所有订单数量大于5的客户))第四步创建并推送自定义提示词fromlangsmithimportClientfromlangchain_core.promptsimportChatPromptTemplate clientClient()my_promptChatPromptTemplate.from_messages([(system,你是一个精通唐诗宋词的助手请使用中文回答。),(human,{query})])client.push_prompt(my-poetry-assistant,promptmy_prompt)print(提示词已成功推送至 LangSmith Hub)第五步拉取自定义提示词并调用模型fromlangsmithimportClientfromlangchain_openaiimportChatOpenAI clientClient()promptclient.pull_prompt(my-poetry-assistant)modelChatOpenAI(modelgpt-3.5-turbo)chainprompt|model responsechain.invoke({query:写一首关于秋天的七言绝句})print(response.content)第六步版本迭代与回滚修改提示词内容添加版本标签后再次推送并演示如何拉取特定历史版本。v2_promptChatPromptTemplate.from_messages([(system,你是一位风趣幽默的唐诗专家每次回答均以“古人云”作为开头。),(human,{query})])client.push_prompt(my-poetry-assistant,promptv2_prompt,tags[v2,funny])old_promptclient.pull_prompt(my-poetry-assistant:v1)print(v1 版本系统消息:,old_prompt.messages[0].content)通过上述流程开发者可以在本地开发环境与云端 Hub 之间自由切换实现提示词的完整生命周期管理。完整可运行示例脚本以下脚本整合了从拉取公共模板、创建自定义提示词、推送到 Hub、调用模型以及版本迭代的完整流程。配置好 API Key 后即可直接运行。importosimportsysfromlangchainimporthubfromlangsmithimportClientfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAIdefcheck_env():检查必要的环境变量是否已配置ifnotos.getenv(LANGCHAIN_API_KEY):sys.exit(错误请先设置 LANGCHAIN_API_KEY 环境变量)ifnotos.getenv(OPENAI_API_KEY):print(警告未设置 OPENAI_API_KEY将跳过模型调用环节)defmain():check_env()clientClient()# 1. 拉取公共模板print( 拉取公共模板langchain-ai/text-to-sql)public_prompthub.pull(langchain-ai/text-to-sql)print(模板变量列表:,public_prompt.input_variables)# 2. 创建并推送自定义模板print(\n 创建并推送自定义提示词)my_templateChatPromptTemplate.from_messages([(system,你是一位精通古诗词的助手请使用中文回答。),(human,{question})])try:client.push_prompt(my-chinese-poet,promptmy_template)print(推送成功)exceptExceptionase:print(f推送失败:{e}可能该名称已存在将直接尝试拉取)# 3. 拉取自定义模板并调用模型print(\n 拉取自定义提示词并执行测试)custom_promptclient.pull_prompt(my-chinese-poet)print(提示词结构)formsgincustom_prompt.messages:print(f [{msg.type}]{msg.content})ifos.getenv(OPENAI_API_KEY):modelChatOpenAI(modelgpt-3.5-turbo,temperature0.7)chaincustom_prompt|model responsechain.invoke({question:写一首关于月亮的五言绝句})print(\n模型回答)print(response.content)else:print(\n跳过模型调用OPENAI_API_KEY 未设置)# 4. 创建新版本并推送print(\n 创建 v2 版本并推送至 Hub)v2_templateChatPromptTemplate.from_messages([(system,你是一位风趣幽默的唐诗助手每次回答以“古人云”开头。),(human,{question})])client.push_prompt(my-chinese-poet,promptv2_template,tags[v2,funny])print(v2 版本已成功推送)# 5. 验证版本差异v1client.pull_prompt(my-chinese-poet:v1)v2client.pull_prompt(my-chinese-poet:v2)print(\n版本对比)print(v1 系统消息:,v1.messages[0].content)print(v2 系统消息:,v2.messages[0].content)if__name____main__:main()执行该脚本将完整覆盖提示词模板从社区学习、自主创作到版本迭代的全链路流程。API 速览本节汇总博客中涉及的核心 API便于开发者快速查阅与参考。langchain.hub.pull所属库langchain方法签名hub.pull(repo_path: str) - PromptTemplate参数说明repo_path为 Hub 上的模板路径格式为owner/repo_name返回值对应的提示词模板对象适用版本langchain 0.1.0fromlangchainimporthub prompthub.pull(langchain-ai/text-to-sql)langsmith.Client.push_prompt所属库langsmith方法签名client.push_prompt(prompt_name: str, prompt: BasePromptTemplate, tags: Optional[List[str]] None)参数说明prompt_name提示词在 Hub 中的唯一名称prompt提示词模板实例tags可选版本标签列表返回值无适用版本langsmith 0.1.0fromlangsmithimportClientfromlangchain_core.promptsimportChatPromptTemplate clientClient()promptChatPromptTemplate.from_messages([(system,你是助手),(human,{q})])client.push_prompt(my-assistant,promptprompt,tags[v1])langsmith.Client.pull_prompt所属库langsmith方法签名client.pull_prompt(prompt_name: str) - BasePromptTemplate参数说明prompt_name支持name或name:version格式如my-assistant:v1返回值提示词模板实例适用版本langsmith 0.1.0fromlangsmithimportClient clientClient()promptclient.pull_prompt(my-assistant:v1)参考文档官方文档LangChain 提示词模板官方文档LangSmith Hub 官方指南LangSmith Python SDK 文档参考链接LangChain GitHub 仓库LangSmith 官网总结本文系统梳理了 LangChain 提示词模板体系的完整知识图谱涵盖基础模板PromptTemplate、ChatPromptTemplate、Few Shot 示例机制、三大动态示例选择器LengthBasedExampleSelector、SemanticSimilarityExampleSelector、MaxMarginalRelevanceExampleSelector、部分格式化partial()以及 LangSmith Hub 的工程化管理能力。通过从 Hub 拉取社区模板、自定义推送、模型调用与版本迭代的端到端实践展示了提示词从开发到运维的全生命周期管理方案。这些能力是构建生产级 AI Agent 的关键基础设施提示词不再是一段静态文本而是演进为一套可复用、可协作、可度量的软件资产。