第三章:提示模板 (Prompt Templates) —— 精准的沟通艺术

你好,我是阿扩。很高兴与你继续这趟旅程。

在前两章,我们学会了如何启动并与AI的“大脑”——模型进行对话。但你可能已经发现,我们每次提问,都需要手动在代码里拼接字符串或消息对象。如果应用逻辑变得复杂,这种方式会显得非常笨拙且难以维护。

别担心,LangChain早已为我们准备好了优雅的解决方案。今天,我将带你掌握一项让AI沟通变得“标准化”和“自动化”的艺术——提示模板 (Prompt Templates)

3.1 本节目标

  1. 理解为什么需要使用提示模板。
  2. 掌握 ChatPromptTemplate 的使用方法,为聊天模型创建动态提示。
  3. 学会如何定义带有输入变量(placeholders)的模板。
  4. 能够将模板、用户输入和模型三者结合,完成一次动态的AI调用。

3.2 核心概念速览

提示模板 (Prompt Template) 的核心思想非常简单,我们可以用一个大家都很熟悉的例子来理解它——信件模板

想象一下,你要写一封邮件,邀请多位嘉宾参加活动。你不会为每一位嘉宾都重写一封邮件,而是会创建一个模板:

尊敬的 {嘉宾姓名}

您好!诚挚邀请您参加我们将于 {日期}{地点} 举办的 {活动名称}

期待您的光临!

在这个模板中,{嘉宾姓名}{日期}{地点}{活动名称} 就是占位符(placeholders)。你只需要提供这些变量的具体值,就能快速生成一封封个性化的邮件。

在LangChain中,提示模板的工作原理完全一样。我们预先定义好一个包含占位符的提示结构,程序运行时,只需要把动态的变量“填”进去,就能生成一个最终发送给LLM的、格式完美的完整提示。

3.3 LangChain组件解析

今天我们的主角是 ChatPromptTemplate,它是专门为 聊天模型(Chat Models) 设计的模板工具。

  • ChatPromptTemplate.from_messages([...]): 这是创建聊天提示模板最常用、最直观的方法。它接收一个由消息模板组成的列表。这些消息模板可以是 SystemMessageHumanMessageAIMessage 的字符串形式,其中可以包含用花括号 {} 包裹的输入变量。

  • template.format_messages(**kwargs): 这是模板对象的一个核心方法。当你调用它并传入一个包含变量值的字典时(例如 product="智能手表", features="心率监测、超长待机"),它会用这些值替换掉模板中的占位符,并返回一个格式化好的、可以被聊天模型直接使用的消息列表。

3.4 实战代码演练

让我们来构建一个“产品描述生成器”。我们的程序将接收一个产品名称和一些特性,然后利用提示模板,让AI为我们生成一段吸引人的营销文案。

第一步:确保环境就绪

和之前一样,请确保你已安装所需库,并设置了DASHSCOPE_API_KEY环境变量。

pip install langchain langchain_community dashscope

第二步:编写并运行Python代码

创建一个名为 prompt_template_demo.py 的文件,然后将下面的代码复制进去。

# 1. 导入必要的模块
from langchain_community.chat_models import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate

def main():
    """主函数,演示如何使用提示模板"""
    print("--- 提示模板演示:产品描述生成器 ---")
    
    # 2. 创建聊天模型实例
    chat_model = ChatTongyi(temperature=0.5)
    
    # 3. 定义聊天提示模板
    # 我们使用 from_messages 方法,传入一个消息列表。
    # SystemMessage 定义了AI的角色和任务。
    # HumanMessage 包含了两个占位符:{product_name} 和 {features}。
    template = ChatPromptTemplate.from_messages([
        ("system", "你是一位专业的营销文案专家,擅长为产品撰写富有吸引力的描述。"),
        ("human", "请为产品“{product_name}”生成一段营销文案,突出它的以下特点:{features}。")
    ])
    
    # 4. 准备动态输入值
    product_name = "AI智能降噪耳机"
    features = "主动降噪、30小时超长续航、空间音频技术"
    
    # 5. 使用模板格式化输入
    # 我们调用 .format_messages() 并传入一个字典来填充占位符。
    formatted_prompt = template.format_messages(
        product_name=product_name,
        features=features
    )
    
    print("\n--- 格式化后的完整提示 ---")
    print(formatted_prompt)
    print("--------------------------\n")
    
    # 6. 调用模型并获取回答
    print("正在生成文案...")
    response = chat_model.invoke(formatted_prompt)
    
    # 7. 打印模型的回答
    print("\nAI生成的营销文案:")
    print(response.content)

if __name__ == "__main__":
    main()

运行结果可能如下:

--- 提示模板演示:产品描述生成器 ---

--- 格式化后的完整提示 ---
[SystemMessage(content='你是一位专业的营销文案专家,擅长为产品撰写富有吸引力的描述。'), HumanMessage(content='请为产品“AI智能降噪耳机”生成一段营销文案,突出它的以下特点:主动降噪、30小时超长续航、空间音频技术。')]
--------------------------

正在生成文案...

AI生成的营销文案:
**静享纯粹,声临其境——您的AI智能降噪耳机已上线!**

厌倦了城市的喧嚣,渴望一片只属于自己的听觉绿洲?现在,让科技为您隔绝纷扰。

我们的全新AI智能降噪耳机,搭载业界领先的**主动降噪**技术,能精准识别并消除环境噪音,无论是在通勤地铁还是嘈杂的咖啡馆,都能让您瞬间沉浸在纯净的音乐世界。

告别电量焦虑!我们为您带来了惊人的**30小时超长续航**能力,一次充电,满足您数日的聆听需求,让美妙旋律从不间断。

更进一步,我们引入了革命性的**空间音频技术**。它能追踪您的头部动态,营造出影院级的3D环绕声场,无论听歌、看电影还是玩游戏,都能为您带来前所未有的沉浸式体验。

AI智能降噪耳机,不仅是耳机,更是您通往纯粹声音世界的钥匙。立即体验,开启您的听觉新纪元!

3.5 代码逻辑详解

  1. from langchain_core.prompts import ChatPromptTemplate: 我们从langchain_core.prompts模块中导入了核心的ChatPromptTemplate类。
  2. template = ChatPromptTemplate.from_messages([...]): 这是本章最关键的一步。我们创建了一个模板实例。
    • ("system", "..."): 这是SystemMessage的简写形式,LangChain能够智能地识别它。它为AI设定了“营销专家”的身份。
    • ("human", "..."): 这是HumanMessage的简写。注意字符串中的{product_name}{features},它们就是等待被填充的“空”。
  3. formatted_prompt = template.format_messages(...): 我们调用了.format_messages()方法。传入的字典的keyproduct_name, features)必须与模板中的占位符名称完全对应。该方法返回一个标准的消息列表([SystemMessage(...), HumanMessage(...)]),这正是chat_model.invoke()所期望的输入格式。
  4. response = chat_model.invoke(formatted_prompt): 我们将格式化后的、包含了具体产品信息的消息列表传递给模型,从而得到一个高度定制化的回答。

通过这种方式,我们的核心逻辑(AI的角色和提问结构)被固定在了模板里,而动态变化的数据(产品名和特性)则在运行时才传入。这大大提高了代码的复用性和可维护性。

3.6 总结与思考

恭喜你,你已经掌握了与AI进行“精准沟通”的艺术!使用提示模板,就像是为你的AI应用建立了一套标准作业流程(SOP),确保了每次输入的质量和一致性,从而得到更可控、更优质的输出。

本章重点回顾:

  • 提示模板的核心价值在于分离静态逻辑和动态数据
  • ChatPromptTemplate.from_messages是为聊天模型创建模板的利器。
  • 使用 {} 来定义占位符,并通过 .format_messages() 方法传入字典来填充它们。
  • 模板让我们的代码更模块化、可复用、易维护

思考与练习:
现在,请你来挑战一下!创建一个新的Python脚本,设计一个“代码解释器”的提示模板。

  • AI角色:一位资深的软件工程师,擅长用简单易懂的语言解释复杂的代码。
  • 输入变量language(编程语言,如Python、JavaScript)和 code_snippet(一小段代码)。
  • 任务:让AI解释你提供的代码片段是做什么的。

尝试用你新学的知识,构建这个模板并调用AI,看看它能否胜任“代码解释器”这个新角色。这个练习将帮助你巩固今天所学,并让你体会到提示模板的无限可能。

在下一章,我们将解决一个新问题:AI的回答是自由文本,如何让它输出我们程序需要的结构化数据(如JSON)呢?敬请期待 输出解析器(Output Parsers) 的登场!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值