3.1 提示词模板 — LangChain框架精通链式编程核心 本节导读:掌握LangChain模板系统,掌握从简单字符串到复杂模板链的构建,实现个性化、可配置的提示词工程。 学习目标 掌握PromptTemplate基础用法和参数化设计 理解ChatPromptTemplate和MessagesPlaceholder的使用场景 学会使用FewShotPromptTemplate进行少样本学习 理解自定义模板函数和变量的高级用法 构建可复用的提示词模板系统 核心概念 LangChain的提示词模板系统是构建AI应用的核心组件,它将静态文本与动态数据结合,生成结构化的提示词。
本节导读:掌握LangChain模板系统,掌握从简单字符串到复杂模板链的构建,实现个性化、可配置的提示词工程。
LangChain的提示词模板系统是构建AI应用的核心组件,它将静态文本与动态数据结合,生成结构化的提示词。
模板系统的核心优势:
# 安装必要依赖 pip install langchain langchain-openai langchain-community # 基础配置 import os from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder # API配置 os.environ["OPENAI_API_KEY"] = "your-api-key-here" llm = ChatOpenAI(model="gpt-4-turbo", temperature=0.7)
from langchain.prompts import PromptTemplate # 创建简单模板 template = """ 你是一个专业的{role},擅长{specialty}。 用户的问题是:{question} 请提供专业且详细的回答。 """ prompt = PromptTemplate( input_variables=["role", "specialty", "question"], template=template ) # 使用模板 formatted_prompt = prompt.format( role="数据分析师", specialty="市场趋势分析", question="如何分析用户留存率下降的原因?" ) print(formatted_prompt)
输出示例:
你是一个专业的数据分析师,擅长市场趋势分析。 用户的问题是:如何分析用户留存率下降的原因? 请提供专业且详细的回答。
from langchain_core.prompts import ChatPromptTemplate # 聊天提示词模板 chat_template = ChatPromptTemplate.from_messages([ ("system", "你是一个{role},{description}"), ("human", "用户问题:{question}"), ("assistant", "分析:"), ]) formatted_chat_prompt = chat_template.format_messages( role="产品经理", description="负责用户体验设计和产品优化", question="如何提高移动应用的转化率?" ) print(formatted_chat_prompt)
运行结果:
[SystemMessage(content='你是一个产品经理,负责用户体验设计和产品优化'), HumanMessage(content='用户问题:如何提高移动应用的转化率?'), AIMessage(content='分析:')]
from langchain.prompts.few_shot import FewShotPromptTemplate from langchain.prompts.prompt import PromptTemplate # 定义示例 examples = [ { "question": "什么是机器学习?", "answer": "机器学习是人工智能的一个分支,通过算法让计算机从数据中学习模式并做出预测。" }, { "question": "什么是深度学习?", "answer": "深度学习是机器学习的子集,使用神经网络来学习数据的复杂模式和表示。" } ] # 示例模板 example_prompt = PromptTemplate( input_variables=["question", "answer"], template="问题:{question}\n答案:{answer}" ) # 创建少样本模板 few_shot_prompt = FewShotPromptTemplate( example_prompt=example_prompt, examples=examples, suffix="问题:{question}\n答案:", input_variables=["question"], example_separator="\n\n" ) # 使用少样本模板 result = few_shot_prompt.format(question="什么是监督学习?") print(result)
输出结果:
问题:什么是机器学习? 答案:机器学习是人工智能的一个分支,通过算法让计算机从数据中学习模式并做出预测。 问题:什么是深度学习? 答案:深度学习是机器学习的子集,使用神经网络来学习数据的复杂模式和表示。 问题:什么是监督学习? 答案:
from langchain.prompts import StringPromptTemplate from typing import Dict # 自定义模板函数 def analyze_complexity(text: str) -> str: """计算文本复杂度""" word_count = len(text.split()) if word_count < 10: return "简单" elif word_count < 50: return "中等" else: return "复杂" class CustomPromptTemplate(StringPromptTemplate): def format(self, **kwargs) -> str: # 添加动态变量 kwargs['complexity'] = analyze_complexity(kwargs.get('text', '')) kwargs['word_count'] = len(kwargs.get('text', '').split()) return self.template.format(**kwargs) # 使用自定义模板 custom_template = CustomPromptTemplate( template=""" 文本复杂度:{complexity} 词数:{word_count} 原文:{text} 请对以上文本进行总结分析: """, input_variables=["text"] ) result = custom_template.format(text="人工智能是计算机科学的一个分支,旨在创建能够执行通常需要人类智能的任务的系统。") print(result)
运行结果:
文本复杂度:复杂 词数:22 原文:人工智能是计算机科学的一个分支,旨在创建能够执行通常需要人类智能的任务的系统。 请对以上文本进行总结分析:
from langchain.prompts import PromptTemplate, FewShotPromptTemplate from langchain_openai import ChatOpenAI from langchain.chains import LLMChain # 1. 创建基础模板 summarization_template = PromptTemplate( input_variables=["text", "max_words"], template=""" 请将以下文本总结为{max_words}字以内的摘要: {text} 要求: 1. 保持核心观点 2. 语言简洁明了 3. 突出重点信息 """ ) # 2. 创建专业模板 professional_template = PromptTemplate( input_variables=["topic", "audience", "expertise_level"], template=""" 作为{expertise_level}级别的{topic}专家,请为{audience}受众编写一篇关于{topic}的文章。 文章要求: - 针对受众调整语言难度 - 提供实用的见解和建议 - 包含实际应用案例 """ ) # 3. 创建多步骤分析模板 analysis_template = FewShotPromptTemplate( example_prompt=PromptTemplate( input_variables=["case", "analysis"], template="案例:{case}\n分析:{analysis}" ), examples=[ { "case": "电商平台用户流失率上升", "analysis": "需要分析用户行为数据,识别流失关键节点,优化用户体验流程" }, { "case": "移动应用下载量增长但留存率低", "analysis": "分析用户首次使用体验,优化引导流程,提供个性化推荐" } ], suffix="案例:{case}\n分析:", input_variables=["case"], example_separator="\n\n" ) # 4. 创建模板链 template_chain = { 'summarization': LLMChain( llm=ChatOpenAI(model="gpt-4-turbo"), prompt=summarization_template ), 'professional': LLMChain( llm=ChatOpenAI(model="gpt-4-turbo"), prompt=professional_template ), 'analysis': LLMChain( llm=ChatOpenAI(model="gpt-4-turbo"), prompt=analysis_template ) } # 5. 使用示例 print("=== 基础总结 ===") summary_result = template_chain['summarization'].run( text="人工智能正在改变各行各业的运作方式,从医疗诊断到金融服务,从制造业到教育领域,AI技术都在发挥着越来越重要的作用。", max_words=30 ) print(summary_result) print("\n=== 专业文章 ===") article_result = template_chain['professional'].run( topic="人工智能", audience="企业管理者", expertise_level="高级" ) print(article_result)
运行结果示例:
=== 基础总结 === AI技术正在改变医疗、金融、制造和教育等多个行业,影响力持续扩大。 === 专业文章 === # 人工智能:企业管理者指南 作为高级级别的AI专家,为企业管理者受众编写一篇关于人工智能的文章。 文章要求: - 针对受众调整语言难度 - 提供实用的见解和建议 - 包含实际应用案例 人工智能正在重塑企业运营模式。从自动化流程到智能决策支持,AI技术为企业带来前所未有的机遇。在医疗领域,AI辅助诊断提高准确率;在金融行业,算法交易优化投资策略;在制造业,预测性维护减少设备故障。 关键建议: 1. 制定AI战略规划 2. 培养AI人才团队 3. 确保数据质量 4. 关注伦理和合规问题 成功案例:某零售企业通过AI推荐系统提升销售额35%。
A:根据任务复杂度选择:简单字符串格式用PromptTemplate,对话场景用ChatPromptTemplate,需要示例学习用FewShotPromptTemplate。任务复杂度高时建议组合使用。
A:所有变量都必须通过input_variables明确声明,运行时提供对应值。复杂变量可通过自定义模板函数预处理,确保数据格式正确。
A:对用户输入进行验证和过滤,使用白名单机制,避免直接拼接用户输入到模板中。对于敏感信息考虑使用变量替换而非直接嵌入。
A:预编译常用模板,缓存格式化结果,避免重复创建相同模板。对于复杂模板可考虑拆分为多个简单模板组合使用。
通过本节学习,我们掌握了LangChain提示词模板系统的核心功能,包括基础模板、聊天模板、少样本学习模板等。提示词模板是构建AI应用的基础,合理使用可以大幅提高开发效率和输出质量。下一节将深入讲解输出解析器的使用,确保LLM输出的结构化处理。
关键词:LangChain框架精通, 提示词模板, PromptTemplate, ChatPromptTemplate, FewShotPromptTemplate, 链式编程, 模板系统, AI应用开发, 教程, 实战
难度:进阶
预计阅读:25分钟